<div dir="auto"><font size="2" face="sans-serif">We have a Spring Boot application using opensaml (pulled in by spring-ws-security:jar:2.4.0). This works as standalone Spring Boot App, but not in a web container like Tomcat.</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">I found out, that this is a classpath order problem. Spring boot has a well defined classpath defined bei pom dependencies, whereas the jar order in WEB-INF/lib is rather random (really it is defined by java.io.File.list()).</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Actually, our application works on Tomcat/Linux, if I put a hyphen at the start of the filename of xmltooling-1.3.2-1.jar</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Looks like -xmltooling-1.3.2-1.jar goes before opensaml-core-3.1.1.jar in the webapp classpath.</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Both jars contain a schema-config.xml which is loaded by Class.getResourceAsStream, so whichever is first in the classpath gets loaded first.</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Unfortunately, they contain different definitions, e.g. </font><span style="font-family:sans-serif;font-size:12.8px"></span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif"><ObjectProvider qualifiedName="xs:anyType"></font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif"><BuilderClass className="org.opensaml.xml.schema.impl.XSAnyBuilder" /></font><span style="font-family:sans-serif;font-size:12.8px"></span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">and</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif"><ObjectProvider qualifiedName="xs:anyType"></font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif"> <BuilderClass className="org.opensaml.core.xml.schema.impl.XSAnyBuilder"/></font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">If the wrong one (opensaml-core-3.1.1.jar) is picked first, this results in a nasty ClassCastException: org.opensaml.core.xml.schema.impl.XSAnyBuilder cannot be cast to org.opensaml.xml.XMLObjectBuilder</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">One solution that should work, is building a fat ueber-jar containing all opensaml jars, by unzipping all jars into a folder (in reverse pom classpath order) and re-jaring it.</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Is there a less drastic way to solve the problem?</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Thanks,</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br style="font-family:sans-serif;font-size:12.8px"><font size="2" face="sans-serif">Juergen</font><span style="font-family:sans-serif;font-size:12.8px"> </span><br></div>