java - CXF + SSL + WebLogic 9.10

标签 java weblogic jax-ws cxf weblogic9.x

我正在开发一个 Web 应用程序,它是一个 servlet,基本上充当 Web 服务的前端,我使用 CXF 作为 Web 服务客户端,该应用程序在 WebLogic 9.10 服务器上运行,一切正常,直到项目所有者决定添加 ssl 支持,没什么大问题,因为我使用的是 cxf whitout spring,我设法在服务客户端的 http 管道中配置了 TLS 参数,还配置了一个带有服务器 key 的 keystore 、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

知道我做错了什么吗?提前致谢

最佳答案

回滚 prefer-web-inf-classes 内容并遵循 Application Server Specific Configuration Guide 中的 WebLogic 特定说明CXF 的文档。 更准确地说,按照第二个选项 Pack war in an ear, deploy the ear with weblogic-application.xml 中的说明提供 weblogic-application.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
    </prefer-application-packages>
</weblogic-application>

按照 this post 的附加步骤操作如果需要的话。

关于java - CXF + SSL + WebLogic 9.10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938133/

相关文章:

java.lang.ClassNotFoundException : org. springframework.web.context.request.RequestContextListener 问题

java - 如何更改 Java Web 服务客户端中的编码输出

web-services - 使用 JAXB 和 JAXWS 注释将枚举属性编码到 XML

java - 如何在java中运行groovy脚本?

java - ActionListener 是 java 中的线程吗?

java - WebLogic 中未找到类异常,TomCat 中正常

java - 如何通过 wlst 列出 weblogic 中的用户和用户角色?

java - 在 WebLogic 管理服务器 11g 上找不到 DeploymentException 和类

dynamic - "Portable"JAX-WS 客户端

java - 运行时创建内存高效常量的技术