0

我正在 Apache camel 中开发工作流应用程序

业务用例:

  1. 服务在消费者端点公开
  2. 处理请求消息
  3. 调用外部 SOAP 服务,获取响应
  4. 检查响应 xml 中的特定标记,然后仅调用另一个外部 SOAP 服务
  5. 将最终响应返回给客户端

现在我陷入了第 4 步

我的骆驼路线是

<camelContext xmlns="http://camel.apache.org/schema/spring">

    <route streamCache="true">
      <from uri="cxf:bean:proxyEndpoint"/>
        <process ref="myProcessor"/>
             <!-- processing request & logging -->
      <setBody>
             <!-- set request as body required for calling external web service -->
      </setBody>
      <to uri="cxf:bean:panEndpoint"/>
      <!-- <to uri="file:C:/LOG" /> -->
      <!--  <process ref="myProcessor2"/> -->
      <log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/> 

    </route>
  </camelContext>

我可以调用外部服务,但是<to uri="cxf:bean:panEndpoint"/>如果我尝试记录正文,在路由到文件的情况下,我会得到相同的任意值。

当我尝试路由到处理器并打印时System.out.println(exchange.getIn().getBody()); ,我得到了sun.net.www.protocol.http.httpurlconnection$httpinputstream无法解析或处理的信息

当我尝试使用 TCP-IP Monitor 监控场景时,调用了外部服务并收到了正确的响应

任何帮助将不胜感激。

4

1 回答 1

0

告诉 Camel 你想要的 body 是什么类型,它使用它的类型转换器来实现(如果可能的话)。

InputStream所以如果你想要身体

exchange.getIn().getBody(InputStream.class)

如果你想要它作为字符串,那么做

exchange.getIn().getBody(String.class)

在这里阅读更多

在使用流时,请注意流缓存

于 2015-12-16T08:39:15.850 回答