websphere OSGi应用环境下服务调用saaj包加载问题分析报告


1.    故障情况说明

系统简称

基于osgi业务应用系统

故障名称

系统在客户生产环境:websphere7.0,基于osgi的应用系统,外部系统调用本系统提供的webservice服务时发生SOAPMessageFactory类加载异常,导致webservice服务不能被正常调用。

故障功能点

Webservice服务

关键异常

Caused by: java.lang.NoClassDefFoundError: com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl (initialization failure)

            at java.lang.J9VMInternals.initialize(J9VMInternals.java:140) ~[na:1.6.0]

            at java.lang.J9VMInternals.newInstanceImpl(Native Method) ~[na:1.6.0]

            at java.lang.Class.newInstance(Class.java:1345) ~[na:1.6.0]

            at javax.xml.soap.FactoryFinder.newInstance(FactoryFinder.java:70) ~[na:1.6.0]

            at javax.xml.soap.FactoryFinder.find(FactoryFinder.java:109) ~[na:1.6.0]

            at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:119) ~[na:1.6.0]

            at org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.getFactory(SAAJInInterceptor.java:88) ~[cxf-bundle-minimal-2.2.9.jar:2.2.9]

            at org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.handleMessage(SAAJInInterceptor.java:100) ~[cxf-bundle-minimal-2.2.9.jar:2.2.9]

影响范围

本系统提供的webservice功能外部无法调用。

故障发生时间

2016-02-18 16:31:34.608

故障级别

严重

 

1.  分析及解决

在调用服务,cxf处理消息时,会通过此抽象类javax.xml.soap.MessageFactory加载此MessageFactory的实现类,加载逻辑是:

1)      从System.getProperty(“javax.xml.soap.MessageFactory”)获取指定的实现类。

2)          如从第一步未取到则从java_home/lib/ jaxm.properties属性文件中取javax.xml.soap.MessageFactory项的配置。

3)          如以上两步取到,则在当前classloader加载的非系统jar文件中(META-INF/services/javax.xml.soap.MessageFactory)

4)          如以上方式都未取到,则默认加载:com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl类

com.sun.xml.internal.*包是sun jdk提供的一个默认实现,在提供webservice的工程中,需要引用saaj的相关包,并根据中间件环境来加载此类配置文件:

如websphere环境下可采用以下配置:

   websphere_ws.context.properties

javax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

而weblogic环境则:

        weblogic_ws.context.properties

javax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

                  在业务系统初始化、启动时,根据中间件加载以上文件,并读取其配置将其设置到系统属性中:System.setProperty(key,value)

这样处理可以做到多环境的兼容性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值