我们现在已经使用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>
答案 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
的文档。