2015-10-15 58 views
0

A.war - >是使用的版本1.2.6.RELEASE(內部使用彈簧4.1.7發佈,傑克遜2.4.6)簡單的彈簧啓動REST應用春天開機傑克遜自動配置鏈接錯誤wildfly

B. jar - >是一個wildfly9共享模塊(存儲在wildfly/modules中),它使用包含spring框架的maven陰影插件(沒有spring引導意思,使用舊的添加spring項目依賴關係的方法)以及與上面相同版本的jackson類打包。 (它的陰影,因爲非彈簧和非容器項目可以添加此jar在他們的類路徑和使用它 - 它的工作原理)

A.war具有maven dependency scope <provided> on B.jar和jboss-deployment-structure.xml與<dependencies> <module name = "B"> </dependencies> A.war部署失敗,出現以下錯誤。

注意:當我刪除B.jar jboss依賴關係時,A.war部署得非常好。所以添加B.jar導致這個問題。如果我不使用A.war中的spring引導(也就是說,如果我直接使用簡單的spring webmvc和上下文依賴關係),A.war也可以完美部署

任何人都可以解釋我下面的錯誤說,我如何調查更多?

據我對wildlfy類加載的理解,A.war和B.jar應該加載到不同的模塊類加載器中,A.war是否抱怨B.jar的傑克遜類在錯誤中出現?

Caused by: java.lang.LinkageError: loader constraint violation: when resolving method 
"org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.modulesToInstall([Lcom/fasterxml/jackson/databind/Module;)Lorg/springframework/http/converter/json/Jackson2ObjectMapperBuilder;" 
the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, 
org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration, 
and the class loader (instance of org/jboss/modules/ModuleClassLoader) for resolved class, 
org/springframework/http/converter/json/Jackson2ObjectMapperBuilder, 
have different Class objects for the type der used in the signature 
at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration.configureModules(JacksonAutoConfiguration.java:259) 
at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration.jacksonObjectMapperBuilder(JacksonAutoConfiguration.java:186) 
at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration$$EnhancerBySpringCGLIB$$b993caa0.CGLIB$jacksonObjectMapperBuilder$1() 
at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration$$EnhancerBySpringCGLIB$$b993caa0$$FastClassBySpringCGLIB$$5262bf2.invoke() 
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318) 
at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration$$EnhancerBySpringCGLIB$$b993caa0.jacksonObjectMapperBuilder() 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ... 108 more 

回答

1

調查更多信息JBoss類加載行爲後,裏面B.jar傑克遜類與JBoss的restesay模塊相同傑克遜類衝突。 所以在將它們排除在jboss-deployment-structure.xml中之後,如下所示,此問題已修復。

<exclusions> 
    <module name="org.jboss.resteasy.resteasy-jackson-provider"/> 
    <module name="org.jboss.resteasy.resteasy-jackson2-provider"/> 
</exclusions>