json - 使用 Apache Camel 将 REST 自定义转换为 SOAP 到 REST

标签 json web-services soap apache-camel esb

我们正在构建一个实用程序,它将:

  1. 通过 RESTful 服务接受 JSON
  2. 将其映射到 POJO
  3. 将其转换为可用于调用远程 SOAP 服务的对象(JSON 与 SOAP-XML 不同,例如缺少一些字段,因此我们必须映射实体而不是进行自动化。)<
  4. 进行 SOAP API 调用并获取结果。
  5. 将此结果转换为 JSON 并将其发送回客户端。 (流程是同步的,以避免最初的复杂性)。

A 计划:我们成功尝试了 Mulesoft Anypoint studio 来构建流程。它提供了数据映射,我们可以轻松地将成员从 JSON 映射到 SOAP stub ,并将结果再次转换为 JSON。

B 计划:由于 A 计划中的许可限制,我计划使用 Camel 来实现。我对此很陌生,但可以成功构建 POC Web 应用程序,该应用程序公开了接受 JSON 的 servlet。但现在我陷入困境,因为我不知道如何转换和调用远程 SOAP 。 (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>

将上面的内容另存为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}')

将转换后的 json 发送回您的其余调用者。

希望有帮助。

关于json - 使用 Apache Camel 将 REST 自定义转换为 SOAP 到 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490929/

相关文章:

Javascript - 在 Require.js 中延迟模块返回/声明?

java - 单个 ListView 中的不同对象

java - 与 Jackson 通过 Socket 进行 Json

ios - 如何将模拟器上显示的JSON数据保存到本地存储中(React-Native)

php - 如何在 PHP 上将 urn 添加到 SoapClient?

android - Android 的 JDBC 与 Web 服务

java - SOAP 负载中的特殊字符未正确传输

java - 在 ASP.NET Web API 中创建输入参数并使用 java web 服务功能

java - 如何使用 Apache cxf 为安全(https)soap Web 服务生成 java 类

java - Axis 中的数组序列化