使用Scatter-Gather后,属性验证为null

时间:2019-06-28 08:55:22

标签: attributes anypoint-studio dataweave mulesoft

我有一个流,该流读取文件,并使用Scatter-Gather将内容分发到2个子流,并在完成时将文件移动到Output/XML或在失败时移动到Failure/XML
在这两种情况下,表达式attributes.fileName都会失败,因为属性为null。如何设置属性为持久性?

<flow name="validateFileContent" doc:id="58c241c9-7227-41a8-a67f-5cf4f52bb4bf" >
        <file:listener doc:name="Input changed" doc:id="2e6228a7-e153-489a-b6f6-468f67e76475" config-ref="File_Config" directory="Input/XML" watermarkMode="MODIFIED_TIMESTAMP">
            <scheduling-strategy >
                <fixed-frequency frequency="5" timeUnit="SECONDS" />
            </scheduling-strategy>
        </file:listener>
        <scatter-gather doc:name="Distribute workload" doc:id="15151949-c61d-4629-9fd4-0a4e16d62eec" >
            <route >
                <flow-ref doc:name="CategoryToType" doc:id="e5d39afa-3b2a-45ef-81c0-afce77a76aef" name="validateCategoryToType" />
            </route>
            <route >
                <flow-ref doc:name="CategoryToSector" doc:id="d3790ba2-b1ac-4511-b748-91adf255344a" name="validateCategoryToSector"/>
            </route>
        </scatter-gather>
        <file:move doc:name="MoveUponSuccess" doc:id="ee659c03-7af5-4a0e-93b0-edb69aefd3ae" sourcePath='#["Input/XML/" ++ attributes.fileName]' targetPath='#["Output/XML/" ++ now() as String{format: "yyyyMMdd_HHmmss"} ++ attributes.fileName]' config-ref="File_Config"/>
        <error-handler>
            <on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate" doc:id="16001c58-7609-42a6-9bfa-1cd756998f27" >
                <logger level="INFO" doc:name="Logger" doc:id="8ec2af18-3e45-4d15-a373-5e9af74723d7" message="#[error]"/>
                <file:move doc:name="MoveUponFailure" doc:id="53653598-1d44-4d9a-903c-e82fa61be842" config-ref="File_Config" sourcePath='#["Input/XML/" ++ attributes.fileName]' targetPath='#["Failure/XML/" ++ now() as String{format: "yyyyMMdd_HHmmss"} ++ attributes.fileName]' />
            </on-error-propagate>
        </error-handler>
    </flow>

我尝试为输入/输出属性设置Metadata,但失败。我可以想象将其放入var中,但是我认为必须有一个更好的解决方案。

堆栈跟踪:

  

消息:“您使用这些命令调用了函数'++'   参数:1:字符串(“ Input / XML /”)2:空(null)

     

但是它期望这些组合之一:(数组,数组)(日期,   时间)(日期,本地时间)(日期,时区)(LocalDateTime,   TimeZone)(LocalTime,Date)(LocalTime,TimeZone)(Object,   对象)(字符串,字符串)(时间,日期)(TimeZone,LocalDateTime)   (时区,日期)(时区,本地时间)

     

1 | “输入/ XML /” ++属性。fileName
  跟踪:在++处(行:1,列:   1)在主行(第1行,第14列)中计算表达式:   ““输入/ XML /” ++ attribute.fileName“。错误类型:   MULE:表情

1 个答案:

答案 0 :(得分:1)

否,要保留属性,必须将属性保存到变量。不能保证流程中的其他内容不会覆盖它。例如,使用任何连接器。 另外,元数据用于设计时间,而不是执行时间。