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

Spring集成WS出站网关POC-XmlMarshallException

水麒
2023-03-14

我正在开发一个关于Spring集成的POC,使用如下。

  • 从远程JMS队列订阅输入消息(A)
  • 将输入消息(A)转换为(B)
  • 使用(B)调用远程Web服务并接收响应

我的spring int-config-xml有以下内容

<int-ws:outbound-gateway id="marshallingGateway" request-channel="mdmIntInputChannel" reply-channel="mdmIntOutputChannel" 
        uri="ws-endpoint" marshaller="marshaller" unmarshaller="marshaller"/>

<oxm:jaxb2-marshaller id="marshaller" contextPath="com.veeaar.ws.types.jaxb"/> 

在我的Spring集成proj工作区中拥有所有jaxb生成的源代码。

在STS 3.8中执行此操作时。3,将抛出以下错误。

不确定我的代码中有什么错误。任何解决这一问题的帮助都是高度赞赏的。谢谢。

Caused by: org.springframework.oxm.MarshallingFailureException: JAXB marshalling exception; nested exception is javax.xml.bind.MarshalException
 - with linked exception:
[Exception [EclipseLink-25007] (Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor for class java.lang.String was not found in the project.  For JAXB, if the JAXBContext was bootstrapped using TypeMappingInfo[] you must call a marshal method that accepts TypeMappingInfo as an input parameter.]
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.convertJaxbException(Jaxb2Marshaller.java:908)
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.marshal(Jaxb2Marshaller.java:684)
    at org.springframework.ws.support.MarshallingUtils.marshal(MarshallingUtils.java:81)
    at org.springframework.integration.ws.MarshallingWebServiceOutboundGateway$MarshallingRequestMessageCallback.doWithMessageInternal(MarshallingWebServiceOutboundGateway.java:129)
    at org.springframework.integration.ws.AbstractWebServiceOutboundGateway$RequestMessageCallback.doWithMessage(AbstractWebServiceOutboundGateway.java:233)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:590)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
    at org.springframework.integration.ws.MarshallingWebServiceOutboundGateway.doHandle(MarshallingWebServiceOutboundGateway.java:87)
    at org.springframework.integration.ws.AbstractWebServiceOutboundGateway.handleRequestMessage(AbstractWebServiceOutboundGateway.java:188)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)
    ... 36 more

我在这里进一步解释我的POC,以了解在调用远程Web服务之前为什么需要JAXB转换。

我在SpringInteg中进行的XSL转换将“Event”的输入消息转换为“fetchCodeByName”,如下所示。

<tns:fetchCodeByName xmlns:tns="http://www.veeaar.com/remote/wsdl/2010-1" xmlns:ns1="http://www.veeaar.com/remote/xml/2010-1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<ns1:Code>
    <Name>xxx</Name>
</ns1:Code>
</tns:fetchCodeByName>

在WSDL中,felchCodeByName映射到ns1命名空间的CodesType。已经从代码模式XSD生成了JAXB类。

在调用远程Web服务之前,如果我创建了一个服务激活器并尝试取消编组到JAXB对象的转换输出,我们会得到错误报告作为取消编组任务,期望'Codes'作为根元素,而不是'getchCodeByName'。

如何解决这个问题?

在Spring集成中,我们是否可以调用远程web服务而不需要marshall和解组输入消息?我们不能直接将XSLT输出定向到int ws:outbound gateway吗?

共有1个答案

西门建安
2023-03-14

为什么需要在WS出站网关之前散集?你看,然后你再列表一次!只需使用简单的WS出站网关变体(没有封送器),并按原样在其输入通道中发送XSLT转换器结果。

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

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

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

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

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

  • 在带有Java配置的ftp出站网关的Spring集成文档示例(16.8.1)中,如何将应答通道的有效负载记录到控制台?