2016-08-02 51 views
0

我正嘗試使用JBoss 7 EAP提供的更新版本的Jackson。爲了解決我的問題,我創建了一個包含在我的戰爭部署中的jboss-deployment-structure.xml文件。從JBoss 7中排除提供的傑克遜版本EAP

<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使用交付的模塊,而不是提供的依賴項。

ModuleClassLoader的模塊 「com.fasterxml.jackson.core.jackson-數據綁定:主」 從本地模塊 裝載機@ 134593bf(取景器:本地模塊取景器@ 4bb4de6a(根: ... \ jboss- EAP-7.0 \模塊,... \ jboss的-EAP-7.0 \模塊\ SYSTEM \層\基地))

我發現了一個類似的問題JBoss 7 Classloader -- Exclude Module Implementation但它並沒有幫助我。

我錯過了什麼?

+0

是部署的耳朵? – ctomc

+0

由於其他傑克遜模塊依賴於該模塊,因此您需要謹慎操作。是否有你需要更新版本的理由? –

+0

我們需要Apache Camel。 – CSchulz

回答

3

我跑進傑克遜的確切同樣的問題,我在我的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> 

它看起來像只要任何其他模塊列表傑克遜自己依賴於它們各自的module.xml,它只是簡單地不被排除,並且EAP不能被放棄甚至對它發出警告。

編輯2018-02-19:從EAP 7.0.0升級到7.1.0時,由於更新的傑克遜瓶子,事情再次爆發。

這是堆棧跟蹤的關鍵部分:

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

它看起來像從JBoss的EAP 7 JAX-RS子模塊使用了傑克遜。只要你跳過此子模塊,你將擺脫的JBoss的傑克遜版本:

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

(只有當你不使用JAXRS ;-)有道理

+0

嗯,我們做。只是我們也明確地使用了傑克遜。 : - / – Antares42