如何在Camel中使用带参数的SOAP Web服务?

时间:2015-12-15 16:38:42

标签: java web-services soap apache-camel

我们现在已经使用Camel应用程序挣扎了一段时间,我们需要使用SOAP消息中的参数连接到Web服务。
http://edw.morningstar.com/webservice/edw.asmx?op=UploadPrivateList中的Web服务接受四个参数:ClientId,flag,filename和byte []。

是否有人可以阐明我们应该如何创建有效的路线?

我们设法连接但我们无法设置SOAP信封以包含所请求的参数。来自Web服务的回复应该是真的,但是由于SOAP内容我们得到了错误。我们无法看到发送的信封......

我们尝试使用的服务是 UploadPrivateList

请指教!

Thx

/ M

来自网络服务:

POST /webservice/edw.asmx HTTP/1.1
Host: edw.morningstar.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <UploadPrivateList xmlns="http://tempuri.org/">
      <ClientId>string</ClientId>
      <flag>string</flag>
      <fileName>string</fileName>
      <fs>base64Binary</fs>
    </UploadPrivateList>
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <UploadPrivateListResponse xmlns="http://tempuri.org/">
      <UploadPrivateListResult>boolean</UploadPrivateListResult>
    </UploadPrivateListResponse>
  </soap12:Body>
</soap12:Envelope>

2 个答案:

答案 0 :(得分:1)

我建议使用适用于Camel http://camel.apache.org/cxf.html的Apache CXF组件。您应该首先使用“WSDL”调查&#39;方法(该术语应该为您提供很多好的搜索提示)。

基本上,CXF提供的工具可以将SOAP服务的WSDL(在http://edw.morningstar.com/webservice/edw.asmx?wsdl)转换为Java类。然后,您的Camel路由包含一些代码来实例化这些实例,然后使用CXF组件来进行SOAP调用。

我强烈推荐“骆驼行动”&#39;本书 - 我很确定它有一个章节可以处理你描述的场景(并使用我提到的解决方案)

答案 1 :(得分:1)

您不必为所有事情使用Camel路线。如果要从wsdl等生成客户端框架代码,可以使用vanilla Apache CXF来调用SOAP Web服务。就像过去使用Apache Axis一样。

从Camel路线中,您可以使用camel-cxf组件。对于Web服务,您可以使用和不使用生成的POJO类。为了实现这一点,请查看camel-cxf上的dataFormat模式选项。正如您可以在非POJO的PAYLOAD和MESSAGE模式中使用它。

另外,为了调用普通的SOAP Web服务,您还可以回退并使用纯HTTP组件。

要使用Java代码中的Camel路由或Camel端点,请阅读有关ProducerTemplate的文档。