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


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

    作者:bingjava

    版权声明:本文为博主原创文章,转载请说明出处:http://www.cnblogs.com/bingjava/p/5254302.html

     

     

    今天业务部门的开发同事在客户现场部署系统时,出现了saaj类加载问题,本楼主经过一番java代码的翻阅,最终问题得到解决,在此进行记录。

      故障情况说明

    系统简称

    基于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.MessageFactorycom.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

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

  • 相关阅读:
    Python爬虫进阶五之多线程的用法
    Python爬虫进阶四之PySpider的用法
    Python爬虫进阶三之Scrapy框架安装配置
    Python爬虫进阶二之PySpider框架安装配置
    Python爬虫进阶一之爬虫框架概述
    Python爬虫利器六之PyQuery的用法
    Python爬虫利器五之Selenium的用法
    Python爬虫利器四之PhantomJS的用法
    Python爬虫利器三之Xpath语法与lxml库的用法
    Python爬虫利器二之Beautiful Soup的用法
  • 原文地址:https://www.cnblogs.com/bingjava/p/5254302.html
Copyright © 2020-2023  润新知