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.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

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

websphere OSGi应用环境下服务调用saaj包加载问题分析报告的更多相关文章

  1. webpack4下import()模块按需加载,打包按需切割模块,减少包体积,加快首页请求速度

    一:背景 因为项目功能越加越多,打包后的体积越来越大,导致首页展示的时候速度比较慢,因为要等压缩的js的包加载完毕. 首页展示的时候只需要对应的js,并不需要全部的js模块,所以这里就可以用按需加载, ...

  2. 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载

    title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...

  3. JS+CSS实现的下拉刷新/上拉加载插件

    闲来无事,写了一个当下比较常见的下拉刷新/上拉加载的jquery插件,代码记录在这里,有兴趣将代码写成插件与npm包可以留言. 体验地址:http://owenliang.github.io/pull ...

  4. MaterialRefreshLayout+ListView 下拉刷新 上拉加载

    效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...

  5. listview下拉刷新和上拉加载更多的多种实现方案

    listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局        android系统为listview提供了addfootview ...

  6. Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理

    RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...

  7. jQuery 滚动条 滚动到底部(下拉到底部) 加载数据(触发事件、处理逻辑)、分页加载数据

    1.针对浏览器整个窗口滚动 主要代码: <script type="text/javascript"> ; function GetProductListPageFun ...

  8. android ListView下拉刷新 上拉加载更多

    背景 最近在公司的项目中要使用到ListView的下拉刷新和上拉加载更多(貌似现在是个项目就有这个功能!哈哈),其实这个东西GitHub上很多,但是我感觉那些框架太大,而且我这个项目只用到了ListV ...

  9. 包加载失败 未能正确加载包“xxx”...

    打开vs2008或者2005如果弹出一个警告对话框 包加载失败 未能正确加载包“xxx” ...... 的字样,就可以用以下方法解决. 在cmd下运行带参数的devenv.exe: "d(盘 ...

随机推荐

  1. leetcode3:不重复的最长子串长度

    package hashmap; import java.util.HashMap; import java.util.Map; public class hashmap { public stati ...

  2. 在HTML文件中加载js

    js加载只分为两种: 1.全局js,放在<head>标签里面,整个页面很多都用到的,它是优先加载的. 2.局部js,放在</html>结束标签以内的任何位置,它是第二加载的.

  3. js浏览器各种位置检测

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. php如何实现页面回退的两种方法

    发布:thatboy   来源:网络  [大 中 小] 你有没有遇到过这样的情况:表单出错而返回页面时,之前填写的信息全不见了.本文为大家介绍二种支持php页面回退的方法,供大家参考. 本文原始链接: ...

  5. php手册学习

    整型:int   转换为整型:intval(str)  32位最大值64位最大值 不存在整除语法:应用round();四舍五入.integer去除小数. $a = 1234; //十进制数 $a = ...

  6. SQL Server 基础:Join用法

    Join(麻蛋  废话不多说 有图有真相) 测试数据脚本 CREATE TABLE Atable ( S# INT, Sname ), Sage INT, Sfrom ) ) insert into ...

  7. 关于js中this的疑问

    学习bootstrap.js源码中被js里边的this绕的有点晕 /* ================================================================ ...

  8. C# 查询Windows Service 信息 ,所在目录 启动状态

    1.WMI简介WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比 ...

  9. 17.python自定义函数

    什么是函数,函数说白了就是将一系列代码封装起来,实现代码的重用. 什么是代码重用? 假设我有这样的需求: 但是我还是觉得太麻烦了,每次想吃饭的时候都要重复这样的步骤.此时,我希望有这样的机器:

  10. Web Design:欧美人形剪影的404界面

    项目需求,必须得写个404界面,比较愁,因为网站属于那种电商+艺术品拍卖的网站,404界面不太好设计 很多时候网站直接代码报错输出404,不过设计过的404也有好处,比如改进用户体验.增强互动性之类的 ...