问题环境:
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
分享到:
相关推荐
Apache CXF提供了强大的支持以实现在多种应用服务器上的部署,包括WebSphere Application Server、WebLogic Server和JBoss Application Server等。针对不同的应用服务器环境,CXF提供了详细的配置指导和最佳实践。...
解决这些问题需要深入理解CXF的内部机制和WebLogic的部署模型。因此,阅读官方文档、社区论坛和博客(如提供的博文链接)是获取帮助的重要途径。 总之,将CXF项目部署到WebLogic 9.2需要综合运用Java EE、Web服务和...
"websphere下部署CXF项目jar包冲突问题解决方式"这一主题聚焦于如何在IBM Websphere Application Server (WAS)中成功部署包含Apache CXF Web服务的WAR包,解决由于类加载导致的运行异常。 Apache CXF是一个流行的...
根据提供的文件信息,我们可以深入探讨 CXF 在开发 Web Services 方面的应用及其实现细节。以下是对标题、描述、标签以及部分内容中的关键知识点进行的详细解释。 ### 一、CXF 概述 #### 标题:“cxf 开发web ...
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...
WebLogic Server 9.2 是Oracle公司的一款企业级Java应用服务器,它提供了完整的Java EE(J2EE)平台支持,包括Servlet、JSP、EJB等技术,用于开发、部署和管理分布式Web应用程序。在本例中,Weblogic92作为服务端...
Apache CXF还支持与多种Java EE应用服务器的集成,例如WebSphere、JBoss、WebLogic和Tomcat等,这意味着开发的服务可以轻松部署到不同的应用服务器环境。 服务集成总线(ESB)概念在文档中被提及,它是一种实现服务...
部署方面,CXF非常灵活,可以轻松部署到轻量级容器(如Tomcat)或JBI容器(如ServiceMix),也能集成到J2EE应用服务器(如Geronimo、JOnAS、JBoss、WebLogic和WebSphere)。此外,CXF的Java客户端和服务端具有很好的...
这个文档可能是关于在特定环境下使用 CXF 遇到的问题及其解决方案的记录,对于在 WebLogic 上部署和管理 CXF 应用程序的开发者来说,具有参考价值。 ** 文件结构与内容** 压缩包中的文件名表明,除了 JacORB 的不同...
其灵活性体现在可以部署在轻量级容器(如Tomcat)或Spring容器中,也可集成到JBI容器(如ServiceMix)、SCA容器(如Tuscany)或J2EE应用服务器(如Geronimo、JOnAS、JBoss、WebSphere、WebLogic和Jetty/Tomcat)。...
它具有高度的灵活性,可以在多种应用服务器上部署,包括Tomcat、JBoss、Jetty以及WebLogic。 在开始使用CXF之前,你需要从官方网站下载并解压Apache CXF的最新版本。解压缩后,你会看到一个bin目录,其中包含了一些...
Apache CXF 是一个流行的开源框架,用于构建和部署 Web 服务。它源于 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司赞助和支持,专注于 SOAP 堆栈和企业级服务总线。Apache CXF 提供了一...
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...
Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...
3. **部署灵活性**:可在轻量级容器如Tomcat、Spring,JBI容器如ServiceMix,或J2EE应用服务器如Geronimo、JBoss、WebLogic、WebSphere上部署。 4. **多语言支持**:不仅限于Java,还支持JavaScript、E4X、CORBA等。...