设为首页 收藏本站
查看: 757|回复: 0

[经验分享] Apache CXF应用向Weblogic部署问题解决记录

[复制链接]

尚未签到

发表于 2017-1-11 08:34:57 | 显示全部楼层 |阅读模式
问题环境:
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做出调整:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

修改为

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_4.dtd">
<web-app>


第二个问题 警告: Can't find the request for http://127.0.0.1:7001/xxxService's Observer
问题处置: 发现cxf的服务没有被自动发布,怀疑是spring配置文件没有加载问题,后来确认果然是Weblogic下不支持spring配置文件的通配符配置

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext*.xml</param-value>
</context-param>

修改为

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext-a.xml
classpath*:/applicationContext-b.xml
classpath*:/applicationContext-c.xml
</param-value>
</context-param>


第三个问题 java.lang.IllegalArgumentException: Unable to access unsupported property javax.xml.stream.supportDTD
问题处置:终于碰到了最麻烦的问题,从下面的错误堆栈可看出来weblogic的jar包比CXF的jar包先加载

at weblogic.xml.stax.ConfigurationContextBase.check(ConfigurationContextBase.java:60)
at weblogic.xml.stax.ConfigurationContextBase.setProperty(ConfigurationContextBase.java:54)
at weblogic.xml.stax.XMLStreamInputFactory.setProperty(XMLStreamInputFactory.java:280)
at org.apache.cxf.staxutils.StaxUtils.createXMLInputFactory(StaxUtils.java:169)

a.使用classpath替换大法,将cxf需要的包含XMLInputFactory的jar包放在startWebLogic.cmd里面比如wstx-asl-3.2.8.jar,sjsxp.jar 结果Weblogic起不来了,因为weblogic需要用自己的xml解析器来解析配置文件。
b.使用war包发布程序,在META-INF文件下增加weblogic-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
<application-param>
<param-name>webapp.encoding.default</param-name>
<param-value>UTF-8</param-value>
</application-param>
<prefer-application-packages>
<package-name>com.bea.xml.stream.*</package-name>   
<package-name>javax.jws.*</package-name>
<package-name>javax.xml.bind.*</package-name>
<package-name>javax.xml.crypto.*</package-name>
<package-name>javax.xml.registry.*</package-name>
<package-name>javax.xml.rpc.*</package-name>
<package-name>javax.xml.soap.*</package-name>
<package-name>javax.xml.stream.*</package-name>
<package-name>javax.xml.ws.*</package-name>      
</prefer-application-packages>
</weblogic-application>

想要让weblogic用我们自己的class,结果仍旧是Unable to access unsupported property javax.xml.stream.supportDTD
c.在WEB-INF下增加weblogic.xml

<?xml version='1.0' encoding='UTF-8'?>  
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">  
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

让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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326749-1-1.html 上篇帖子: Apache Spamassassin Milter Plugin Remote Root Command Execution 下篇帖子: Apache+PHP环境下虚拟主机防被旁注
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表