`
tobato
  • 浏览: 102017 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

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做出调整:
<?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 楼 上官车月 2012-04-17  
我才被weblogic折腾完,

相关推荐

    CXF support WAS Weblogic

    Apache CXF提供了强大的支持以实现在多种应用服务器上的部署,包括WebSphere Application Server、WebLogic Server和JBoss Application Server等。针对不同的应用服务器环境,CXF提供了详细的配置指导和最佳实践。...

    CXF项目部署weblogic9.2终极解决方案

    解决这些问题需要深入理解CXF的内部机制和WebLogic的部署模型。因此,阅读官方文档、社区论坛和博客(如提供的博文链接)是获取帮助的重要途径。 总之,将CXF项目部署到WebLogic 9.2需要综合运用Java EE、Web服务和...

    apache-cxf-3.1.10.zip

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...

    websphere下部署CXF项目jar包冲突问题解决方式

    "websphere下部署CXF项目jar包冲突问题解决方式"这一主题聚焦于如何在IBM Websphere Application Server (WAS)中成功部署包含Apache CXF Web服务的WAR包,解决由于类加载导致的运行异常。 Apache CXF是一个流行的...

    cxf 开发web services apache 官方文档

    根据提供的文件信息,我们可以深入探讨 CXF 在开发 Web Services 方面的应用及其实现细节。以下是对标题、描述、标签以及部分内容中的关键知识点进行的详细解释。 ### 一、CXF 概述 #### 标题:“cxf 开发web ...

    apache-cxf-3.1.6.rar

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...

    Weblogic92+CXF+XDoclet+Spring轻松搞定webservice 例子

    WebLogic Server 9.2 是Oracle公司的一款企业级Java应用服务器,它提供了完整的Java EE(J2EE)平台支持,包括Servlet、JSP、EJB等技术,用于开发、部署和管理分布式Web应用程序。在本例中,Weblogic92作为服务端...

    基于CXF实现WebService开发.pdf

    Apache CXF还支持与多种Java EE应用服务器的集成,例如WebSphere、JBoss、WebLogic和Tomcat等,这意味着开发的服务可以轻松部署到不同的应用服务器环境。 服务集成总线(ESB)概念在文档中被提及,它是一种实现服务...

    WebService_CXF范例.

    部署方面,CXF非常灵活,可以轻松部署到轻量级容器(如Tomcat)或JBI容器(如ServiceMix),也能集成到J2EE应用服务器(如Geronimo、JOnAS、JBoss、WebLogic和WebSphere)。此外,CXF的Java客户端和服务端具有很好的...

    JacORB官方2.3以下所有版本(附带全部源码)

    这个文档可能是关于在特定环境下使用 CXF 遇到的问题及其解决方案的记录,对于在 WebLogic 上部署和管理 CXF 应用程序的开发者来说,具有参考价值。 ** 文件结构与内容** 压缩包中的文件名表明,除了 JacORB 的不同...

    WebService_CXF学习

    - J2EE 集成:可以将服务部署到 J2EE 应用服务器(如 Geronimo, JOnAS, JBoss, WebLogic, WebSphere)中。 - Java 客户端/服务端独立性:支持 Java 客户端和服务端的独立开发和部署。 5. **支持多种编程语言**: ...

    CXF文档介绍

    其灵活性体现在可以部署在轻量级容器(如Tomcat)或Spring容器中,也可集成到JBI容器(如ServiceMix)、SCA容器(如Tuscany)或J2EE应用服务器(如Geronimo、JOnAS、JBoss、WebSphere、WebLogic和Jetty/Tomcat)。...

    通过CXF构建和发布webservice工程

    它具有高度的灵活性,可以在多种应用服务器上部署,包括Tomcat、JBoss、Jetty以及WebLogic。 在开始使用CXF之前,你需要从官方网站下载并解压Apache CXF的最新版本。解压缩后,你会看到一个bin目录,其中包含了一些...

    WebService-CXF学习.doc

    Apache CXF 是一个流行的开源框架,用于构建和部署 Web 服务。它源于 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司赞助和支持,专注于 SOAP 堆栈和企业级服务总线。Apache CXF 提供了一...

    CXF框架开发WebService概述及代码

    CXF框架的部署十分灵活,既可在轻量级容器如Tomcat或Spring支持的容器中运行,也可整合到JBI容器如ServiceMix、OpenESB或Petals中,甚至在J2EE应用服务器上部署,如Geronimo、JOnAS、JBoss、WebLogic及WebSphere。...

    使用 CXF 做 webservice 简单例子 - 烽火编程 - 博客园

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...

    cxf做webservice接口

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的...

    WebService CXF学习-入门篇.pdf

    3. **部署灵活性**:可在轻量级容器如Tomcat、Spring,JBI容器如ServiceMix,或J2EE应用服务器如Geronimo、JBoss、WebLogic、WebSphere上部署。 4. **多语言支持**:不仅限于Java,还支持JavaScript、E4X、CORBA等。...

Global site tag (gtag.js) - Google Analytics