1

我做了一个看起来像这样的小项目

游戏老板.ear
    库
        commonlib.jar
            JsonDeserializer.class
        测试库.jar
            JsonMessage.class
            版本.class
        杰克逊-1.9.4.jar
    playboss_ejb.jar
        MessageTimer.class

JsonMessage 有一个成员:*private Class msgVersion = Version.V0.class;
MessageTimer 只是一个带有超时的 Bean,它什么都不做,只是使用 JsonDeserializer 反序列化 JsonMessage 的示例字符串。一切正常,即字符串被转换为 JsonMessage!

现在,我向我的项目添加了一个依赖项,其中包含一个 JAX-RS API 和模型对象,以便扩展 lib。

    库
        SomeAPI.jar
        javax.ws.rs-api-2.0.jar

现在,当我启动 JBoss EAP 6.4 时,我得到以下异常:

引起:java.lang.ClassNotFoundException: playground.testlib.Version$V0 from [Module "org.codehaus.jackson.jackson-mapper-asl:main" from local module loader @9e89d68
  在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.7.Final-redhat-1]
  在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.7.Final-redhat-1]
  在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.7.Final-redhat-1]
  在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.7.Final-redhat-1]
  在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.7.Final-redhat-1]
  在 java.lang.Class.forName0(本机方法)[rt.jar:1.8.0_66]
  在 java.lang.Class.forName(Class.java:264) [rt.jar:1.8.0_66]
  在 org.codehaus.jackson.map.deser.std.ClassDeserializer.deserialize(ClassDeserializer.java:42) [jackson-mapper-asl-1.9.9.redhat-4.jar:1.9.9.redhat-4]

我认为由于https://docs.jboss.org/author/display/AS7/Implicit+module+dependencies+for+deployments触发了 jax-rs 模块依赖并从模块加载了 jackson。

我的问题:
1)什么是让我的反序列化再次工作的推荐/最佳方法
2)如果模块类加载器显然看不到我的模型类,我想了解如何使用 jax-rs 完成对象映射。

4

0 回答 0