Невозможно разрешить все компоненты для типов [org.в GlassFish.Джерси.сообщение.фильтрующий.спи.ObjectProvider]

пытаясь перейти от Moxy к Jackson JSON media provider для моей веб-службы Джерси и нашел пару проблем, которые я не могу решить до сих пор:

во-первых, moxy отлично работал для одного и того же кода, но поскольку мы используем jackson везде в других проектах, я хочу, чтобы все было согласовано... поэтому я изменил

1) зависимость в pom to

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

2) ResourceConfig regester

register(JacksonFeature.class)

но я начал понимать это исключение при запуске веб-службы(в основном это происходит, когда я возвращаюсь из метода веб-службы):

Caused by: org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308: Unable to resolve any beans for Types: [org.glassfish.jersey.message.filtering.spi.ObjectProvider<com.fasterxml.jackson.databind.ser.FilterProvider>]; Bindings: [QualifierInstance{annotationClass=interface javax.enterprise.inject.Default, values={}, hashCode=48147280}]
    at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:815) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
    at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:75) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
    at org.glassfish.jersey.jackson.internal.FilteringJacksonJaxbJsonProvider.writeTo(FilteringJacksonJaxbJsonProvider.java:130) [jersey-media-json-jackson-2.17.jar:]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1128) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:664) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:421) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:411) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.server.ServerRuntime.run(ServerRuntime.java:308) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.internal.Errors.call(Errors.java:271) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.internal.Errors.call(Errors.java:267) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:288) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1110) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:401) [jersey-container-servlet-core-2.17.jar:]
    ... 29 more

Да...и, видимо, мы используем WildFly в качестве сервера приложений, если это имеет значение .

поэтому, если бы кто-то мог указать мне, где может быть проблема, это было бы потрясающе.

Ура!

2 ответов


проблема, похоже, возникает в FilteringJacksonJaxbJsonProvider, который является Джерси собственный поставщик Джексон, для его поддержки для него Фильтрация Данных Сущности. Кажется, что происходит какая-то инъекция (вызов сварки), которая вызывает ее сбой. Если вам не нужна функция фильтрации данных сущности, вы можете избавиться от jersey-media-json-jackson и вместо того, чтобы использовать

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>${jackson2.version}</version>
</dependency>
// as of now ${jackson2.version} == 2.5.3

как для Проблемы сварки, я не уверен если она причинит проблему для вас в будущем, то поэтому я не рассмотрел бы изменить Зависимость Джексона - это решение, а не обходной путь.

Вы сказали в своих комментариях, что используете gf-cdi. Может, в этом и проблема. Этот артефакт больше не производится после Джерси 2.14 (вы используете Джерси 2.17). Модуль поддержки CDI изменился. Вы можете видеть 27.3.1. Выпуск 2.15 Изюминок. В нем упоминаются некоторые вещи о зависимостях поддержки CDI.

улучшение поддержки КДИ причинило ломая изменения для тех потребителей сразу ссылаясь на следующий CDI, поддерживающий модуль Джерси в maven:

<dependency>
     <groupId>org.glassfish.jersey.containers.glassfish</groupId>
     <artifactId>jersey-gf-cdi</artifactId>
     <version>${pre-2.15-version}</version>
 </dependency>

вышеуказанную зависимость необходимо заменить на:

<dependency>
     <groupId>org.glassfish.jersey.ext.cdi</groupId>
     <artifactId>jersey-cdi1x</artifactId>
     <version>2.17</version>
</dependency>

следующие должны быть включены в дополнение, если вы хотите использовать поддержку CDI JTA:

<dependency>
     <groupId>org.glassfish.jersey.ext.cdi</groupId>
     <artifactId>jersey-cdi1x-transaction</artifactId>
     <version>2.17</version>
</dependency>

Я смог решить эту проблему, просто поставив "Accept: application/xml" в запросе. Я также использовал аннотацию @Consumes, как показано на скриншоте. enter image description here

enter image description here