使用Mule ESB与Groovy编排RESTful服务
2009-12-01 00:00:00 来源:WEB开发网Mule对REST的支持
Mule提供了一种简单而又强大的方式与RESfFul服务交互,那就是Mule RESTPack。
Mule RESTPack提供了一整套连接器与完整的指南以帮助用户创建新的RESTful应用。在本文撰写之际,该软件包提供了三种传送器,分别基于三种流行的REST框架:Abdera、Jersey及Restlet。这样我们就可以轻松公开新的资源,但如何集成现有的REST资源呢?
好消息是Mule标准的脚本模块所提供的Groovy支持有助于Mule HTTP传送器的使用,这样我们就可以成功与RESTful服务交互了。 向Mule发送POST请求
首先来看看第一个交互。HTTP向特定的资源发送一个XML实体来创建订单,如以下程序片段所示:
POST /orders HTTP 1.1
...
<order xmlns='urn:acme:order:3:1'>
<customerId>123456</customerId>
<productId>P987C</productId>
<quantity>2</quantity>
</order>
如果成功服务器的响应如下:
201 Created
Location: http://acme.com/order/O13579
...
<order id='O13579' />
在Mule中,我们可以通过一个简单的HTTP输出端点(outbound endpoint)实现该交互。注意到交互本身是通过向订单创建服务发送一个包含请求值(客户与产品ID、数量)的映射而触发的。该服务如下所示:
<service name="OrderCreationService">
<inbound>
<inbound-endpoint ref="OrderCreationQueue" />
</inbound>
<outbound>
<chaining-router>
<http:outbound-endpoint synchronous="true"
responseTimeout="15" method="POST"
host="${acme.order.hostname}"
port="${acme.order.port}" path="orders"
user="${acme.order.username}"
password="${acme.order.password}"
contentType="application/vnd.acme+xml" encoding="UTF-8">
<transformers>
<transformer ref="OrderMapToMicroformat" />
</transformers>
<response-transformers>
<message-properties-transformer>
<add-message-property key="OrderPlaced"
value="#[groovy:message.getStringProperty('http.status','ERR')=='201']" />
<add-message-property
key="OrderResourceLocation"
value="#[groovy:message.getStringProperty('Location','')]" />
</message-properties-transformer>
<object-to-string-transformer />
</response-transformers>
</http:outbound-endpoint>
<outbound-endpoint ref="OrderCreationResultQueue" />
</chaining-router>
</outbound>
</service>
更多精彩
赞助商链接