Apache CXF应用向Weblogic部署问题解决记录
问题环境:
Apache CXF 2.0.3
Weblogic 9.2
开发测试环境:
tomcat5.5
tomcat6
在开发测试环境下一切正常,发布到weblogic9.2以后就出现了N多问题,花费了不少时间,所以必须记录一下。
第一个问题 weblogic.application.ModuleException: Unmarshaller failed
com.bea.xml.XmlException: failed to load java type corresponding to e=web-app@http://java.sun.com/xml/ns/javaee
问题处置:这是一个简单的问题,开发时候选择的J2EE版本是1.5,但是weblogic9支持的J2EE版本是1.4,因此对WEB-INFO下的web.xml做出调整:
修改为
第二个问题 警告: Can't find the request for http://127.0.0.1:7001/xxxService's Observer
问题处置: 发现cxf的服务没有被自动发布,怀疑是spring配置文件没有加载问题,后来确认果然是Weblogic下不支持spring配置文件的通配符配置
想要让weblogic用我们自己的class,结果仍旧是Unable to access unsupported property javax.xml.stream.supportDTD
c.在WEB-INF下增加weblogic.xml
让weblogic使用应用程序内部的jar包发布应用,结果得到了java.lang.LinkageError: loader constraints violated when linking javax/xml/namespace/QName class
分析原因,应该是lib当中的jar包与weblogic之前加载的jar包冲突了,weblogic内部就有几个文件包含QName。 使用classfind工具查找lib当中包含QName的jar包,将QName.class去掉
至此,问题均被排除,应用程序发布正常。删除QName包这是不得已而为之,这样对版本管理不太好,但是面对weblogic,这是没有办法的办法。
之后将CXF升级到最新的版本2.5.2,又发生了一些有趣的故事。
java class finder工具http://www.idesksoft.com/classfinder.html 1 楼 上官车月 2012-04-17 我才被weblogic折腾完,