无法解析类型的任何bean [org.glassfish.jersey.message.filtering.spi.ObjectProvider <com.fasterxml.jackson.databind.ser.FilterProvider>]

Fed*_*kov 8 java json jackson jersey-2.0 wildfly-8

我试图从Moxy转移到杰克逊json媒体提供商为我的泽西岛网络服务,发现了迄今为止我无法解决的几个问题:

首先,moxy对于同一段代码工作正常,但因为我们在其他项目中使用jackson,我希望保持一致......所以我改变了

1)对pom的依赖

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

2)ResourceConfig regester

register(JacksonFeature.class)
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的webservice时,我开始得到这个异常(基本上当我从Web服务方法返回时会发生这种情况):

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$2.run(ServerRuntime.java:308) [jersey-server-2.17.jar:]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [jersey-common-2.17.jar:]
    at org.glassfish.jersey.internal.Errors$1.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
Run Code Online (Sandbox Code Playgroud)

是的......显然我们使用WildFly作为应用程序服务器,如果它很重要.

因此,如果有人能够指出我可能出现的问题,那就太棒了.

干杯!

Pau*_*tha 5

问题似乎发生在FilteringJacksonJaxbJsonProvider泽西岛自己的杰克逊提供商,因为它支持它的实体数据过滤.似乎有一些注入(调用Weld)导致它失败.如果您不需要实体数据过滤功能,您可以摆脱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
Run Code Online (Sandbox Code Playgroud)

至于Weld问题,我不确定它是否会在将来给你造成问题,所以我不会考虑改变杰克逊依赖是一个解决方案,而不是解决方法.

你在评论中说过你正在使用gf-cdi.也许这就是问题所在.在泽西岛2.14(你使用的是泽西岛2.17)之后不再生成这个神器.CDI支持模块已更改.你可以看到27.3.1.发布2.15亮点.它提到了有关CDI支持依赖关系的一些事情.

CDI支持改进导致那些用户直接参考maven中支持Jersey模块的以下CDI的重大更改:

<dependency>
     <groupId>org.glassfish.jersey.containers.glassfish</groupId>
     <artifactId>jersey-gf-cdi</artifactId>
     <version>${pre-2.15-version}</version>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

上述依赖关系需要替换为:

<dependency>
     <groupId>org.glassfish.jersey.ext.cdi</groupId>
     <artifactId>jersey-cdi1x</artifactId>
     <version>2.17</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您想利用CDI JTA支持,还需要包含以下内容:

<dependency>
     <groupId>org.glassfish.jersey.ext.cdi</groupId>
     <artifactId>jersey-cdi1x-transaction</artifactId>
     <version>2.17</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)