在JBoss EAP 7中缺少Jackson依赖关系

时间:2017-09-22 13:31:17

标签: java json maven jboss jackson

在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之前找不到依赖?

1 个答案:

答案 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中找到更多信息。