Pregunta

Tengo dos guerras desplegadas en la misma instancia de Tomcat 7, y ambas usan CXF + WSS4J. Las dos aplicaciones se comunican a través de SOAP, y los interceptores WSS4J manejan las afirmaciones SAML en los encabezados de jabón. Al probar cada guerra de forma aislada, todo funciona bien, pero cuando ambas aplicaciones se implementan y una aplicación envía un mensaje SOAP al otro, recibo la siguiente ClassCastException:

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

Para mí, esto implica un problema de cargador de clase, pero qué en específico no puedo entender. Cada aplicación tiene su propia copia de WSS4J en sus respectivas carpetas web-INF/LIB, y no veo ninguna biblioteca WSS4J en las bibliotecas comunes de Tomcat.

En la producción, estas dos aplicaciones probablemente nunca usen el mismo JVM y mucho menos estar en la misma instancia de Tomcat, pero me sentiré más cómodo cuando llegue al final de este problema. También ayuda a iniciar ambas aplicaciones de la misma instancia de Tomcat en desarrollo. ¿Alguien tiene alguna idea cuál podría ser el problema?

Actualización 1:Implementé cada guerra en instancias separadas de Tomcat que usan el mismo JVM y la ClassCastException desaparece. ¿Debe ser algo que no entiendo con la carga de la clase Tomcat?

¿Fue útil?

Solución

Del rastreador de problemas WSS4J:

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

Strtransform JCE Provider lanza java.lang.classcastException: org.jcp.xml.dsig.internal.dom.domSubTreedata incompatible con javax.xml.crypto.octettreamdata en webSphere

Versiones afectadas: 1.6

Ick ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top