我正在开发一个 Web 应用程序,它是一个基本上充当 Web 服务前端的 servlet,我使用 CXF 作为 Web 服务客户端,该应用程序在 WebLogic 9.10 服务器上运行,一切正常,直到项目所有者决定添加 ssl 支持,没什么大问题,因为我使用 cxf whitout spring,我设法在服务客户端的 http 管道中配置了 TLS 参数,还配置了一个密钥库,包括服务器密钥、ca 根证书和客户端证书,在开发tomcat实例下测试并且工作正常。
当再次将应用程序重新部署到 weblogic 服务器并开始出现奇怪的错误时,问题就开始了,第一个是:
java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy
at org.apache.cxf.frontend.ClientProxy.getClient
然后我意识到 weblogic 正在加载它自己的 JAX-WS 实现,没有问题,只是添加了一个 weblogic.xml,将“prefer-web-inf-classes”设置为 true,重新部署,现在我得到了这个异常:
java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.ws.Service.<init>(Ljava/net/URL;Ljavax/xml/namespace/QName;)V" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, com/adinfi/imgsvc/cm/service/CMBGenericWebServiceService, and the class loader (instance of <bootloader>) for resolved class, javax/xml/ws/Service, have different Class objects for the type javax/xml/namespace/QName used in the signature
那个让我着迷,我认为类路径有问题,所以我开始从应用程序中删除 jar,但仍然遇到更多链接错误,我得到的最后一个是:
java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/UserDataHandler"
这就是我的应用程序的“Web-Inf/lib/”目录现在的样子:
classes12.jar
classes12.zip
common.jar
common.resources.jar
commons-beanutils-1.8.0.jar
commons-discovery.jar
commons-logging-1.1.1.jar
commons-logging-api.jar
commons-logging-api-1.1.1.jar
cxf-2.2.5.jar
log4j-1.2.8.jar
ras.jar
runtimefw.jar
wsdl4j-1.6.2.jar
wss4j-1.5.8.jar
xalan-2.7.1.jar
xml-resolver-1.2.jar
XmlSchema-1.4.5.jar
xmlsec-1.4.3.jar
知道我做错了什么吗?提前致谢