nav*_*ger 5 json soap web-services esb apache-camel
我们正在建设一个实用工具,它将:
计划A:我们成功尝试了Mulesoft Anypoint工作室来构建流程.它提供了数据映射,我们可以轻松地将成员从JSON映射到SOAP存根,并将结果再次转换为JSON.
计划B:由于计划A中的许可限制,我计划使用Camel进行.我是新手,但可以成功构建POC Web应用程序,它公开了一个接受JSON的servlet.但是现在我被卡住了,因为我不知道如何转换并拨打远程肥皂.(WSDL可用).
预期的流程
客户端 - >(Camel从这里开始)RESTful服务 - >转换数据 - >远程SOAP - >接受响应并转换为JSON - >发送回客户端.
任何指向正确方向的指针都会有所帮助.
看来你的主要问题是 JSON<->SOAP 转换。您可以使用**freemarker**
组件作为生产者并使用 freemarker 模板语言编写转换逻辑。下面是使用 FTL 进行 JSON 到 SOAP 转换的示例
<#ftl encoding="utf-8">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:iser="http://example.com/service" xmlns:das="http://example.com/service">
<soapenv:Header>
<iser:header>
<iser:username></iser:username>
<iser:password></iser:password>
<iser:agency>${body.customer.name}</iser:agency>
</iser:header>
</soapenv:Header>
<soapenv:Body>
<iser:readCompositeAddressByAddressNum>
<iser:arg1 addressNum="${body.customer.addressNum}" buildingCode="0" cityCode="0" districtCode="0" quarterCode="0" streetCode="0" streetTypeCode="0" townshipCode="0" villageCode="0">
</iser:arg1>
</iser:readCompositeAddressByAddressNum>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
将上面保存为inputTransformer.ftl。创建输出转换器 ftl(SOAP 到 JSON)并在界面中使用两者,如下所示
from("direct-vm:getCustomerDetail")
.routeId("getCustomerDetail")
..
..
.to("freemarker:inputTransformer.ftl")
.log('{$body}')
.to(<Your SOAP Service>)
..
..
.to("freemarker:outputTransformer.ftl")
.log('${body}')
Run Code Online (Sandbox Code Playgroud)
将转换后的 json 发送回您的其余调用者。
希望有帮助。
归档时间: |
|
查看次数: |
2430 次 |
最近记录: |