0

我们有一个连接两个基于 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”元素的文件名?

4

1 回答 1

2

您可以使用 file: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" />
于 2013-04-03T15:00:09.527 回答