我如何处理Glassfish包含与应用程序提供的库崩溃的库?

时间:2011-07-20 09:20:08

标签: jackson glassfish jax-rs cxf

CXF JAX-RS应用程序我使用jackson将POJO编组为JSON。这在大多数情况下都有效,但有一天它在编组深层嵌套对象时失败了NPE。

经过一番调查后,我发现杰克逊被包括在Glassfish 3中(通过泽西岛),在删除jackson-core-asl.jar, jackson-jaxrs.jar, jackson-mapper-asl.jarjackson-xc.jar之后,一切都运作良好。我想杰克逊1.7.1(包含在GF3中)有一些错误已在我的应用程序随附的版本中修复(1.8)。

现在的问题是,为什么我首先要做到这一点?我原本认为我的war文件中包含的库应该优先于Glassfish的/modules目录中的任何库。

除了从应用服务器中删除jar之外,还有更简洁的方法吗?也许还有其他应用依赖于这些罐子......

在旁注中,我们的GF2容器仍存在问题,但我在/lib文件夹中找不到任何jackson库(GF3中没有/modules文件夹)。杰克逊可能藏在GF2中的任何线索(如果有的话)?

3 个答案:

答案 0 :(得分:7)

告诉Webapp类加载器更喜欢WAR提供的JAR。

添加WEB-INF / sun-web.xml(或WEB-INF / glassfish-web.xml):

...
<class-loader delegate="false"/>
...

请参阅http://jersey.java.net/nonav/documentation/latest/glassfish.html#d4e1927

答案 1 :(得分:1)

考虑使用:     asadmin deploy --libraries ...

参考:http://blogs.oracle.com/alexismp/entry/more_with_deploy_libraries

答案 2 :(得分:0)

泽西和Hadoop包括杰克逊,如果你可能正在运行泽西岛或与Hadoop系统互动;包含的版本通常都很旧。所以这可能是“古代杰克逊”问题的一个来源。