在Wildfly上激活JaxbAnnotationModule [英] Activate JaxbAnnotationModule on Wildfly

查看:267
本文介绍了在Wildfly上激活JaxbAnnotationModule的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Wildfly 8上设置REST服务,该服务返回带有自定义枚举值的JSON。我知道Wildfy使用Jackson 2.3进行序列化。我还知道,当使用Jackson ObjectMapper注册JaxbAnnotationModule时,序列化程序会产生正确的结果。问题是,我如何配置我的Wildfly实例或我的web项目来使用这个模块。

I am trying to setup a REST service on Wildfly 8 that returns JSON with customized enum Values. I know that Wildfy uses Jackson 2.3 for the serialisation. I also know that when registering the JaxbAnnotationModule with the Jackson ObjectMapper the serializer produces the correct result. The question is, how do i configure my Wildfly Instance or my web-project to use this module.

好的,为了使这个更清晰,一个简单的例子。

OK, to make this more clear, a simple example.

首先,这可以正常工作并生成我需要的结果。

First, this works properly and generates the result I need.

@XmlEnum
public enum TestEnum
    @XmlEnumValue("2")
    TWO; 
}

public class Test {
    public static void main(String[] args) {

    ObjectMapper mapper = new ObjectMapper();
    JaxbAnnotationModule jaxbModule = new JaxbAnnotationModule();
    mapper.registerModule(jaxbModule);
    try {
        mapper.writeValue(System.out, TestEnum.TWO);
    } catch (Exception e) {
    }
}

生成正确的输出:2

现在,我的问题服务

@Path("test")
@RequestScoped
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class TestRestService {

    @GET
    @Path("/json")
    @Produces({MediaType.APPLICATION_JSON})
    public TestEnum testJson() {
        return TestEnum.TWO;
    }
}

这会返回TWO,这不是我想要的。

This returns "TWO" which is not what i intended.

我没有在jboss-deployment-structure.xml和web.xml中配置任何内容。

I did not configure anything within the "jboss-deployment-structure.xml" nor the "web.xml".

我没有使用maven所以任何pom.xml解决方案都不适用于我,除了指向我的方向。

I am not using maven so any pom.xml solutions won't work for me besides pointing me in the direction.

我阅读了文档这里但找不到启用JaxbAnnotationModule的选项。

I read the documentation here but could not find the option to enable the JaxbAnnotationModule.

任何可能自定义适用于JSON的枚举值和XML将是apreciated。

Any possibility to customize the enum value that works for JSON and XML would be apreciated.

-----更新-----

----- UPDATE -----

理论上,该解决方案已经发布< a href =https://stackoverflow.com/questions/21395380/json-serialization-loop-infinite-recursion-in-wildfly>这里

In theory, the solution was already posted here

如果我使用该解决方案尝试使用Jackson Mapper和JaxbAnnotationModule,它应该创建正确的输出。

If I use that solution try to use the Jackson Mapper with the JaxbAnnotationModule it should create the correct output.

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonMapper implements MessageBodyWriter<Object> {

  ObjectMapper mapper;

  @PostConstruct
     void init() {
    mapper = new ObjectMapper();
    JaxbAnnotationModule jaxbModule = new JaxbAnnotationModule();
    // this is what is causing the current problem
    mapper.registerModule(jaxbModule);
  }

  @Override
  public boolean isWriteable(Class<?> aClass, Type type,
      Annotation[] annotations, MediaType mediaType) {
    return true;
  }

  @Override
  public long getSize(Object object, Class<?> aClass, Type type,
      Annotation[] annotations, MediaType mediaType) {
    return 0;
  }

  @Override
  public void writeTo(Object object, Class<?> aClass, Type type,
      Annotation[] annotations, MediaType mediaType,
      MultivaluedMap<String, Object> stringObjectMultivaluedMap,
      OutputStream outputStream) throws IOException,
      WebApplicationException {
    mapper.writeValue(outputStream, object);
  }

}

在我的jboss-deployment-structure中.xml我激活必要的模块(或者我认为)

In my jboss-deployment-structure.xml i activate the necessary modules (or so i would think)

<dependencies>
  <module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import" />
  <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
</dependencies>

调用我的测试方法时,我在javax.xml.bind.annotation.XmlElement上得到一个ClassNotFound异常应该包含com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider,因为这取决于javax.ws.rs.api然后包括javax.xml.bind.api,其中包含缺少的类。

when calling my test method i get a ClassNotFound exception on javax.xml.bind.annotation.XmlElement which should have been included by including "com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" since this is depending on "javax.ws.rs.api" which is then including "javax.xml.bind.api" which contains the missing class.

如果我没有注册创建的jaxbModule对于映射器,除了注释@XmlEnumValue被忽略外,一切正常。我得到的输出与没有更改的输出相同。

If i do not register the created jaxbModule to the mapper, all works fine except that the annotation @XmlEnumValue is ignored. I get the same output as without the changes.

任何建议?

10:30:10,958 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found TestRest.war in deployment directory. To trigger deployment create a file called TestRest.war.dodeploy
10:30:11,012 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015876: Starting deployment of "TestRest.war" (runtime-name: "TestRest.war")
10:30:12,464 INFO  [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016002: Processing weld deployment TestRest.war
10:30:12,648 INFO  [org.hibernate.validator.internal.util.Version] (MSC service thread 1-5) HV000001: Hibernate Validator 5.0.2.Final
10:30:12,906 INFO  [org.jboss.weld.deployer] (MSC service thread 1-6) JBAS016005: Starting Services for CDI deployment: TestRest.war
10:30:12,948 INFO  [org.jboss.weld.Version] (MSC service thread 1-6) WELD-000900: 2.1.1 (Final)
10:30:13,004 INFO  [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016008: Starting weld service for deployment TestRest.war
10:30:14,832 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-2) Deploying javax.ws.rs.core.Application: class com.test.rest.JaxRsActivator$Proxy$_$$_WeldClientProxy
10:30:14,923 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017534: Register web context: /TestRest
10:30:15,028 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "TestRest.war" (runtime-name : "TestRest.war")
10:30:55,359 WARN  [org.jboss.resteasy.core.ExceptionHandler] (default task-1) Unknown exception while executing GET /test/json: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke private void com.test.utility.JacksonMapper.init() on com.test.utility.JacksonMapper@65a4c446
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:91) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.postConstruct(DefaultLifecycleCallbackInvoker.java:72) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.BasicInjectionTarget.postConstruct(BasicInjectionTarget.java:95) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.BeanInjectionTarget.postConstruct(BeanInjectionTarget.java:63) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.resteasy.cdi.JaxrsInjectionTarget.postConstruct(JaxrsInjectionTarget.java:59) [resteasy-cdi-3.0.6.Final.jar:]
   at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:153) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:94) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at com.test.utility.JacksonMapper$Proxy$_$$_WeldClientProxy.isWriteable(Unknown Source) [classes:]
   at org.jboss.resteasy.spi.ResteasyProviderFactory.resolveMessageBodyWriter(ResteasyProviderFactory.java:2118) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.spi.ResteasyProviderFactory.getMessageBodyWriter(ResteasyProviderFactory.java:2096) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:62) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:427) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:376) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.6.Final.jar:]
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
   at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:87) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:70)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:67) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:70) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.Connectors.executeRootHandler(Connectors.java:164) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:654) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_04]
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_04]
   at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_04]
Caused by: java.lang.reflect.InvocationTargetException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_04]
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_04]
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_04]
   at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_04]
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:89) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   ... 43 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:111) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:98) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule.setupModule(JaxbAnnotationModule.java:57) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:524) [jackson-databind-2.2.3.jar:]
   at com.test.utility.JacksonMapper.init(JacksonMapper.java:29) [classes:]
   ... 48 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlElement from [Module "com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider:main" from local module loader @722b302 (finder: local module finder @77164bf6 (roots: C:\jboss\wildfly-8.0.0.CR1\modules,C:\jboss\wildfly-8.0.0.CR1\modules\system\layers\base))]
   at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:443) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:431) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:373) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-modules.jar:1.3.0.Final]
   ... 53 more

10:30:55,371 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /TestRest/test/json: org.jboss.resteasy.spi.UnhandledException: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke private void com.test.utility.JacksonMapper.init() on com.test.utility.JacksonMapper@65a4c446
   at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:247) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:149) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:432) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:376) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.6.Final.jar:]
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
   at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:87) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:70)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:67) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:70) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.Connectors.executeRootHandler(Connectors.java:164) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:654) [undertow-core-1.0.0.Beta30.jar:1.0.0.Beta30]
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_04]
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_04]
   at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_04]
Caused by: org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke private void com.test.utility.JacksonMapper.init() on com.test.utility.JacksonMapper@65a4c446
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:91) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.postConstruct(DefaultLifecycleCallbackInvoker.java:72) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.BasicInjectionTarget.postConstruct(BasicInjectionTarget.java:95) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.injection.producer.BeanInjectionTarget.postConstruct(BeanInjectionTarget.java:63) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.resteasy.cdi.JaxrsInjectionTarget.postConstruct(JaxrsInjectionTarget.java:59) [resteasy-cdi-3.0.6.Final.jar:]
   at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:153) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:94) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   at com.test.utility.JacksonMapper$Proxy$_$$_WeldClientProxy.isWriteable(Unknown Source) [classes:]
   at org.jboss.resteasy.spi.ResteasyProviderFactory.resolveMessageBodyWriter(ResteasyProviderFactory.java:2118) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.spi.ResteasyProviderFactory.getMessageBodyWriter(ResteasyProviderFactory.java:2096) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:62) [resteasy-jaxrs-3.0.6.Final.jar:]
   at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:427) [resteasy-jaxrs-3.0.6.Final.jar:]
   ... 30 more
Caused by: java.lang.reflect.InvocationTargetException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_04]
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_04]
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_04]
   at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_04]
   at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:89) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
   ... 43 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:111) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:98) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule.setupModule(JaxbAnnotationModule.java:57) [jackson-module-jaxb-annotations-2.2.3.jar:]
   at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:524) [jackson-databind-2.2.3.jar:]
   at com.test.utility.JacksonMapper.init(JacksonMapper.java:29) [classes:]
   ... 48 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlElement from [Module "com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider:main" from local module loader @722b302 (finder: local module finder @77164bf6 (roots: C:\jboss\wildfly-8.0.0.CR1\modules,C:\jboss\wildfly-8.0.0.CR1\modules\system\layers\base))]
   at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:443) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:431) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:373) [jboss-modules.jar:1.3.0.Final]
   at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-modules.jar:1.3.0.Final]
   ... 53 more


推荐答案

OP发布了他的解决方案:

OP posted his solution:

事实证明模块描述需要手动更新,如上所述< a href =https://community.jboss.org/message/844042\"rel =nofollow>这里即使该类应该被引用。

It turns out that the the module description hast to be updated manually as described here even though the class should have been referenced.

解决方案:
更新文件: wildfly-8.0.0.CR1 \modules\system\layers\base \ com\fasterxml \ jackson\jaxrs\jackson-JAXRS-JSON-provider\main \ module.xml

<module xmlns="urn:jboss:module:1.1" name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider">
     <resources>
        <resource-root path="jackson-jaxrs-json-provider-2.2.3.jar"/>
        <resource-root path="jackson-jaxrs-base-2.2.3.jar"/>
        <resource-root path="jackson-module-jaxb-annotations-2.2.3.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.ws.rs.api"/>
        <!-- Add this line -->
        <module name="javax.xml.bind.api" />

        <module name="com.fasterxml.jackson.core.jackson-annotations"/>
        <module name="com.fasterxml.jackson.core.jackson-core"/>
        <module name="com.fasterxml.jackson.core.jackson-databind"/>
    </dependencies>
</module>

这篇关于在Wildfly上激活JaxbAnnotationModule的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆