Mule xml文件根据内容重命名

时间:2013-04-03 11:15:27

标签: xml mule

我们有一个连接两个基于JMS的端点的Mule(v3.1.2)的工作实现。正在传递XML消息,两者之间没有任何问题。

我们现在必须添加一个额外的文件端点作为其中一个队列的并行目标。添加文件端点有效,消息在文件系统上按预期显示。

是否可以根据XML有效负载的内容设置文件名?目前,正在使用名称(例如)b8ede5db-9b7a-11e2-9d10-cd8a155d0975.dat生成文件,这些文件没有特别意义。

对于包含以下内容的文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Acknowledgement UploadDate="Tue Apr 02 05:05:01 EDT 2013" Uploaded="0" Rejected="1" Received="1">
    <Trades Uploaded="0" Rejected="1" Received="1">
        <Trade>
            <ExtRef>1</ExtRef>
            <TradeId>0</TradeId>
            <Status>Rejected</Status>
            <Action>NEW</Action>
            <Error>
                <Message>ERROR-TYPE: 'InvalidData'; ITEM: 'CP'; MESSAGE: 'Invalid CP'; VALUE: 'BLAH BLAH'</Message>
            </Error>            
        </Trade>
    </Trades>
</Acknowledgement>

是否可以使用基于“ExtRef”元素的文件名?

1 个答案:

答案 0 :(得分:2)

您可以使用文件:outbound-endpoint上的 outputPattern 属性来定义命名文件的模式。然后,您可以使用xpath表达式从XML中提取值以命名文件。

例如,根据您的XML,以下配置将在文件系统上创建名为 1.dat 的文件:

此xpath表达式语法应与3.1.2一起使用。

<file:outbound-endpoint path="c:/temp" outputPattern="#[string:#[xpath:/Acknowledgement/Trades/Trade/ExtRef].dat]" responseTimeout="10000" />