tomcat - 在 Tomcat 中部署了多个 war 的 ClassCastException

标签 tomcat classloader cxf wss4j

我有两个 WAR 部署到同一个 Tomcat 7 实例,并且都使用 CXF + WSS4J。这两个应用程序通过 SOAP 进行通信,WSS4J 拦截器处理 SOAP header 中的 SAML 断言。单独测试每场 war 时,一切正常,但是当部署了两个应用程序并且一个应用程序向另一个应用程序发送 SOAP 消息时,我收到以下 ClassCastException:

java.lang.ClassCastException: org.apache.ws.security.WSDocInfo cannot be cast to org.apache.ws.security.WSDocInfo

对我来说,这意味着一个类加载器问题,但具体是什么我无法弄清楚。每个应用程序在各自的 WEB-INF/lib 文件夹中都有自己的 WSS4J 副本,我在 Tomcat 的公共(public)库中没有看到任何 WSS4J 库。

在生产中,这两个应用很可能永远不会使用相同的 JVM,更不用说在同一个 Tomcat 实例中了,但是当我弄清这个问题的根源时,我会感觉更舒服。它还有助于从开发中的同一个 Tomcat 实例启动两个应用程序。有没有人知道问题可能是什么?

更新 1: 我在单独的 Tomcat 实例中部署了每场 war ,它们都使用相同的 JVM,并且 ClassCastException 消失了。一定是我对 Tomcat 类加载不了解?

最佳答案

来自 WSS4J 问题跟踪器:

https://issues.apache.org/jira/browse/WSS-282

STRTransform JCE 提供程序抛出 java.lang.ClassCastException:org.jcp.xml.dsig.internal.dom.DOMSubTreeData 与 Websphere 中的 javax.xml.crypto.OctetStreamData 不兼容

受影响的版本:1.6

咳咳……

关于tomcat - 在 Tomcat 中部署了多个 war 的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349843/

相关文章:

java - 加载 jar 的自定义类加载器在类文件的常量池中提供了非法的 UTF8 字符串

java - 从依赖于另一个 jar 的 jar 加载类

json - 避免从输入/输出 JSON(CXF Web 服务)包装对象类型名称

java - 在 ws 端点部署中检测到 Apache CXF 库

java - 如何反序列化 JSON 数组?

java - 在 Eclipse 中运行 spring MVC 应用程序时出现 HTTP-404 错误 - Tutorials point hello world example

angularjs - 在 tomcat apache 服务器上部署 AngularJS 应用程序

tomcat - 如何将 Valve 添加到 Apache Tomcat 并使用 rewrite.config

java - ClassLoader getResources 未找到文件的所有版本

java - Tomcat 停止问题 + Spring boot + 服务