java.lang.ClassCastException: org.opensaml.core.xml.schema.impl.XSAnyBuilder не может быть приведен к org.opensaml.xml.XMLObjectBuilder - PullRequest
0 голосов
/ 28 сентября 2018

В нашем приложении мы пытаемся перейти на загрузочную версию Spring 2. Мы используем spring-security-saml2-core: 1.0.4.RELEASE , при запуске приложения мы получаем следующее исключение.Кажется, на classpaath есть два jar xmltooling-1.4.6 и opensaml-core-3.3.0 , которые имеют один и тот же файл default-config.xml.В этом случае загрузчик классов ставит opensaml-core-3.3.0 перед xmltooling-1.4.6.jar и неправильно default-config.xml при загрузке

<ObjectProviders>
        <ObjectProvider qualifiedName="xt:DEFAULT">
        <BuilderClass className="org.opensaml.core.xml.schema.impl.XSAnyBuilder"/>
        <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSAnyMarshaller"/>
        <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSAnyUnmarshaller"/>
    </ObjectProvider>  </ObjectProviders> 

java.lang.ClassCastException: org.opensaml.core.xml.schema.impl.XSAnyBuilder cannot be cast to org.opensaml.xml.XMLObjectBuilder
        at org.opensaml.xml.XMLConfigurator.initializeObjectProviders(XMLConfigurator.java:236)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:182)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:166)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:143)
        at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:203)
        at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:186)
        at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:92)
        at org.opensaml.PaosBootstrap.bootstrap(PaosBootstrap.java:27)
        at org.springframework.security.saml.SAMLBootstrap.postProcessBeanFactory(SAMLBootstrap.java:42).

Может кто-нибудь помочь здесь.Пожалуйста ..

1 Ответ

0 голосов
/ 31 июля 2019

См. https://issues.shibboleth.net/jira/browse/OSJ-152

opensaml В версии V2 используется xmltooling.jar.

opensaml В версии V3 используется opensaml-soap-impl.jar, имя пакета которого отличается от xmltooling.jar

Пример:

  • opensaml-soap-impl.jar использует -> org.opensaml.core.xml.XMLObjectBuilder

  • xmltooling.jar использует-> org.opensaml.xml.XMLObjectBuilder

Корневая причина: у вашего classpath есть версии v10 и v3 opensaml.Это является причиной classcast исключения.

Решение:

В идеале вам не нужно иметь обе версии opensaml.это может произойти случайно из-за управления зависимостями maven.Удалите один из них.

  1. Если ваша кодовая база совместима с opensamlv2 версией и если вы не хотите обновлять ее, исключите opesamlv3 банок, как показано ниже.
  2. В противном случаеобновить базу кода до совместимости с версией v3 и удалить opensamlV2 jar-файлы
...