We have a JSF Spring application running on a Weblogic 10.3.5 server. The server is in an environment where there is no possibility to access resources on the Internet.
Now we want to upgrade the server to Weblogic 12c without changing the application "too much" (Customer request.) Because our JSF version is 1.2, we followed the instructions on how to continue using JSF 1.2 with 12c: Using JSF and JSTL - 12c Release 1 (12.1.1) We did these changes directly in the ear/war, so no rebuild of the Application was necessary.
Deploying our application with the above JSF changes on 12c worked fine on our test machine as long as it had a working Internet connection. All aspects of the application was working as well. As soon as we blocked connections to the outside world in our test environment, the deployment failed because it couldn't find the spring beans XSD:
####<Nov 28, 2013 11:11:56 PM CET> <Warning> <org.jboss.weld.Bootstrap> <nb18> <AdminServer> <[STANDBY] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1385676716422> <BEA-000000> <WELD-001208 Warning when validating file:/home/pju/weblogic-domains/weblogic-12.1.1/ams/servers/AdminServer/tmp/_WL_user/nsa/xnyl25/war/WEB-INF/beans.xml@10 against xsd. schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.>
We tried the same thing with Weblogic 10.3.5 in our test environment, still with the firewall blocking outgoing connections, and it deployed and ran without any fuss. Clearly Weblogic 10.3.5 does either not validate the beans.xml during deployment, or it uses the XSD contained in the Spring Beans JAR on the classpath.
Why does this not work in Weblogic 12c?
We have tried various solutions provided on the web, java - Spring schemaLocation fails when there is no internet connection - Stack Overflow as an example.
We have explicitly put the XSD on our classpath and changed our beans.xml accordingly. We have tried putting the Spring Beans jar and XSDs (in separate tests) in the Weblogic classpath. Always with a similar warning; the XSD can't be found. (It's not even reported as an error, but mostly the Weblogic server hangs. If we're lucky, the timeout kicks in and we can undeploy the application again. Often the application is half(?)-deployed. If the server is restarted in this state, it hangs with the same warning during startup. The server then never reaches RUNNING state and cannot be accessed.)
We have tried upgrading to a later Spring version (did also not work), but then noticed, that in the Weblogic internal jars, for instance in weblogic-spring.jar, they (still) use an older version of Spring than what we do. They also explicitly state the version of the XSD used: http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
Where as we use the unversioned one, as can be seen in the snippet from our beans.xml above. We bundle Spring libraries versioned 2.5.6 with our application. According to the mapping there, spring-beans.xsd should be mapped to spring-beans-2.5.xsd (which is contained in the jar).
We do have some transient dependencies on XML related jars, like xml-apis, xmlParserAPIs, stax-api (from woodstox), which we now wonder if they are in conflict with the Weblogic versions. We have tried excluding them, but it has not changed the result. We also bundle a lot of Spring resources.
Does anyone have an idea what is going on here, and how we can fix it (preferably without rewriting and rebuilding the application)?