Weblogic Spring WS 部署 class 转换异常

Weblogic Spring WS deploy class cast exception

我正在使用 WebLogic Server:12.1.1.0、Spring 3.2.11.RELEASE 和 Camel 2.13.4.

我的weblogic.xml是:

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app.xsd"
 xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
     <container-descriptor>
         <prefer-web-inf-classes>true</prefer-web-inf-classes>
     </container-descriptor>
 </weblogic-web-app>

部署时我得到以下堆栈跟踪:

[HTTP:101216]Servlet: "spring-ws" failed to preload on startup in Web application: "camelweblogic.war".
org.springframework.beans.factory.BeanCreationException: Invocation of init method failed;
nested exception is java.lang.ClassCastException: weblogic.xml.stax.XMLStreamInputFactory cannot be cast to javax.xml.stream.XMLInputFactory
at org.springframework.ws.support.DefaultStrategiesHelper.instantiateBean(DefaultStrategiesHelper.java:188)
at org.springframework.ws.support.DefaultStrategiesHelper.getDefaultStrategies(DefaultStrategiesHelper.java:134)
at org.springframework.ws.server.MessageDispatcher.initEndpointAdapters(MessageDispatcher.java:426)
at org.springframework.ws.server.MessageDispatcher.setApplicationContext(MessageDispatcher.java:156)

相关问题是:

正确的weblogic.xml是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app.xsd"
    xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>false</prefer-web-inf-classes>

        <prefer-application-resources>

            <resource-name>META-INF/services/com.sun.xml.ws.spi.db.BindingContextFactory
            </resource-name>

            <resource-name>META-INF/services/javax.xml.bind.JAXBContext
            </resource-name>
        </prefer-application-resources>
    </container-descriptor>
</weblogic-web-app>

在所有 Camel 依赖项中排除 slf4j 和 jaxb-impl。例如:

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-ws</artifactId>
        <version>2.13.4</version>
        <exclusions>
            <exclusion>
                <artifactId>slf4j-api</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jaxb-impl</artifactId>
                <groupId>com.sun.xml.bind</groupId>
            </exclusion>
        </exclusions>
    </dependency>