axis2 java.lang.linkageerror,WebSphere下LinkageError解决办法

环境:WebSphere 6.l

JRE: WebSphere 6.1 JRE

项目需求:用SUN JDK6自带的JAX-WS创建Web Service。 其中Server端的Web Service接口已发布,我这边的项目直接根据对方提供的WSDL创建Client。

碰到的问题:

当调用javax.xml.ws.Service的构造方法 Service(URL url, QName qName)的时候,报错如下:

[3/14/09 14:51:53:750 CST] 0000002c SystemErr     R Caused by: java.lang.Throwable: java.lang.LinkageError: You are loading old SAAJ from jar:file:/C:/Program%20Files/IBM/SDP70/runtimes/base_v61/lib/j2ee.jar!/javax/xml/soap/MessageFactory.class

at com.sun.xml.ws.api.SOAPVersion.(SOAPVersion.java:184)

at com.sun.xml.ws.api.SOAPVersion.(SOAPVersion.java:83)

at java.lang.J9VMInternals.initializeImpl(Native Method)

at java.lang.J9VMInternals.initialize(J9VMInternals.java:177)

at com.sun.xml.ws.api.BindingID.(BindingID.java:318)

...(以下省略300字)

Caused by: java.lang.Throwable: java.lang.NoSuchMethodError: javax/xml/soap/MessageFactory.newInstance(Ljava/lang/String;)Ljavax/xml/soap/MessageFactory;

at com.sun.xml.ws.api.SOAPVersion.(SOAPVersion.java:178)

... 21 more

也就是说,程序先去读取了WebSphere 6.1的j2ee.jar包里的相关类,而没去读取我们真正要用的两个SAAJ jar包:saaj-api.jar和saaj-impl.jar. 结果就出错了。

IBM上找到的原因及解决办法:

主要就是把Classloader mode从默认的Parent_First改成Parent_Last,让程序先读自己的class文件以及jar包。

我就照样画葫芦设置了。顺便说一下,关联共享库到应用程序,我无论如何都做不成功。关闭Application,进入Application,关联共享库,关联好了,保存成功,退到外面,再进去,共享库又没关联上。设置Classloader mode的时候也遇到了这样的问题,但最终还是迫使其让我保存了。共享库就不管理,反正无所谓,只要加载顺序变了就成。

但事实上,我的担心成为了事实:程序启动失败,虽然起来了,但只跑了一小部分代码,后面的服务都没起来。想想也是,程序那么大,用到的jar包那么多,改了Classloader mode,一切全都乱套了...

之后,查看Console-->TroubleShooting-->Class Loader View,发现系统最开始加载的是WebSphere下的ext目录下的jar包

c69305daefdb44d707a955ea9f886e30.png

所以就投机取巧,把我要用的两个saaj包放到了ext目录下,重启,程序运行成功

当然,这不是一个好的解决办法,阿三那里能不能通得过还是个问题

posted on 2009-03-14 20:26 EvanLiu 阅读(5784) 评论(1)  编辑  收藏 所属分类: Java基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值