apache camel是否支持将Spring MVC实现的REST服务公开为SOAP

时间:2012-04-18 11:06:40

标签: spring rest soap cxf apache-camel

我们目前正在使用Spring MVC来实现REST服务。我们需要将这些服务实现的子集公开为SOAP。

我查看了apache camel文档,看看是否有任何此类直接支持。从文档中看来,似乎camel可能会这样做,但仅限于通过Apache CXF实现的服务。在得出结论之前,我想知道Spring MVC是否可以实现REST服务。

  • camel是否支持将Spring MVC实现的REST服务公开为SOAP服务
  • 如果是的话,你能指点我一些文件。
  • 如果没有,关于为Spring MVC实现SOAP包装器的任何建议都实现了REST服务。

2 个答案:

答案 0 :(得分:3)

首先,没有明显的方法可以在SOAP和REST之间自动代理。

REST是关于数据/资源(所有形状和颜色)和非常少的操作,SOAP完全是关于XML定义数据的操作。

但是使用Camel消费SOAP消息应该是相当直接的(例如使用Spring WS)。

然后,您可以使用原始XML(XPATH或XSLT),也可以通过将JAXB解组为Java对象来解决它。这可能是相当自动化的。有关Spring WS,Camel和JAXB示例,请参阅(http://camel.apache.org/spring-ws-example.html)。我还建议您使用maven-jaxb2-plugin基于SOAP模式使用JAXB生成Java对象。

然后,您需要某种查找表来在SOAP端点/方法/ soap操作与REST服务之间进行路由。这很大程度上取决于REST服务的结构。然后使用Camel调用RESTful资源应该是微不足道的。无论你喜欢什么,都可以考虑HTTP或REST。

您需要考虑的是,这可能是此方案中最重要的部分,如果您的REST服务是其他有效负载编码而不是XML,例如JSON。然后必须在XML和JSON之间进行映射。没有真正的标准,但Camel可以简化这项工作。 Camel甚至会在下一版本2.10(https://issues.apache.org/jira/browse/CAMEL-4930)中进行自动转换。

答案 1 :(得分:1)

我想一个可能的选择是使用任何ESB并实现为REST API提供SOAP接口的代理。

基本上,ESB充当接收SOAP消息的代理,并将格式转换为REST以与现有REST API进行通信,并将收到的响应转换回SOAP以响应客户端。

这是大多数ESB的一个非常常见的用例,我相信Camel也可以做到这一点,你怎么也想看看UltraESB之类的其他ESB,如果你不是,那就做出决定已经绑定到Camel。