在Spring Integration中使用来自REST调用的XML响应

时间:2017-02-10 15:14:20

标签: spring spring-integration

似乎是一项简单的任务,但我无法理解它。

我有一个Spring集成链,它调用外部Web服务,返回XML。我想在下游的XpathRouter中使用该XML响应。

我应该使用什么预期响应类型?

<int:chain input-channel="filesChannel">

    <!-- ... some previous components in the chain -->
    <int-http:outbound-gateway
        http-method="POST"
        url="http://web/service/url"
        expected-response-type="java.lang.String" />

    <int-xml:xpath-router default-output-channel="resultChannel">
        <int-xml:xpath-expression expression="/order/status" />
        <int-xml:mapping value="Error" channel="importErrorChannel" />
    </int-xml:xpath-router>
</int:chain>

xpath-router似乎不能使用webservice返回的XML。当我使用以下行的断点调试路由器时:

    Node node = this.converter.convertToNode(message.getPayload());

节点为空,但消息确实包含有效的XML。

是因为我没有设置正确的expected-response-type

以下是我从服务中收到的响应XML:

<apiResponse version="1.0">
<orders>
<order>
       <orderReference>test_2_3045342</orderReference>
       <status>Error</status>
       <errors>
          <error>
              <errorCode>1100</errorCode>
              <errorMessage><![CDATA[ "Field is required: dropWindow" ]]></errorMessage>
          </error>
       </errors>
</order>
</orders>
</apiResponse>

1 个答案:

答案 0 :(得分:2)

好的,我发现了我的错误 - 它实际上是在XPATH表达式中。应该//order/status启用深度搜索。

使用XML XpathRouter,java.lang.String期望响应类型可以正常工作。

由于