Hi,
this is the first time I get this error. I used Silhouette a number of times in my projects. And also I seperated the logic from multiple modules which displays for example admin service or basket service or something else.
Now and this is the first time I get a
Caused by: java.lang.ClassNotFoundException: customer.DefaultEnv
package modules
import java.util.concurrent.Executors
import com.google.inject.name.Named
import com.google.inject.{AbstractModule, Provides}
import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.api.actions.{SecuredErrorHandler, UnsecuredErrorHandler}
import com.mohiva.play.silhouette.api.crypto.{Crypter, CrypterAuthenticatorEncoder, Signer}
import com.mohiva.play.silhouette.api.repositories.AuthInfoRepository
import com.mohiva.play.silhouette.api.services.{AuthenticatorService, AvatarService}
import com.mohiva.play.silhouette.api.util._
import com.mohiva.play.silhouette.crypto.{JcaCrypter, JcaCrypterSettings, JcaSigner, JcaSignerSettings}
import com.mohiva.play.silhouette.impl.authenticators.{CookieAuthenticator, CookieAuthenticatorService, CookieAuthenticatorSettings}
import com.mohiva.play.silhouette.impl.providers.SocialProviderRegistry
import com.mohiva.play.silhouette.impl.providers.oauth1.{TwitterProvider, XingProvider}
import com.mohiva.play.silhouette.impl.providers.oauth2.{FacebookProvider, GoogleProvider, VKProvider}
import com.mohiva.play.silhouette.impl.providers.openid.YahooProvider
import com.mohiva.play.silhouette.impl.services.GravatarService
import com.mohiva.play.silhouette.impl.util.{DefaultFingerprintGenerator, PlayCacheLayer, SecureRandomIDGenerator}
import com.mohiva.play.silhouette.password.{BCryptPasswordHasher, BCryptSha256PasswordHasher}
import com.mohiva.play.silhouette.persistence.daos.DelegableAuthInfoDAO
import com.mohiva.play.silhouette.persistence.repositories.DelegableAuthInfoRepository
import handler.{CustomSecuredErrorHandler, CustomUnsecuredErrorHandler}
import net.codingwell.scalaguice.ScalaModule
import play.api.Configuration
import play.api.libs.ws.WSClient
import play.api.mvc.CookieHeaderEncoding
import customer.{Account, DefaultCookieEnv, DefaultEnv}
import customer.repositories.{AccountDAO, AccountSilhouetteDAO, PasswordInfoDAO}
import customer.services.{UserServiceImpl, UserSilhouetteService}
import scala.concurrent.ExecutionContext
class SilhouetteModule extends AbstractModule with ScalaModule {
import net.ceedubs.ficus.Ficus._
import net.ceedubs.ficus.readers.ArbitraryTypeReader._
private implicit val silhouetteEC = ExecutionContext.fromExecutor(Executors.newCachedThreadPool)
import net.ceedubs.ficus.readers.ValueReader
import play.api.mvc.Cookie
// implicit val sameSiteReader: ValueReader[Option[Option[Cookie.SameSite]]] = (config: Config, path: String) => {
// if (config.hasPathOrNull(path)){
// if (config.getIsNull(path))
// Some(None)
// else
// Some(Cookie.SameSite.parse(config.getString(path)))
// } else None
// }
implicit val sameSiteReader: ValueReader[Option[Cookie.SameSite]] = ValueReader.relative(cfg => Cookie.SameSite.parse(cfg.as[String]))
override def configure(): Unit = {
bind[Silhouette[DefaultEnv]].to[SilhouetteProvider[DefaultEnv]]
bind[UnsecuredErrorHandler].to[CustomUnsecuredErrorHandler]
bind[SecuredErrorHandler].to[CustomSecuredErrorHandler]
bind[UserSilhouetteService].to[UserServiceImpl]
bind[AccountSilhouetteDAO].to[AccountDAO]
bind[DelegableAuthInfoDAO[PasswordInfo]].to[PasswordInfoDAO]
bind[CacheLayer].to[PlayCacheLayer]
bind[IDGenerator].toInstance(new SecureRandomIDGenerator())
bind[PasswordHasher].toInstance(new BCryptPasswordHasher)
bind[FingerprintGenerator].toInstance(new DefaultFingerprintGenerator(false))
bind[EventBus].toInstance(EventBus())
bind[Clock].toInstance(Clock())
}
/**
* Provides the HTTP layer implementation.
*
* @param client Play's WS client.
* @return The HTTP layer implementation.
*/
@Provides
def provideHTTPLayer(client: WSClient): HTTPLayer = new PlayHTTPLayer(client)
/**
* Provides the cookie signer for the authenticator.
*
* @param configuration The Play configuration.
* @return The cookie signer for the authenticator.
*/
@Provides
@Named("authenticator-signer")
def provideAuthenticatorCookieSigner(configuration: Configuration): Signer = {
val config = configuration.underlying.as[JcaSignerSettings]("silhouette.authenticator.signer")
new JcaSigner(config)
}
/**
* Provides the crypter for the authenticator.
*
* @param configuration The Play configuration.
* @return The crypter for the authenticator.
*/
@Provides
@Named("authenticator-crypter")
def provideAuthenticatorCrypter(configuration: Configuration): Crypter = {
val config = configuration.underlying.as[JcaCrypterSettings]("silhouette.authenticator.crypter")
new JcaCrypter(config)
}
/**
* Provides the Silhouette environment.
*
* @param userService The user service implementation.
* @param authenticatorService The authentication service implementation.
* @param eventBus The event bus instance.
* @return The Silhouette environment.
*/
@Provides
def provideEnvironment(userService: UserSilhouetteService,
authenticatorService: AuthenticatorService[CookieAuthenticator],
eventBus: EventBus): Environment[DefaultCookieEnv] = Environment[DefaultCookieEnv](
userService,
authenticatorService,
Seq(),
eventBus
)
/**
* Provides the social provider registry.
*
* @param facebookProvider The Facebook provider implementation.
* @param googleProvider The Google provider implementation.
* @param vkProvider The VK provider implementation.
* @param clefProvider The Clef provider implementation.
* @param twitterProvider The Twitter provider implementation.
* @param xingProvider The Xing provider implementation.
* @param yahooProvider The Yahoo provider implementation.
* @return The Silhouette environment.
*/
@Provides
def provideSocialProviderRegistry(facebookProvider: FacebookProvider,
googleProvider: GoogleProvider,
vkProvider: VKProvider,
/*clefProvider: ClefProvider,*/
twitterProvider: TwitterProvider,
xingProvider: XingProvider,
yahooProvider: YahooProvider): SocialProviderRegistry = {
SocialProviderRegistry(Seq(
googleProvider,
facebookProvider,
twitterProvider,
vkProvider,
xingProvider,
yahooProvider/*,
clefProvider*/
))
}
/**
* Provides the authenticator service.
*
* @param crypter The crypter implementation.
* @param idGenerator The ID generator implementation.
* @param configuration The Play configuration.
* @param clock The clock instance.
* @return The authenticator service.
*/
@Provides
def provideAuthenticatorService(@Named("authenticator-signer") signer: Signer,
@Named("authenticator-crypter") crypter: Crypter,
cookieHeaderEncoding: CookieHeaderEncoding,
fingerprintGenerator: FingerprintGenerator,
idGenerator: IDGenerator,
configuration: Configuration,
clock: Clock): AuthenticatorService[CookieAuthenticator] = {
val config = configuration.underlying.as[CookieAuthenticatorSettings]("silhouette.authenticator")
val authenticatorEncoder = new CrypterAuthenticatorEncoder(crypter)
new CookieAuthenticatorService(config, None, signer, cookieHeaderEncoding, authenticatorEncoder, fingerprintGenerator, idGenerator, clock)
}
/**
* Provides the password hasher registry.
*
* @return The password hasher registry.
*/
@Provides
def providePasswordHasherRegistry(): PasswordHasherRegistry = {
PasswordHasherRegistry(new BCryptSha256PasswordHasher(), Seq(new BCryptPasswordHasher()))
}
/**
* Provides the auth info repository.
*
* @param passwordInfoDAO The implementation of the delegable password auth info DAO.
* @return The auth info repository instance.
* Hier bitte lesen: https://github.com/hkirk/play-silhouette-slick-seed/blob/master/app/modules/modules.SilhouetteModule.scala
*/
@Provides
def provideAuthInfoRepository(passwordInfoDAO: DelegableAuthInfoDAO[PasswordInfo]): AuthInfoRepository =
new DelegableAuthInfoRepository(passwordInfoDAO)
/**
* Provides the avatar service.
*
* @param httpLayer The HTTP layer implementation.
* @return The avatar service implementation.
*/
@Provides
def provideAvatarService(httpLayer: HTTPLayer): AvatarService = new GravatarService(httpLayer)
}
play.api.UnexpectedException: Unexpected exception[ClassNotFoundException: customer.DefaultEnv]
at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:196)
at play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:127)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:253)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding$1(AkkaHttpServer.scala:149)
at akka.stream.impl.fusing.MapAsync$$anon$30.onPush(Ops.scala:1207)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:411)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:588)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:472)
at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:563)
Caused by: java.lang.ClassNotFoundException: customer.DefaultEnv
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at scala.reflect.runtime.JavaMirrors$JavaMirror.javaClass(JavaMirrors.scala:556)
at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$classToJava$1(JavaMirrors.scala:1232)
at scala.reflect.runtime.TwoWayCaches$TwoWayCache.$anonfun$toJava$1(TwoWayCaches.scala:49)
at scala.reflect.runtime.TwoWayCaches$TwoWayCache.toJava(TwoWayCaches.scala:45)
at scala.reflect.runtime.JavaMirrors$JavaMirror.classToJava(JavaMirrors.scala:1224)
The problem is also not solved if I create a trait inside this package. Where is my mistake?
Thank you