атрибуты проверяются на нуль после использования Scatter-Gather - PullRequest
0 голосов
/ 28 июня 2019

У меня есть поток, который читает файл, распределяет по содержимому на 2 подпотока с помощью Scatter-Gather и перемещает файл после завершения в 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 для атрибута ввода / вывода, но это не удалось. Я мог бы представить, как положить его в переменную, но я думаю, что должно быть лучшее решение.

StackTrace:

Сообщение: «Вы вызвали функцию« ++ »с этими аргументы: 1: строка («Input / XML /») 2: пусто (null)

Но он ожидает одну из следующих комбинаций: (Массив, Массив) (Дата, Время) (Дата, LocalTime) (Дата, TimeZone) (LocalDateTime, TimeZone) (LocalTime, Date) (LocalTime, TimeZone) (Объект, Объект) (String, String) (Время, Дата) (TimeZone, LocalDateTime) (Часовой пояс, дата) (часовой пояс, местное время)

1 | «Input / XML /» ++ attribute.fileName
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (строка: 1, столбец: 1) в основном (строка: 1, столбец: 14) "оценочное выражение: Msgstr "" Input / XML / "++ attribute.fileName". Тип ошибки: MULE Экспрессия

1 Ответ

1 голос
/ 29 июня 2019

Нет, вы должны сохранить атрибут в переменную, если вы хотите сохранить его. Нет никаких гарантий, что что-то еще в потоках не переопределит это. Например, используя любые разъемы. Кроме того, метаданные предназначены для времени разработки, а не времени выполнения.

...