我将创建一个 Java 对象并实现可调用对象。使用此方法更改有效负载。然后我将使用第二个数据库组件并在第二个查询中使用有效负载对象 (MEL)。
此对象将数据从数据库组件输出流转换为混合对象,该对象用于显示带有嵌入的子数据数组的 JSON。
https://github.com/dlwhitehurst/modusbox-orders/blob/master/src/main/java/org/dlw/transport/OrdersTransformSingleton.java
查看可调用方法的返回值,看看如何自己“转换”数据。
这是 mule 配置中的 sn-p 实例化所需的 Java 组件。
<spring:beans>
<spring:bean id="ordersTransform" name="OrdersTransformSingleton"
class="org.dlw.transport.OrdersTransformSingleton" scope="singleton">
</spring:bean>
<spring:bean id="jdbcDataSource" class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
<spring:property name="driverName" value="com.mysql.jdbc.Driver"/>
<spring:property name="url" value="${database.url}"/>
</spring:bean>
</spring:beans>
对象在流程中这样使用...
<flow name="get:/orders:api-config">
<set-payload value="[
 {
 "orderId": 1233,
 "placementDate": "2016-06-02",
 "customerName": "Sally Hansen",
 "orderItems":[
 {
 "orderItemId": 1323,
 "orderId": 438577,
 "itemId": 23058,
 "itemName": "Salt",
 "itemCount": 3,
 "qtyItemCost": "$2.76"
 },
 {
 "orderItemId": 1323,
 "orderId": 438577,
 "itemId": 23058,
 "itemName": "Pepper",
 "itemCount": 3,
 "qtyItemCost": "$8.79"
 }
 ] 
 },
 {
 "orderId": 1233,
 "placementDate": "2016-06-02",
 "customerName": "Billy Wilson",
 "orderItems":[
 {
 "orderItemId": 1323,
 "orderId": 438577,
 "itemId": 23058,
 "itemName": "Wheat Flour",
 "itemCount": 3,
 "qtyItemCost": "$10.12"
 },
 {
 "orderItemId": 1323,
 "orderId": 438577,
 "itemId": 23058,
 "itemName": "Tomato Paste",
 "itemCount": 3,
 "qtyItemCost": "$9.21"
 }
 ] 
 }
]" doc:name="Set Payload"/>
<db:select config-ref="MySQL_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[SELECT a.orderId, a.customerName, a.placementDate, b.orderItemId, b.itemId, c.itemName, b.itemCount, c.itemCost FROM modusbox.orders a, modusbox.orderitems b, modusbox.items c WHERE a.orderId = b.orderId AND b.itemId = c.itemId]]></db:parameterized-query>
</db:select>
<component doc:name="Java">
<spring-object bean="OrdersTransformSingleton" />
</component>
<json:object-to-json-transformer doc:name="Object to JSON"/>
<logger level="INFO" doc:name="Logger"/>
</flow>