首页 > OOP语言 > 其它 > 正文

使用Mule ESB与Groovy编排RESTful服务
2012-08-22 18:07:59   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

向Mule发送GET请求

组成该编排的最后一个服务负责HTTP GET处理,它会获得新创建的订单,订单中包含了额外的值以形成一个合法的消息供email网关使用。如下是个示例交互:

GET /order/O13579 HTTP 1.1
200 OK
Content-Type: application/vnd.acme+xml
...
<order xmlns='urn:acme:order:3:1'>
  <customerId>123456</customerId>
  <productId>P987C</productId>
  <quantity>2</quantity>
  <customerEmail>foo@bar.baz</customerEmail>
  <estimatedShipping>2009-31-12T00:00:00Z</estimatedShipping>
</order>

好消息是Mule的HTTP传送包含了一个名为rest-servicecomponent的组件,该组件简化了服务与REST资源的交互。幸好有了这样一个组件,我们就无需将GET操作的结果发给随后的服务了,相反可以在单独的服务中完成一切。除此以外,它还支持在配置中使用表达式,这样就能实现与动态构建的URL之间的连通了。

<service name="SuccessfulOrderProcessor">
<inbound>
  <inbound-endpoint ref="SuccessfulOrderQueue" />
</inbound>
<http:rest-service-component httpMethod="GET"
   serviceUrl="#[header:OrderResourceLocation]" />
<outbound>
  <pass-through-router>
   <outbound-endpoint ref="EmailGatewayQueue">
    <transformers>
     <object-to-string-transformer />
     <transformer ref="OrderMicroformatToEmailMap" />
    </transformers>
   </outbound-endpoint>
  </pass-through-router>
</outbound>
</service>

在接收到成功的订单消息后,该服务使用REST服务组件生成一个HTTP GET请求,并将该请求发送给此前存储在OrderResourceLocation属性(aka heade)中的URL。注意到我们是如何通过Mule表达式框架(使用#[...]语法)在组件中注入动态URL的。

在将GET请求的响应发送给负责与email网关进行通信的服务前,我们对XML订单实体进行了两次转换:

如上所述,我们“分离”了响应实体。

使用转换器解析XML实体并构建一个映射以供接下来的服务使用。这一次,又利用到了Groovy的强大功能。

Groovy's XmlSlurper Happiness

Groovy的XmlSlurper是解析XML微格式的理想工具,这要归功于其类似DSL的API。

相关热词搜索:

上一篇:基于WAS CE和Axis2开发Web Service应用
下一篇:通过Apache配置Rewrite实现网络服务的co-branding

分享到: 收藏