从JBoss 7 EAP中排除提供的jackson版本

时间:2016-08-02 15:18:35

标签: jboss war jboss-eap-7

我正在尝试使用JBoss 7 EAP提供的更新版本的Jackson。为了解决我的问题,我创建了一个 jboss-deployment-structure.xml 文件,该文件包含在我的war部署中。

True

但似乎JBoss使用交付的模块而不是提供的依赖。

  

Module的ModuleClassLoader   " com.fasterxml.jackson.core.jackson-数据绑定:主"来自本地模块   loader @ 134593bf(finder:local module finder @ 4bb4de6a(roots:   ... \ JBoss的-EAP-7.0 \模块,... \ JBoss的-EAP-7.0 \模块\ SYSTEM \层\基))

我发现了一个类似的问题JBoss 7 Classloader -- Exclude Module Implementation,但它对我没有帮助。

我错过了什么?

2 个答案:

答案 0 :(得分:8)

我遇到了与杰克逊完全相同的问题,我使用此jboss-deployment-structure.xml让我在EAP 7中工作:

<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>

看起来只要任何其他模块列表杰克逊作为他们在各自module.xml中的依赖关系,它就不会被排除在外,并且EAP不会被诅咒甚至对它发出警告。

编辑2018-02-19:当从EAP 7.0.0升级到7.1.0时,由于更新了Jackson jars,事情再次破裂。

这是stacktrace的关键部分:

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>

答案 1 :(得分:1)

看起来jboss eap 7的jax-rs子模块使用了jackson。一旦你跳过这个子模块,你将摆脱jboss jackson版本:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="jaxrs"/>
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

(只有在你不使用jaxrs时才有意义; - )