2013-10-14 6 views
1

Я новичок в mule, пожалуйста, помогите мне в этой логике. На самом деле в моем потоке у меня есть процессор сообщений с сообщениями, выражение, которое не удовлетворяет, пойдет по умолчанию по выбору. После этого у меня есть ссылка на поток. Я не хочу, чтобы сообщение передавалось по умолчанию (выбор) должен быть заполнен ссылкой на поток. Вместо этого он должен перейти к выбору стратегии исключения, которую я настроил в этом потоке. Так что мне нужно бросить какое-то исключение по умолчанию. На самом деле, у меня очень большой поток, я сделал его простым для понимания. Найдите в xml config.Как удалить исключение вручную в Mule ESB без использования кода Java

 <flow name="Choice" doc:name="Choice"> 
    <file:inbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath1" responseTimeout="10000" doc:name="File"/> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <choice doc:name="Choice"> 
     <when expression="#[xpath('fn:local-name(/root/*[2])')=='book']"> 
      <file:outbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath2" responseTimeout="10000" doc:name="File"/> 
     </when> 
     <otherwise> 
      <file:outbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath3" responseTimeout="10000" doc:name="File"/> 
     </otherwise> 
    </choice> 
    <flow-ref name="SampleService" doc:name="Flow Reference"/> 
    <catch-exception-strategy doc:name="Catch Exception Strategy"> 
     <logger message="*****#[exception]****" level="INFO" doc:name="Logger"/> 
    </catch-exception-strategy> 
</flow> 
<flow name="SampleService" doc:name="SampleService"> 
    <file:inbound-endpoint path="C:\Users\Star\Desktop\Mule\FilePath4" responseTimeout="10000" doc:name="File"/> 
</flow> 

Просьба предложить мне любой стандартный способ бросить исключение в Mule.I также пытался сохраняя

  <test:component throwException="true"/> 

но бросает исключение, как - «Приставка„тест“для элемента„тест: компонент“ не связан ».

ответ

4

Чтобы использовать test:component, вам необходимо объявить пространство имен test, как это было сделано для всех других пространств имен, используемых Mule. Это говорит о том, что вы не хотите использовать элементы test в своем производственном коде.

Один из вариантов заключается в использовании null-component, который всегда выдает исключение, когда он получает сообщение, но это не дает вам контроля за выброшенным исключением.

Другой альтернативой является выброс любого исключения из компонента Groovy.

Имейте в виду, что исключения обернуты инфраструктурой Mule: вам нужно будет использовать ExceptionUtils, чтобы выкопать в стеке и найти основную причину.

+0

Используется groovy компонент со сценарием в этой ссылке, которую вы предложили: http://stackoverflow.com/questions/18689573/how-do-i-force-an-exception-in-mule/18691490#18691490. Оно работает. Спасибо. – star

1

Вы также можете использовать компонент Validation, если вы не хотите писать код. Просто создайте новый «Истинный» валидатор и установите выражение в значение # [false]. На странице настройки установите свою ошибку и сообщение, которое вы хотите вернуть, я использовал org.mule.module.apikit.exception.NotFoundException, но вы также можете использовать поиск. Взял меня навсегда, чтобы понять это.