2015-10-15 4 views
0

A.war -> est un simple démarrage de l'application printemps REST en utilisant la version 1.2.6.RELEASE (en interne en utilisant ressort 4.1.7 RELEASE, jackson 2.4.6)démarrage Spring erreur de couplage de configuration automatique jackson wildfly

B. jar -> Est un module partagé wildfly9 (stocké dans wildfly/modules) qui est empaqueté en utilisant maven shaded plugin contenant un framework à ressort (sans ressort de démarrage en utilisant l'ancienne méthode d'ajout de dépendances) et des classes jackson de la même version. (Il est ombragé parce que les projets non-spring et non-container peuvent simplement ajouter ce jar dans leur chemin-classe et l'utiliser - ça marche)

A.war a la dépendance maven scope <provided> on B.jar et a jboss-deployment-structure.xml avec <dependencies> <module name = "B"> </dependencies> Le déploiement A.war échoue avec l'erreur ci-dessous.

Remarque: A.war se déploie parfaitement bien lorsque je supprime la dépendance B.jar jboss. L'ajout de B.jar est à l'origine de ce problème. Et si je n'utilise pas le démarrage de printemps dans A.war (signifiant si j'utilise directement le webmvc et les dépendances de contexte simples) avec la dépendance de B.jar jboss, A.war déploie aussi parfaitement

Quelqu'un peut-il m'expliquer ce que le erreur ci-dessous dit et comment puis-je enquêter plus? En ce qui concerne ma compréhension de la gestion de classes wildlfy, A.war et B.jar doivent être chargés dans différents chargeurs de classes de modules. Est-ce que A.war se plaint ici des classes jackson de B.jar dans l'erreur?

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 

Répondre

1

Après avoir enquêté sur le comportement de classloading plus jboss, les classes à l'intérieur jackson B.jar sont en conflit avec les mêmes cours jackson de modules jboss de restesay. donc après les avoir exclues dans jboss-deployment-structure.xml, comme ci-dessous ce problème est corrigé ..

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