ClassCastException mit mehreren Kriegen, die in Tomcat bereitgestellt werden
-
27-10-2019 - |
Frage
Ich habe zwei Kriege, die in derselben Tomcat 7 -Instanz eingesetzt werden, und beide verwenden CXF + WSS4J. Die beiden Apps kommunizieren über SOAP, und WSS4J -Interceptors behandeln SAML -Behauptungen in den SOAP -Headern. Wenn Sie jeden Krieg isoliert testen, funktioniert alles einwandfrei, aber wenn beide Apps bereitgestellt werden und eine App eine SOAP -Nachricht an die andere sendet, erhalte ich die folgende ClassCastException:
java.lang.ClassCastException: org.apache.ws.security.WSDocInfo cannot be cast to org.apache.ws.security.WSDocInfo
Für mich impliziert dies ein Problem der Klassenlader, aber was in spezifischem ich nicht herausfinden kann. Jede App verfügt über eine eigene Kopie von WSS4J in ihren jeweiligen Web-Inf/Lib-Ordnern, und ich sehe keine WSS4J-Bibliothek in Tomcats gemeinsamen Bibliotheken.
In der Produktion werden diese beiden Apps höchstwahrscheinlich nie das gleiche JVM verwenden, geschweige denn in derselben Tomcat -Instanz, aber ich werde mich wohler fühlen, wenn ich dieses Problem auf den Grund komme. Es hilft auch, beide Apps aus derselben Tomcat -Instanz in der Entwicklung zu starten. Hat jemand irgendwelche Ideen, wie das Problem sein könnte?
Update 1:Ich habe jeden Krieg in separaten Tomcat -Instanzen bereitgestellt, die beide dieselbe JVM verwenden und die ClassCastException verschwindet. Muss ich beim Laden von Tomcat -Klasse nicht verstehe?
Lösung
Aus dem WSS4J -Ausgabe -Tracker:
https://issues.apache.org/jira/browse/wss-282
Strtransform JCE Provider löscht Java.lang.Internal.dom.dom.domsubtreedata, die mit javax.xml.crypto.octetetTeamdata in der Websphase nicht kompatibel sind.
Betroffene Versionen: 1.6
Ick ...