我遇到了很多问题,因为有不同的SAAJ包和SOAP类:
com/sun/xml/internal/messaging/saaj/soap/
saaj-impl.jar中的com/sun/xml/messaging/saaj/soap/
当WebLogic使用来自com/sun/xml/internal/messaging/saaj/soap/
的类并且使用com/sun/xml/messaging/saaj/soap/
中的类创建应用程序时,它会在部署应用程序时抛出类似的异常:
com.sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings
或
java.lang.NoClassDefFoundError: com/sun/xml/internal/messaging/saaj/soap/SAAJMetaFactoryImpl
我的解决方案是创建一个带有saaj引用的weblogic.xml描述符,并在战争中包含saaj-impl.jar。 问题是:我能否知道WebLogic Server中使用了哪些SAAJ包?
答案 0 :(得分:0)
如果您使用weblogic 10.3.3(或者我认为甚至是任何其他版本),则由于Web服务器首先将CLASSPATH初始化为JDK jars
,因此安装的JDK运行时使用的SAAJ实现。所以你需要用你的jar文件覆盖它,这样它才能找到你想要的实现。
weblogic对我有用的唯一解决方案是在weblogic PRE_CLASSPATH
文件中设置setDomainEnv.cmd
,就像这样,
set PRE_CLASSPATH=%DOMAIN_HOME%\lib\endorsed\saaj-impl-1.3.18.jar
其中DOMAIN_HOME
表示Weblogic域,但它也可以是指向jar的任何其他绝对路径。关于这个问题的一点也被描述为Here