ClassCastException с несколькими войнами, развернутыми в Tomcat
У меня есть две WAR, развернутые в одном экземпляре Tomcat 7, и обе используют CXF + WSS4J. Эти два приложения взаимодействуют через SOAP, а перехватчики WSS4J обрабатывают утверждения SAML в заголовках SOAP. При тестировании каждой войны в отдельности все работает нормально, но когда оба приложения развернуты и одно приложение отправляет SOAP-сообщение другому, я получаю следующее исключение ClassCastException:
java.lang.ClassCastException: org.apache.ws.security.WSDocInfo cannot be cast to org.apache.ws.security.WSDocInfo
Для меня это подразумевает проблему загрузчика классов, но что конкретно я не могу понять. Каждое приложение имеет свою собственную копию WSS4J в своих соответствующих папках WEB-INF/lib, и я не вижу никакой библиотеки WSS4J в общих библиотеках Tomcat.
В работе эти два приложения, скорее всего, никогда не будут использовать одну и ту же JVM, не говоря уже о том, чтобы быть в одном и том же экземпляре Tomcat, но я буду чувствовать себя более комфортно, когда я доберусь до сути этой проблемы. Это также помогает запускать оба приложения из одного экземпляра Tomcat в процессе разработки. У кого-нибудь есть идеи, в чем может быть проблема?
ОБНОВЛЕНИЕ 1: я развернул каждую войну в отдельных экземплярах Tomcat, в которых используется одна и та же JVM, и исключение ClassCastException исчезло. Должно быть что-то, чего я не понимаю с загрузкой классов Tomcat?
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
Ик...