2017-09-22 7 views
1

Nous rencontrons un problème lors de l'utilisation de jackson-databind dans un environnement JBoss EAP. Nous déployons généralement sur Tomcat 8, qui fonctionne parfaitement. Jackson elle-même désérialise objets normalement, mais quand: mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); est exécuté, nous recevons cette erreur:Dépendances Jackson manquantes dans JBoss EAP 7

13:18:26,170 ERROR java.lang.NoSuchFieldError: SNAKE_CASE 

Je paraphrasé l'erreur tout à fait un peu, mais il semble que JBoss ne peut pas trouver la dépendance jackson-DataBind. Nous avons vérifié que la classe est bien dans le fichier WAR déployé. Voici ce que nous avons dans notre POM:

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.9</version> 
    </dependency> 

Lorsque nous copions la classe Java dans notre base de code, il fonctionne parfaitement sur JBoss mais qui est évidemment pas idéal. Quelqu'un at-il vu JBoss ne pas trouver une dépendance avant?

+0

Nous avons fini par trouver une solution de travail ici: https://stackoverflow.com/questions/37060294/wildfly-9-how-do-i-exclude-jackson – skylerl

Répondre

0

Le connecteur de données Jackson est déjà présent en tant que module JBoss, par conséquent votre exception est le résultat d'un chargement de lib conflictuel lors du déploiement de votre application.
Pour être plus précis, le databind Jackson se trouve à jboss-eap-7.0\modules\system\layers\base\com\fasterxml\jackson\core\jackson-databind\main\ à la version 2.5.4. Par conséquent, vous devez définir la dépendance maven à <scope>provided</scope>.
Cependant, il y a plusieurs changements entre 2.5.4 et 2.8.9 que vous avez demandés. Vous ne mentionnez pas quelles fonctionnalités de Jackson avez-vous l'intention d'utiliser, mais à tout le moins, vous ne pouvez pas utiliser SNAKE_CASE car il n'existe pas encore dans l'ancienne version. Une option est que vous pouvez revenir à l'ancienne variante CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES. Si cela n'est pas acceptable, vous devrez personnaliser le chargement de la classe JBoss en utilisant jboss-deployment-structure.xml. Avec ce descripteur, vous pouvez choisir d'exclure le connecteur de données jackson fourni par les modules JBoss, puis vous pouvez regrouper la bibliothèque jackson avec votre déploiement. Vous pouvez trouver plus d'informations dans le wiki JBoss/Wildfly.