Mule中的XML映射 [英] XML Mapping in Mule

查看:132
本文介绍了Mule中的XML映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML消息,我从队列中挑选出来,我需要更新XML消息,我从数据库表上的Select语句中获取的值。

I am having an XML message that I pick out from a queue , I need to update the the XML message with the values I get back from a Select statement on a database table.

所以,最初我把XML有效负载保存到一个单独的变量。然后我发出数据库调用,将值保存在局部变量&然后重置有效载荷变量。

So initially I save the XML payload to a separate variable. I then issue the database call , save the values in local variables & then reset the payload variable.

 //Save Payload
 <set-variable variableName="tempPayload" value="#[message.payload]" doc:name="Variable"/>

  //Database Operation     
        <jdbc-ee:outbound-endpoint exchange-pattern="request-response"  queryTimeout="-1" connector-ref="Database" doc:name="GetInformation" queryKey="Select Data"> 
            <jdbc-ee:query key="Select Data" value="SELECT address, city, zip,state, country, phone, email,org  FROM Details  WHERE id = "100" />

        </jdbc-ee:outbound-endpoint>  

        <set-variable doc:name="address1" value="#[message.payload[0].address]" variableName="address1"></set-variable> 
        <set-variable doc:name="city" value="#[message.payload[0].city]" variableName="city"></set-variable> 
        <set-variable doc:name="zip" value="#[message.payload[0].zip
]" variableName="zip"></set-variable>
        <set-variable doc:name="state" value="#[message.payload[0].state]" variableName="state"></set-variable>
        <set-variable doc:name="country" value="#[message.payload[0].country]" variableName="country"></set-variable>
        <set-variable doc:name="phone" value="#[message.payload[0].phone]" variableName="phone"></set-variable>
        <set-variable doc:name="email" value="#[message.payload[0].email]" variableName="email"></set-variable>
        <set-variable doc:name="org" value="#[message.payload[0].org]" variableName="org"></set-variable>

        //Reset Payload

        <set-payload value="#[tempPayload]" doc:name="Set Payload"/>

格式:

<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="">
   <TransactionId>376721</TransactionId>
   <TransactionDateTime>2014-01-30T00:00:00</TransactionDateTime>

   <Parties>
      <Party>
         <PartyType>abcd</PartyType>
         <PartyCode></PartyCode>
         <FirstName></FirstName>
         <LastName></LastName>
         <CompanyName></CompanyName>
         <Address1></Address1>
         <CityName></CityName>
         <StateOrProvinceCode></StateOrProvinceCode>
         <PostalCode></PostalCode>
         <CountryCode></CountryCode>
         <PhoneNumber></PhoneNumber>
         <EmailAddress></EmailAddress>
      </Party>
      <Party>
         <PartyType>adfa</PartyType>
         <FirstName></FirstName>
         <Address1></Address1>
         <Address2></Address2>
         <CityName></CityName>
         <StateOrProvinceCode></StateOrProvinceCode>
         <PostalCode></PostalCode>
         <CountryCode></CountryCode>
         <EmailAddress></EmailAddress>
      </Party>
      <Party>
         <PartyType>XXXXXXX</PartyType>
         <Address/>
         <City/>
         <Zip/>
         <State/>
         <Country/>
         <Phone/>
         <Email/>
         <Org/>
      </Party>
      <Party>

      </Party>
   </Parties>
   <Items>
      <Item>

      </Item>
   </Items>
</Order>
</code>

我想设置从特定方类型XXXXXXX然后进一步发送消息进行处理。

I want to set the values retrieved from the database in the specific party type 'XXXXXXX' & then send the message further for processing.

这是最好的方法是什么?

What is the best way of achieving this?

推荐答案

使用XmlSlurper的Groovy脚本组件应该:

Groovy Scripting Component with XmlSlurper should do it:

//parse
records = new XmlSlurper(false,false).parseText(payload)
//find Party with type XXXXXXXX
party = records.Parties.Party.find { e -> e.PartyType.text().equals('XXXXXXX') }
//set data
party.Zip.replaceBody(flowVars['zip'])
party.City.replaceBody(flowVars['city'])
//rebuild the xml
import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder
streamingMarkupBuilder=new StreamingMarkupBuilder()
result = XmlUtil.serialize(streamingMarkupBuilder.bind{mkp.yield records})

这篇关于Mule中的XML映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆