Лагом: Невозможно создать инжектор - PullRequest
0 голосов
/ 23 мая 2018

Ошибка, которую я получаю, возможно, связана с отсутствием конфигурации, несовместимым модулем ... Через несколько часов я не могу понять это.

При sbt runAll я получаю следующую трассировку стека:

com.google.inject.CreationException: Невозможно создать инжектор, см. Следующие ошибки:

1) Ошибка в пользовательском поставщике, scala.MatchError: Сообщение (класса sun.reflect.generics.reflectiveObjects.TypeVariableImpl) в com.lightbend.lagom.javadsl.server.ServiceGuiceSupport.bindServices (ServiceGuiceSupport.java:com.google.inject.util.Modules $ OverrideModule -> UserModule) при нахождении com.lightbend.lagom.internal.javadsl.server.ResolvedServices для второго параметра com.lightbend.lagom.internal.server.ServiceRegistrationModule $ RegisterWithServiceRegistry.ServiceRegistrationModule.scala: 56) по адресу com.lightbend.lagom.internal.server.ServiceRegistrationModule.bindings (ServiceRegistrationModule.scala: 29): привязка (класс com.lightbend.lagom.internal.server.ServiceRegistrationModule $ RegisterWith viavice)модули: com.google.inject.util.Modules $ OverrideModule -> играть.api.inject.guice.GuiceableModuleConversions $$ anon $ 1) при поиске com.lightbend.lagom.internal.server.ServiceRegistrationModule $ RegisterWithServiceRegistry

1 ошибка в com.google.inject.internal.Errors.throwfreceptionException.java: 470) на com.google.inject.internal.InternalInjectorCreator.injectDynamically (InternalInjectorCreator.java:184) на com.google.inject.internal.InternalInjectorCreator.build (InternalInjectorCreator.java:110) на com.google.inject.Guice.createInjector (Guice.java:99) на com.google.inject.Guice.createInjector (Guice.java:84) на play.api.inject.guice.GuiceBuilder.injector (GuiceInjectorBuilder.scala: 185) на play.api.inject.guice.GuiceApplicationBuilder.build (GuiceApplicationBuilder.scala: 137) в play.api.inject.guice.GuiceApplicationLoader.load (GuiceApplicationLoader.scala: 21) в play.core.server.LagomReloadableDevSononart $ $получить $ 5 (LagomReloadableDevServerStart.scala: 176) в play.utils.Threads $ .withContextClassLoader (Threads.scala: 21) в play.core.server.LagomReloadableDevServerStart $$ anon $ 1. $ anonfun $ get $ 3 (LagomReloadableDevServerStart.scala: 173) в scala.Option.map (Option.scala: 146) в play.core.server.LagomReloadableDevServerStart $$ anon $ 1. $ anonfun $ get $ 2 (LagomReloadableDevServerStart.scala: 149) в scala.util.Success.flatMap (Try.scala: 247) в play.core.server.LagomReloadableDevServerun $ $получить $ 1 (LagomReloadableDevServerStart.scala: 147) в scala.concurrent.Future $. $ anonfun $ apply $ 1 (Future.scala: 655) в scala.util.Success. $ anonfun $ map $ 1 (Try.scala: 251) в scala.util.Success.map (Try.scala: 209) в scala.concurrent.Future. $ anonfun $ map $ 1 (Future.scala: 289) в scala.concurrent.impl.Promise.liftedTree1 $ 1 (Promise.scala: 29)в scala.concurrent.impl.Promise. $ anonfun $ transform $ 1 (Promise.scala: 29) в scala.concurrent.impl.CallbackRunnable.run (Promise.scala: 60) в java.util.concurrent.ForkJoinTask $ RunnableExecuteAction.exe(ForkJoinTask.java:1402) в java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:289) в java.util.concurrent.ForkJoinPool $ WorkQueue.runTask (ForkJoinPool.java:1056) в java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.javauro.javauru92).run (ForkJoinWorkerThread.java:157) Вызывается: scala.MatchError: Сообщение (класса sun.reflect.generics.reflectiveObjects.TypeVariableImpl) в com.lightbend.lagom.internal.javadsl.api.CallResfance для $ $.(ServiceCallResolver.scala: 46) в scala.Option.orElse (Option.scala: 289) в com.lightbend.lagom.internal.javadsl.api.CallResolver.registeredMessageSerializerFor (ServiceCallResolver.scala: 44) вcom.lightbend.lagom.internal.javadsl.api.CallResolver.messageSerializerFor (ServiceCallResolver.scala: 26) по адресу com.lightbend.lagom.internal.javadsl.api.CallResolver.resolveMessageSerializer (ServiceCallRlightSal. 17).lagom.internal.javadsl.api.ServiceReader $. $ anonfun $ resolServiceDescriptor $ 4 (ServiceReader.scala: 200) в scala.collection.TraversableLike. $ anonfun $ map $ 1 (TraversableLike.scala: 234) в scala.collection.Iterator.foreach(Iterator.scala: 929) в scala.collection.Iterator.foreach $ (Iterator.scala: 929) в scala.collection.AbstractIterator.foreach (Iterator.scala: 1417) в scala.collection.IterableLike.foreach (IterableLike.scala: 71) в scala.collection.IterableLike.foreach $ (IterableLike.scala: 70) в scala.collection.AbstractIterable.foreach (Iterable.scala: 54) в scala.collection.TraversableLike.map (TraversableLike.scala: 234) вscala.collection.TraversableLike.map $ (TraversableLike.scala: 227) в scala.collection.AbstractTraversable.map (Traversable.scala: 104) в com.lightbend.lagom.internal.javadsl.api.ServiceReader..internal.javadsl.server.JavadslServerBuilder. $ anonfun $ resolServices $ 1 (JavadslServerBuilder.scala: 56) на scala.collection.TraversableLike. $ anonfun $ map $ 1 (TraversableLike.scala: 234) в scala.foreableableableableable(ResizableArray.scala: 59) на scala.collection.mutable.ResizableArray.foreach $ (ResizableArray.scala: 52) на scala.collection.mutable.ArrayBuffer.foreach (ArrayBuffer.scala: 48) на scala.collection.TraversableLike.map.(TraversableLike.scala: 234) в scala.collection.TraversableLike.map $ (TraversableLike.scala: 227) в scala.collection.AbstractTraversable.map (Traversable.scala: 104) в com.lightbend.lagom.internal.javadsl.server.JavadslServerBuilder.resolveServices (JavadslServerBuilder.scala: 50) в com.lightbend.lagom.internal.javadsl.server.ResolvedServicesProvider.get $ lzycompute (JavadslServerBuilder.scala: 112) по адресу com.lightbend.lagom.internal.javadsl.server.ResolvedServicesProvider.get (JavadslServerBuilder.scala: 111) в com.lightl..ResolvedServicesProvider.get (JavadslServerBuilder.scala: 105) в com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:81) в com.google.inject.internal.InternalFactoryToInitializableAdapitFactory.ToInitializableAdapter.provision.com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:61) в com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:45) в com.google.injectinternal (SingleParameterInjector.java:38) на com.google.inject.internal.SingleParameterInjector.getAll (SingleParameterInjector.java:62) на com.google.inject.internal.ConstructorInjector.provision (ConstructorInjec)tor.java:110) на com.google.inject.internal.ConstructorInjector.construct (ConstructorInjector.java:90) на com.google.inject.internal.ConstructorBindingImpl $ Factory.get (ConstructorBindingImpl.java:268) на com.google..inject.internal.java: 40) на com.google.inject.internal.SingletonScope $ 1.get (SingletonScope.java:194) на com.google.inject.internal.InternalFactoryToProviderAdapter.get (InternalFactoryToProviderAdapter.java:41) наcom.google.inject.internal.InternalInjectorCreator $ 1.call (InternalInjectorCreator.java:205) на com.google.inject.internal.InternalInjectorCreator $ 1.call (InternalInjectorCreator.java:199) на com.google.inject.internal.InjectorImpl.callInContext (InjectorImpl.java:1085) на com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons (InternalInjectorCreator.java:199) на com.google.inject.internal.InternalInjectorCreator.injectDynamically (InternalInjectorCreator.java:180)подробнее

Stacktrace, вызванный имплементацией проекта пользователем (путь к файловой системе к проекту - / Users / kimgysen / Documents / project livefeed / lagom / api-v1 / user-impl).Подсказка: может быть, вы забыли включить класс модуля обслуживания через play.modules.enabled?(проверьте в application.conf вашего проекта)

Мой application.conf определяет:

play.modules.enabled += UserModule
  • application.conf хранится в папке user-impl / src / main /ресурсы
  • UserModule хранится в папке user-impl / src / main / java

Я следовал доступным примерам для определения моего модуля:

public class UserModule extends AbstractModule implements ServiceGuiceSupport {

    @Override
    protected void configure() {
        bindService(UserService.class, UserServiceImpl.class);
    }
}

My sbtФайл .build также очень прост:

organization in ThisBuild := "be.zwoop"
scalaVersion in ThisBuild := "2.12.4"
lagomKafkaEnabled in ThisBuild := true

import scala.concurrent.duration._ // Mind that the import is needed.
lagomCassandraMaxBootWaitingTime in ThisBuild := 50000.seconds

lazy val userApi = project("user-api")
  .settings(
    version := "1.0-SNAPSHOT",
    libraryDependencies ++= Seq(
      lagomJavadslApi,
      lombok
    )
  )

lazy val userImpl = project("user-impl")
  .enablePlugins(LagomJava)
  .settings(
    version := "1.0-SNAPSHOT",
    libraryDependencies ++= Seq(
      lagomJavadslPersistenceCassandra
    )
  )
  .dependsOn(userApi)


val lombok = "org.projectlombok" % "lombok" % "1.16.20"
def project(id: String) = Project(id, base = file(id))

У меня определен только 1 плагин:

addSbtPlugin("com.lightbend.lagom" % "lagom-sbt-plugin" % "1.4.4")

Спасибо за предложения.

Отредактируйте внешний вид моей службы:

public interface UserService extends Service {
    String REGISTER_USER_TOPIC = "users";

    ServiceCall<User, String> registerUser();

    @Override
    default Descriptor descriptor() {
        return named("user").withCalls(
                pathCall("/api/user", this::registerUser)
        ).withPathParamSerializer(
                UUID.class, PathParamSerializers.required("UUID", UUID::fromString, UUID::toString)
        ).withTopics(
                topic(REGISTER_USER_TOPIC, this::UserTopic)
        ).withAutoAcl(true);
    }

    Topic UserTopic();
}

1 Ответ

0 голосов
/ 23 мая 2018

Отчет об ошибках в Lagom может быть улучшен здесь, но проблема в том, что вызов службы в вашем UserService использует переменную типа.Например, у вас может быть что-то вроде этого в вашем API:

public <Message> ServiceCall<Message, Foo> foo();

По сути, Lagom не может построить дескриптор службы из этого, потому что он не знает, какой тип Message имеет.

...