6

JBoss 7 EAP が提供する新しいバージョンの Jackson を使用しようとしています。私の問題を解決するために、war デプロイメントに含まれるjboss-deployment-structure.xmlファイルを作成しました。

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <!--<module name="com.fasterxml.jackson.core.jackson-core" slot="main" />-->
            <!--<module name="com.fasterxml.jackson.core.jackson-annotations" slot="main" />-->
            <module name="com.fasterxml.jackson.core.jackson-databind" slot="main" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

しかし、JBoss は提供された依存関係ではなく、提供されたモジュールを使用しているようです。

ローカル モジュール ローダー @134593bf からのモジュール「com.fasterxml.jackson.core.jackson-databind:main」の ModuleClassLoader (ファインダー: ローカル モジュール ファインダー @4bb4de6a (ルート: ...\jboss-eap-7.0\modules,... \jboss-eap-7.0\modules\system\layers\base))

同様の質問JBoss 7 Classloader -- Exclude Module Implementationを見つけましたが、役に立ちませんでした。

私は何を取りこぼしたか?

4

2 に答える 2

17

Jackson でまったく同じ問題に遭遇し、これを使用して EAP 7 で動作するようにしましたjboss-deployment-structure.xml

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="com.fasterxml.jackson.core.jackson-core" />
            <module name="com.fasterxml.jackson.core.jackson-annotations" />
            <module name="com.fasterxml.jackson.core.jackson-databind" />
            <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
            <module name="org.jboss.resteasy.resteasy-jackson2-provider" />
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

他のモジュールがjacksonをそれぞれの依存関係としてリストしている限りmodule.xml、それは単に除外されず、EAPは警告をスローすることさえできません。

編集 2018-02-19: EAP 7.0.0 から 7.1.0 にアップグレードすると、Jackson jar が更新されたため、再び問題が発生しました。

これは、スタック トレースの重要な部分です。

Caused by: javax.ejb.EJBException: WFLYEJB0442: Unexpected Error
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:185)
[...]
    at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161) [wildfly-ee-7.1.0.GA-redhat-11.jar:7.1.0.GA-redhat-11]
    ... 11 more
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    [...]()Lcom/fasterxml/jackson/databind/ObjectMapper; @89: invokevirtual
  Reason:
    Type 'com/fasterxml/jackson/datatype/jdk8/Jdk8Module' (current frame, stack[1]) is not assignable to 'com/fasterxml/jackson/databind/Module'

したがって、それらも除外します。

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="com.fasterxml.jackson.core.jackson-core" />
            <module name="com.fasterxml.jackson.core.jackson-annotations" />
            <module name="com.fasterxml.jackson.core.jackson-databind" />
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" />
            <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
            <module name="org.jboss.resteasy.resteasy-jackson2-provider" />
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
于 2017-02-25T21:27:28.967 に答える