1

私はこのような小さなプロジェクトを作りました

playboss.ear
    ライブラリ
        commonlib.jar
            JsonDeserializer.class
        testlib.jar
            JsonMessage.class
            バージョン.クラス
        jackson-1.9.4.jar
    playboss_ejb.jar
        MessageTimer.class

JsonMessage には次のメンバーがあります。 *private Class msgVersion = Version.V0.class;
MessageTimer は、JsonDeserializer を使用して JsonMessage のサンプル String を逆シリアル化するだけのタイムアウト付きの Bean です。すべて正常に動作します。つまり、文字列は JsonMessage に変換されます!

ここで、lib が拡張されるように、JAX-RS API とモデル オブジェクトを含むプロジェクトに依存関係を追加します。

    ライブラリ
        SomeAPI.jar
        javax.ws.rs-api-2.0.jar

JBoss EAP 6.4 を起動すると、次の例外が発生します。

原因: java.lang.ClassNotFoundException: ローカル モジュール ローダー @9e89d68 の [Module "org.codehaus.jackson.jackson-mapper-asl:main" からのground.testlib.Version$V0
  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