2011-09-08 54 views
1

我有两个WAR部署到相同的Tomcat 7实例,并且都使用CXF + WSS4J。这两个应用程序通过SOAP进行通信,WSS4J拦截器处理SOAP标头中的SAML断言。当单独测试每战一切正常,但是当两个应用程序部署以及一个应用程序发送SOAP消息,其他的,我收到以下ClassCastException异常:在Tomcat中部署多个战争的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实例启动这两个应用程序。有没有人有任何想法可能是什么问题?

UPDATE 1: 我将每场战争部署在两个使用相同JVM且ClassCastException消失的独立Tomcat实例中。必须是我不明白与Tomcat类加载?

+0

WEBAPPS应该已经分离的类加载ERS。是否有堆栈跟踪? – JoseK

回答

1

从WSS4J问题跟踪:

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

STRTransform JCE提供者抛出java.lang.ClassCastException:org.jcp.xml.dsig.internal.dom.DOMSubTreeData用的javax.xml.crypto不兼容。 OctetStreamData在WebSphere

受影响的版本:1.6

伊克...

+2

尽管此链接可能回答此问题,但最好在此处包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – Gamb

+0

谢谢Gamb,编辑我的答案 – Jpnh