随笔 - 37  文章 - 29  trackbacks - 0


常用链接

留言簿(3)

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

环境: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.<init>(SOAPVersion.java:184)
 at com.sun.xml.ws.api.SOAPVersion.<clinit>(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.<clinit>(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.<init>(SOAPVersion.java:178)
 ... 21 more


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

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

如何在WebSphere中解决jar包冲突

 

主要就是把Classloader mode从默认的Parent_First改成Parent_Last,让程序先读自己的class文件以及jar包。
我就照样画葫芦设置了。顺便说一下,关联共享库到应用程序,我无论如何都做不成功。关闭Application,进入Application,关联共享库,关联好了,保存成功,退到外面,再进去,共享库又没关联上。设置Classloader mode的时候也遇到了这样的问题,但最终还是迫使其让我保存了。共享库就不管理,反正无所谓,只要加载顺序变了就成。
但事实上,我的担心成为了事实:程序启动失败,虽然起来了,但只跑了一小部分代码,后面的服务都没起来。想想也是,程序那么大,用到的jar包那么多,改了Classloader mode,一切全都乱套了...

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

所以就投机取巧,把我要用的两个saaj包放到了ext目录下,重启,程序运行成功
当然,这不是一个好的解决办法,阿三那里能不能通得过还是个问题



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

FeedBack:
# re: WebSphere下LinkageError解决办法 2014-07-15 11:26 李勇强
学习中。。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: