2015-06-11 10 views
4

Mule потоков:Mule Rest обработка исключений

<jersey:resources doc:name="REST"> 
<component class="com.test.qb.rest.MapIIFContent"/> 
<jersey:exception-mapper class="com.test.qb.exception.IIFExceptionMapper" /> 
</jersey:resources> 
<catch-exception-strategy doc:name="Audit Exception" >  
    <set-variable variableName="status" value="Failure" doc:name="Status"/> 
    <flow-ref name="QB:audit" doc:name="audit"/> 
    <http:response-builder status="500" contentType="application/json" doc:name="Status Code"/> 
</catch-exception-strategy> 
<logger message=" ===Reached here====" level="INFO" doc:name="Logger"/> <!-- Line 10--> 

Java Rest компонент:

Rest Компонент:

try{ 
    String s =null; 
    s.toString();// throw nullpointer exception 
} catch (IIFException e) { 
    return Response.status(500).entity(e.getMessage()).type("Application/json").build(); 
} 
return Response.ok(res).build(); 

Когда я запускаю это, он идет, чтобы поймать блок в компоненте Java Rest с статус ошибки как 500. Но в потоках Mule я ожидаю, что поток должен достигнуть

«поймать-исключение-стратегии документ: имя =„Аудит Exception“>

блок, но он не достигает там, вместо этого он доходит до линии 10. Как справиться с этим?

+0

Странно, что у вас есть и ' exception-mapper' и 'catch-exception-strategy': не является ли ответ' 500', созданный в 'MapIIFContent'? Что произойдет, если вы удалите 'jersey: exception-mapper': работает ли' catch-exception-strategy'? Если нет, это означает, что «Джерси: ресурсы» исключения перехватываются Джерси и никогда не доходят до Мула. –

+0

@DavidDossot, после комментирования трикотажа: исключение-mapper, никаких изменений, тот же поток продолжается, и стратегия catch-exception не работает, т. Е. Проблема, исключение трикотажа не достигает мула. Как общаться с мулом из трикотажа? – bekur

ответ

2

Я сделал компонент остальное бросить проверил специальное исключение вместо возвращения статуса Rest Response:

try{ 
    String s =null; 
    s.toString(); 
} catch (IIFException e) { 
    throw new IIFException(e.toString(),e.getCause()); 
} 
return Response.ok(res).build(); 

И течет мое исключение, сделал это так:

<catch-exception-strategy doc:name="Audit Exception" > 
    <expression-component doc:name="Create error response"><![CDATA[#[payload = "{\"status\":\"error\", \"message\":\"" + exception.cause.message + "\"}"]]]></expression-component> 
    <http:response-builder status="500" contentType="application/json" doc:name="Status Code"/> 
</catch-exception-strategy> 
+0

Это похоже на путь, в основном компонент должен бросить исключение для стратегии исключения Мула для удара. – Sudarshan

Смежные вопросы