Использование методов других классов в моей полезной нагрузке с Mule

Я создал приложение Mule, которое берет данные из некоторых каналов json и преобразует их с помощью специального преобразователя, который я сделал для создания класса.

У меня есть родительский класс Event и два подкласса, которые унаследованы от него: Event1 и Event2. Класс возврата моего пользовательского преобразователя (auto-transformer) — Event.

Я использую компонент управления потоком выбора, поэтому при достижении определенного значения данных для Event1 отправляется письмо, а при достижении определенного значения данных для Event2 отправляется другое письмо.

В Event1 я определил метод getThisData(), а в Event2 я определил getThatData().

Когда я использую #[payload.getThisData()], все работает, значение проверяется, и почта отправляется, если условие истинно.

Однако для ветки Event2 это не работает. Это дает мне ошибку. Он пытается найти getThatData() в классе Event1 и, очевидно, его не существует.

Как я могу это исправить? Как я могу получить значение из getThatData()?

Я использую MuleStudio.

<processor-chain>
    <auto-transformer returnClass="events.Event" name="JSONToEvent"></auto-transformer>
    <logger level="INFO" doc:name="Logger"/>
    <choice doc:name="Choice">
        <when expression="#[payload.getThisData()&gt;1200]">
            <twitter:update-status config-ref="Twitter" status="Value reached"/>
        </when>
        <when expression="#[payload.getThatData()&gt;11]">
            <twitter:update-status config-ref="Twitter" status="The other value reached"/>
        </when>
        <otherwise>
            <twitter:update-status config-ref="Twitter" status="#[payload]" doc:name="Normal"/>
        </otherwise>
    </choice>
</processor-chain>

person dabadaba    schedule 12.04.2014    source источник


Ответы (1)


Вы можете попробовать проверить класс полезной нагрузки в выражении:

#[payload instanceof events.Event2 &amp;&amp; payload.getThatData()&gt;11]
person Anton Kupias    schedule 12.04.2014
comment
Теперь он говорит org.mule.api.routing.RoutePathNotFoundException: невозможно обработать сообщение, потому что не найден маршрут, соответствующий какому-либо фильтру, и маршрут по умолчанию не определен. Не удалось направить событие через конечную точку: ChoiceRouter [flow-construct=flow1, start=true]. Полезная нагрузка сообщения имеет тип: Event1. - person dabadaba; 12.04.2014
comment
Эта ошибка означает, что у вас нет ветки otherwise. Вы его удалили или у вас где-то опечатка? - person Anton Kupias; 12.04.2014