随着JSON和其他NoSQL数据标准格式的普及,XML格式的复杂性(在某些情况下甚至是普通的冗长程度)都被避免了。
但是,XML及其周围形成的功能和标准已成为企业及其业务流程的关键。
但是,客户的需求要求他们开始支持多种格式。
为此,Axis2之类的工具框架已开始增加对采用基于WSDL的服务并生成JSON响应的支持。
企业需要生活在后SOAP世界中,但要利用他们多年来开发的专业知识和SOA基础架构。
Axis2是执行此操作的一种方法,但是它不提供对Box的监视和策略支持。
另一个选择是ebay的姜黄SOA项目。
本来就可以直接使用WSDL(由STAR标准组织提供),并且不仅可以支持SOAP 1.1 / 1.2,而且还可以支持REST风格的服务,该服务可以为XML,JSON和其他任何其他数据格式提供支持需要支持。
不过有一个问题,姜黄SOA并非在设计时就考虑了完整的SOAP和W3C Web服务堆栈。
它使用WSDL仅描述服务支持的操作和数据格式。
因此,诸如WS-Security,WS-Reliable Messaging和XML Encryption之类的高级功能并不是Turmeric固有的内置功能。
根据您的需求,您将需要使用管道处理程序并增强协议处理器以支持某些高级功能。
但是,这些是可以解决的项目,它可以与现有的Web服务互操作以充当代理。
例如, STAR组织提供了一个Web服务规范 ,该规范已在自动化行业中实施,以为其规范提供传输。
使用像姜黄SOA这样的框架,现有的应用程序可以以多种格式提供给贸易伙伴和服务使用者。
例如,可以在RESTful xml中提供数据:
<?xml version='1.0' encoding='UTF-8'?>
<ns2:PullMessageResponse xmlns:ms="http://www.ebayopensource.org/turmeric/common/v1/types" xmlns:ns2="http://www.starstandards.org/webservices/2009/transport">
<ns2:payload>
<ns2:content id="1"/>
</ns2:payload>
</ns2:PullMessageResponse>
或者可以提供以JSON格式表示的相同XML:
{
"jsonns.ns2": "http://www.starstandards.org/webservices/2009/transport",
"jsonns.ns3": "http://www.starstandards.org/webservices/2009/transport/bindings",
"jsonns.ms": "http://www.ebayopensource.org/turmeric/common/v1/types",
"jsonns.xs": "http://www.w3.org/2001/XMLSchema",
"jsonns.xsi": "http://www.w3.org/2001/XMLSchema-instance",
"ns2.PullMessageResponse": {
"ns2.payload": {
"ns2.content": [
{
"@id": "1"
}
]
}
}
}
上面的代码是从相同的Web服务生成的,但是只更改了标头以指示应返回的数据格式。
无需更改业务逻辑或Web服务实现代码本身。
在姜黄中,这是通过数据绑定框架及其相应的管道处理程序来处理的。
对于Axis2,这是消息请求配置条目。
无论如何完成,重要的是能够利用现有服务,但以消费者要求的格式提供数据。
对于那些感兴趣的人,我创建了一个示例STAR Web服务,可以将其与Turmeric SOA一起使用以查看其工作原理。
代码可以在github上找到 。
虽然姜黄处理SOAP协议的基础知识,但并不容易支持诸如在soap:header中使用和存储信息之类的高级项目。
您可以获取相关信息,但是由于在姜黄服务中仅使用WSDL来描述数据格式和消息,因此底层肥皂传输支持不一定要充分利用整个规范。
根据您的要求,Axis2可能会更好,但是姜黄SOA提供了其他项,例如服务指标,监视控制台,策略管理,通过基于XACML 2.0的策略进行速率限制等等。
如果您已经以W3C方式编写了现有的Web服务,但是需要提供其他格式的数据,则可以同时使用姜黄。
这不是一个命题。
利用为您提供最大灵活性的工具,以最少的工作量即可将数据提供给用户。
翻译自: https://www.javacodegeeks.com/2012/08/enterprise-soap-services-in-web-20.html