在JBoss EAP环境中使用jackson-databind时,我们遇到了问题。我们通常部署到Tomcat 8,它可以完美运行。杰克逊通常会自行反序列化对象,但是在以下情况下:
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
已执行,我们收到此错误:
13:18:26,170 ERROR java.lang.NoSuchFieldError: SNAKE_CASE
我对这个错误进行了相当多的解释,但似乎JBoss找不到jackson-databind依赖。我们验证了该类确实位于已部署的WAR文件中。这就是我们在POM中所拥有的:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
当我们将Java类复制到我们的代码库中时,它在JBoss上运行完美,但这显然不太理想。有没有人见过JBoss之前找不到依赖?
答案 0 :(得分:0)
Jackson databind已作为JBoss模块出现,因此您的异常是由于您的应用部署期间的lib加载冲突造成的。
更准确地说,Jackson databind位于jboss-eap-7.0\modules\system\layers\base\com\fasterxml\jackson\core\jackson-databind\main\
版本2.5.4。因此,您应该将maven依赖关系设置为<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 wiki中找到更多信息。