CXF JAX-RS应用程序我使用jackson将POJO编组为JSON。这在大多数情况下都有效,但有一天它在编组深层嵌套对象时失败了NPE。
经过一番调查后,我发现杰克逊被包括在Glassfish 3中(通过泽西岛),在删除jackson-core-asl.jar, jackson-jaxrs.jar, jackson-mapper-asl.jar
和jackson-xc.jar
之后,一切都运作良好。我想杰克逊1.7.1(包含在GF3中)有一些错误已在我的应用程序随附的版本中修复(1.8)。
现在的问题是,为什么我首先要做到这一点?我原本认为我的war文件中包含的库应该优先于Glassfish的/modules
目录中的任何库。
除了从应用服务器中删除jar之外,还有更简洁的方法吗?也许还有其他应用依赖于这些罐子......
在旁注中,我们的GF2容器仍存在问题,但我在/lib
文件夹中找不到任何jackson库(GF3中没有/modules
文件夹)。杰克逊可能藏在GF2中的任何线索(如果有的话)?
答案 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)