我正在尝试将传入的xml邮件拆分为两条消息,并希望在两个不同的端点上发送。就像我的信息是:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<CMMHeader>
<MessageTimeStamp>2014-11-13T16:32:58.</MessageTimeStamp>
<MessageId></MessageId>
<ComponentId>GLBooking</ComponentId>
<From>test</From> <To>GLBookingQueue</To>
<CorrelationId></CorrelationId>
<ProcessId></ProcessId>
<EventId></EventId>
<Domain>Finance</Domain>
</CMMHeader>
<tns:GLBooking>
<cdm:SubLedger >Payroll </cdm:SubLedger>
<cdm:Identifier>10004 </cdm:Identifier>
<cdm:CreatedBy>test</cdm:CreatedBy>
<cdm:CompanyCodeTo>3010</cdm:CompanyCodeTo>
<cdm:PostingDate>20141009</cdm:PostingDate>
<cdm:CreationDate>20140901</cdm:CreationDate>
<cdm:GLBookingLine>
<cdm:LineNumber>1</cdm:LineNumber>
<cdm:AccountNumber>0000133200</cdm:AccountNumber>
<cdm:Description> </cdm:Description>
<cdm:TaxCode> </cdm:TaxCode>
<cdm:CostCenter> </cdm:CostCenter>
<cdm:Currency>EUR</cdm:Currency>
<cdm:Amount>00000840213</cdm:Amount>
<cdm:DebetCredit>C</cdm:DebetCredit>
<cdm:BaseAmount>00000000000</cdm:BaseAmount>
</cdm:GLBookingLine>
<cdm:GLBookingLine>
<cdm:LineNumber>2</cdm:LineNumber>
<cdm:AccountNumber>0000133205</cdm:AccountNumber>
<cdm:Description> </cdm:Description>
<cdm:TaxCode> </cdm:TaxCode>
<cdm:CostCenter> </cdm:CostCenter>
<cdm:Currency>EUR</cdm:Currency>
<cdm:Amount>00000213120</cdm:Amount>
<cdm:DebetCredit>C</cdm:DebetCredit>
<cdm:BaseAmount>00000000000</cdm:BaseAmount>
</cdm:GLBookingLine>
</tns:GLBooking>
</GLBookingMessage>
</soapenv:Body>
</soapenv:Envelope>
我想将此消息拆分为两个消息。
<CMMHeader>
<MessageTimeStamp>2014-11-13T16:32:58.</MessageTimeStamp>
<MessageId></MessageId>
<ComponentId>GLBookingFileAdapter</ComponentId>
<From>test</From> <To>GLBookingQueue</To>
<CorrelationId></CorrelationId>
<ProcessId></ProcessId>
<EventId></EventId>
<Domain>Finance</Domain>
</CMMHeader>
和
<GLBookingMessage>
<tns:GLBooking>
<cdm:SubLedger >Payroll </cdm:SubLedger>
<cdm:Identifier>10004 </cdm:Identifier>
<cdm:CreatedBy>test</cdm:CreatedBy>
<cdm:CompanyCodeTo>3010</cdm:CompanyCodeTo>
<cdm:PostingDate>20141009</cdm:PostingDate>
<cdm:CreationDate>20140901</cdm:CreationDate>
<cdm:GLBookingLine>
<cdm:LineNumber>1</cdm:LineNumber>
<cdm:AccountNumber>0000133200</cdm:AccountNumber>
<cdm:Description> </cdm:Description>
<cdm:TaxCode> </cdm:TaxCode>
<cdm:CostCenter> </cdm:CostCenter>
<cdm:Currency>EUR</cdm:Currency>
<cdm:Amount>00000840213</cdm:Amount>
<cdm:DebetCredit>C</cdm:DebetCredit>
<cdm:BaseAmount>00000000000</cdm:BaseAmount>
</cdm:GLBookingLine>
<cdm:GLBookingLine>
<cdm:LineNumber>2</cdm:LineNumber>
<cdm:AccountNumber>0000133205</cdm:AccountNumber>
<cdm:Description> </cdm:Description>
<cdm:TaxCode> </cdm:TaxCode>
<cdm:CostCenter> </cdm:CostCenter>
<cdm:Currency>EUR</cdm:Currency>
<cdm:Amount>00000213120</cdm:Amount>
<cdm:DebetCredit>C</cdm:DebetCredit>
<cdm:BaseAmount>00000000000</cdm:BaseAmount>
</cdm:GLBookingLine>
</tns:GLBooking>
</GLBookingMessage>
请帮帮我。这将是一个很大的好处。
答案 0 :(得分:1)
在你的inSequence中,克隆消息
在每个目标中,根据需要转换消息并将新消息发送到相应的端点
使用第一个目标中的payloadFactory(仅限CMMHeader的消息)和第二个中的javascript(没有CMMHeader的消息)的示例:
<clone>
<target>
<sequence>
<payloadFactory>
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>$1</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg expression="//CMMHeader"/>
</args>
</payloadFactory>
<log level="full"/>
</sequence>
</target>
<target>
<sequence>
<script language="js">
mc.getEnvelope().getBody().getFirstElement().getFirstElement().detach();
</script>
<log level="full"/>
</sequence>
</target>
</clone>
将'log'替换为'send'mediator
您可以使用XSLT应用转换