空SOAP响应 - 使用JBoss 4.2,Jaxb2,Java 1.6

时间:2011-10-22 23:49:33

标签: web-services spring jboss jaxb2 saaj

我正在尝试在JBoss 4.2(JDK 1.6,spring 3.0,spring-ws 2.0)中部署spring-ws SOAP webservice。我使用JAXB2作为O / X绑定。设置很好,发现bean和有线,可以发送请求并生成响应。但是,我得到了空洞的回应。它既不在SOAP信封中,也不包含我在服务器上组装的任何内容的简单UserDetails。

正确的回答是:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
       <ns2:UserDetails xmlns:ns2="http://a.dol.com/schemas">
          <ns2:name>John</ns2:name>
          <ns2:lastname>PerX</ns2:lastname>
       </ns2:UserDetails>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

但我得到的结论是:

<Envelope>
    <Header/>
    <Body>
       <ns2:UserDetails xmlns:ns2="http://a.dol.com/schemas"/>
   </Body>
</Envelope>

搜索谷歌后,我发现了以下代码:

<beans>
  <!-- Big magic hack to fix the broken SAAJ in JBoss
   See http://static.springsource.org/spring-ws/sites/1.5/faq.html#saaj-jboss -->
   <bean id="messageFactory">
     <property name="messageFactory">
       <!-- This is the Java 6 variant of this fix! Note the "internal" package missing in the spring-ws FAQ. -->
       <bean class="com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/>
     <property>
   <bean/>
</beans>

但这也没有帮助,我得到了以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageFactory' defined in ServletContext resource...

Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError...
    Caused by: java.lang.IllegalArgumentException: com.sun.xml.messaging.saaj.soap.LocalStrings != com.sun.xml.internal.messaging.saaj.soap.LocalStrings

任何提示都表示赞赏。

更新

使用以下内容更新JBoss的run.bat确实解决了问题,但这是正确的方法吗?

set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory
set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl

2 个答案:

答案 0 :(得分:2)

替换弹簧片段
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
    <property name="messageFactory">
        <bean class="com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/>
    </property>
</bean>

您在messageFactory bean定义中遗漏了完全限定的类名。 这应该没有启动选项。

答案 1 :(得分:1)

使用以下内容更新JBoss的run.bat可以解决问题:

set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory
set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
set JAVA_OPTS=%JAVA_OPTS% -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl