2017-09-22 2 views
1

JBoss EAP 환경에서 jackson-databind를 사용할 때 문제가 발생합니다. 우리는 일반적으로 완벽하게 작동하는 Tomcat 8에 배포합니다. mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);는 우리가이 오류가 나타납니다 실행됩니다 : 잭슨이 자기 그러나 때, 일반적으로 객체 직렬화 복원JBoss EAP 7의 Jackson Dependencies 누락

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

내가 오류를 꽤 의역을하지만 보스는 잭슨 - 데이터 바인딩 종속성을 찾을 수없는 것 같다. 클래스가 실제로 배포 된 WAR 파일에 있는지 확인했습니다. 우리는 우리의 코드베이스에 자바 클래스를 복사 할 때

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

, 그것은 JBoss에서 완벽하게 작동하지만 분명 좋지 않은 : 이것은 우리가 우리의 POM에있는 것입니다. JBoss가 전에 의존성을 찾지 못했던 사람이 있습니까?

+0

우리는 여기서 작업 솔루션을 찾았습니다. https://stackoverflow.com/questions/37060294/wildfly-9-how-do-i-exclude-jackson – skylerl

답변

0

Jackson databind가 이미 JBoss 모듈로 존재하므로, 앱 배포 중에 lib 로딩과 충돌하여 예외가 발생합니다.
보다 정확하게, Jackson databind는 버전 2.5.4에서 jboss-eap-7.0\modules\system\layers\base\com\fasterxml\jackson\core\jackson-databind\main\에 있습니다. 따라서 당신은 의존성을 <scope>provided</scope>으로 설정해야합니다.
그러나 요청한 2.5.4와 2.8.9 사이에는 몇 가지 변경 사항이 있습니다. Jackson의 기능을 어떤 용도로 사용할지 언급하지는 않지만 적어도 이전 버전에는없는 SNAKE_CASE을 사용할 수 없습니다. 한 가지 옵션은 이전 변형 CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES으로 폴백 할 수 있다는 것입니다. 허용되지 않는 경우 jboss-deployment-structure.xml을 사용하여 JBoss 클래스 로딩을 사용자 정의해야합니다. 이 디스크립터를 사용하면 JBoss 모듈에서 제공하는 jackson 데이터 바인딩을 제외하도록 선택할 수 있습니다. 그런 다음 배포와 함께 jackson lib를 묶을 수 있습니다. JBoss/Wildfly 위키에서 더 많은 정보를 찾을 수 있습니다.