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

问题描述 投票:4回答:3

我使用的一个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中的任何线索(如果有的话)?

jackson glassfish jax-rs cxf
3个回答
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
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.