当前位置: 首页 > 知识库问答 >
问题:

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

公西繁
2023-03-14

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

执行时,我在客户端(Spring Integration)接收到一个内部服务器错误[500]。而在服务端(Spring WS)是抛出,发现无效字符'-',应为'

请建议我是否有合适的方法来做这件事,或者我遗漏了什么

Spring _集成客户端

<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"/>

jmsOrderToWSMployee method in jms2wsTransform is

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是

--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(错误一)是,

------=_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'编码='UTF-8'?

谢谢

共有1个答案

商同化
2023-03-14

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

<property name="mtomEnabled" value="true"/>

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

<bean id="messageFactory"  class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">

</bean>
 类似资料:
  • 我正在开发一个关于Spring集成的POC,使用如下。 从远程JMS队列订阅输入消息(A) 将输入消息(A)转换为(B) 使用(B)调用远程Web服务并接收响应 我的spring int-config-xml有以下内容 在我的Spring集成proj工作区中拥有所有jaxb生成的源代码。 在STS 3.8中执行此操作时。3,将抛出以下错误。 不确定我的代码中有什么错误。任何解决这一问题的帮助都是高

  • 我们使用ws-outbound-gateway以下面的方式调用webservice。 如果请求xml采用以下方式,则工作正常。 如果我在请求xml中添加SOAP-ENV:Envelope xmlns:SOAP-ENV = " http://schemas . xmlsoap . org/SOAP/Envelope/"和SOAP-ENV:Body,它将抛出如下错误: org.springframew

  • 我上传一个图像到s3,通过lambda,和一切工作正常,没有错误,但从API网关的响应是500内部服务器错误。 我按照以下教程配置了我的api网关:使用Amazon API网关集成API的二进制支持。 My lambda接收Base64图像,对其进行解码并成功上载到s3。 这是我的lambda代码: 这就是我收到的:{“消息”:“内部服务器错误”},状态代码为500。 Obs:我没有使用lambd

  • 我正在开发一个Spring集成应用程序,我有一个地图列表,我需要将其插入到表格中。 我使用了jdbc: Outsport-网关或适配器将记录插入到表中。 但是如何使用jdbc:出站网关从我的地图列表中插入所有记录。

  • 我有一个 FileUpload 事件,应该将其发送到 http:outbound upload URL。为此,我必须首先对登录 URL 进行身份验证并获取响应,并设置要执行的出站上传 URL 的会话 ID。在我的情况下,我有一个事件侦听器,它侦听应用程序以发布文件上传事件。发布后,我的侦听器可以拾取并执行流。我正在尝试了解如何实现这一点,因为文件上传对象需要保留,直到登录响应返回。谢谢!

  • 我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情: 我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示: 其中MessageReceiverHandler()是扩展AbstractMessageHandler的bean。 所以上面我们有一个用于出站消息的消息网关。我假设我们也应该有一个用于入站消息的网关,允许我们将传入消息处理与应