首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring集成ws:出站网关jaxb内部服务器error[500]

Spring集成ws:出站网关jaxb内部服务器error[500]
EN

Stack Overflow用户
提问于 2013-06-24 14:53:30
回答 1查看 3.3K关注 0票数 0

我正在尝试使用ws:outbound-gateway从spring集成中调用一个ws服务(spring-ws)。我已经使用jaxb2marshaller进行了oxm映射。最初,我使用jms:inbound-channel-adapter接收输入对象,将其转换为JAXBElement( Sample ),其中在Sample中由JAXB从WS-XSD模式生成。对象工厂用于获取JAXBElement。

在服务端(Spring-WS)被抛出,发现无效的字符'-',应该是'>‘。同样的服务(Spring-ws)可以很好地工作,并且可以很好地响应Axis-2客户机。所以我假设服务端没有问题,客户端发送的消息(spring集成)是不正确的。

如果有合适的方法做这件事,请建议我,或者我错过了什么?

Spring_integration客户端

代码语言:javascript
复制
<int:channel id="wsChainInboundChannel"/>
<int:chain input-channel="wsChainInboundChannel" output-channel="wsInboundChannel">
    <int:transformer ref="jms2wsTransform" method="jmsOrderToWSEmployee"/>
</int:chain>
<int:channel id="wsInboundChannel"/>
<int-ws:outbound-gateway id="wsOutboundGateway" request-channel="wsInboundChannel" uri="http://localhost:8081/mywebservice/servicelayer"
  marshaller="masterdatajaxb2Marshaller" unmarshaller="masterdatajaxb2Marshaller"
  reply-channel="wsOutboundChannel" message-factory="messageFactory"/>

 <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
    <property name="messageFactory">
        <bean class="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/>
    </property>
</bean>

<int:channel id="wsOutboundChannel"/>

jms2wsTransform中的jmsOrderToWSEmployee方法是

代码语言:javascript
复制
public class WS2JMSTransformer {
private final ObjectFactory jaxbFactory = new ObjectFactory();

public JAXBElement<TEmployeeBySecurityRequest> jmsOrderToWSEmployee(Message<Order> message){
    Order order = message.getPayload();
    TEmployeeBySecurityRequest request = new TEmployeeBySecurityRequest();
    request.setEmployeeId(order.getOrderQuantity().longValue());
    return jaxbFactory.createEmployeeBySecurityRequest(request);
}
}

使用TCP监视器正常正常执行的请求SOAP是

代码语言:javascript
复制
--MIMEBoundary_57eb271a7b65c0bacefa0a80da1b203d0661422ab29d24a3
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.47eb271a7b65c0bacefa0a80da1b203d0661422ab29d24a3@apache.org>

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>  
<ns1:employeeBySecurity_Request xmlns:ns1="http://com/clickandbuy/mywebservice/">   
<ns1:employeeId>12312</ns1:employeeId></ns1:employeeBySecurity_Request></soapenv:Body> 
</soapenv:Envelope>
--MIMEBoundary_57eb271a7b65c0bacefa0a80da1b203d0661422ab29d24a3--

而使用Spring_integartion客户端SOAP(错误之一)是,

代码语言:javascript
复制
------=_Part_0_157378300.1372091736608
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-  
ENV:Header/><SOAP-ENV:Body><ns2:employeeBySecurity_Request   
xmlns:ns2="http://com/clickandbuy/mywebservice/"><ns2:employeeId>6</ns2:employeeId>
</ns2:employeeBySecurity_Request></SOAP-ENV:Body></SOAP-ENV:Envelope>
------=_Part_0_157378300.1372091736608--

我注意到?xml version='1.0‘encoding='UTF-8'?>和其他一些东西丢失了。有什么办法解决这个问题吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-06-25 15:44:23

嗨,我终于找到问题所在了。对于masterdatajaxb2Marshaller,它是一个JAXB marshaller bean,有一个名为mtomEnabled的属性,在我的配置中,它用于发送/接收带有SOAP消息的附件。

代码语言:javascript
复制
<property name="mtomEnabled" value="true"/>

如上所述,messageFactory是SaajSoapMessageFactory,它以某种方式导致了错误。如果我将消息工厂更改为AxiomSoapMessageFactory,它可以正常工作。

代码语言:javascript
复制
<bean id="messageFactory"  class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">

</bean>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17269582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档