我有两个WAR部署到同一个Tomcat 7实例,并且都使用CXF + WSS4J。这两个应用程序通过SOAP进行通信,WSS4J拦截器处理SOAP标头中的SAML断言。在隔离测试每个战争时,一切正常,但是当两个应用程序都部署并且一个应用程序向另一个应用程序发送SOAP消息时,我收到以下ClassCastException:
java.lang.ClassCastException: org.apache.ws.security.WSDocInfo cannot be cast to org.apache.ws.security.WSDocInfo
对我来说,这意味着一个类加载器问题,但具体而言,我无法弄清楚。每个应用程序在各自的WEB-INF / lib文件夹中都有自己的WSS4J副本,我在Tomcat的公共库中看不到任何WSS4J库。
在生产中,这两个应用程序很可能永远不会使用相同的JVM,更不用说在同一个Tomcat实例中,但是当我到达这个问题的底部时,我会感觉更舒服。它还有助于在开发中从同一个Tomcat实例启动这两个应用程序。有没有人有任何想法可能是什么问题?
更新1: 我在每个使用相同JVM并且ClassCastException消失的Tomcat实例中部署了每个war。必须是Tomcat类加载时我不理解的东西?
答案 0 :(得分:1)
来自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
...伊克