Невозможно разрешить все компоненты для типов [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>