2011-09-16 285 views
0

时,这一问题与前一个Apache的骆驼CXF空响应:Apache Camel multicast, exception and Aggregation strategy处理异常

我觉得问上一个问题,当我missunderstood问题。

我尝试处理我在路由中抛出的异常。

.filter(not(successResponsePredicate)) 
    .to("log:com.sdmo.Error?level="+LOG_LEVEL) 
    .transform(simple("Erreur lors de l'appel copyItem")) 
    .process(new ConvertCartResponseProcessor()) 
    .throwException(new Exception("copyItemError")) 
.end() 

唯一的例外是通过这个代码来处理:

onException(java.lang.Exception.class).handled(true).inOut("direct:thrownError"); 
from("direct:thrownError") 
    .to("log:com.sdmo.output?level="+LOG_LEVEL); 

我的路线是由CXF端点开始,但在异常处理途径实现的,身体回到自己的WS客户端是空的。

我对调试模式和日志进行了几次检查,以确保异常处理代码设置了响应,并且如果我通过简单类型替换正文(POJO类型),发送回复时出现解组错误。

最后一行的回复之前记录的展示身体是明确界定:

INFO: Exchange[ExchangePattern:InOut, BodyType:com.access_commerce.cameleonws.cart.AddXMLResponse, Body:[email protected]] 

我想这有什么不对我使用的InOut图案或类似的...

+0

尝试在onException子句中调用setBody(常量(“ERROR”))或变换(常量(“ERROR”)),而不是.inOut(...)。这至少起作用吗? –

+0

CXF端点处于POJO模式,如果我有这种转换,我得到一个编组错误:注意:Interceptor for {http://www.access-commerce.com/cameleonWS/cart/}CartService#{http: www.access-commerce.com/cameleonWS/cart/}addXML引发异常,现在展开为 org.apache.cxf.interceptor.Fault:编组错误:类java.io.ByteArrayInputStream及其任何超类都是已知的上下文。 – Franch

回答

0

降handles()方法调用。它可以防止渗透到CXF端点的异常。

+0

我不想将异常传播到cxf端点,我想封装它并以wsdl的响应格式返回错误 – Franch

+0

如果这就是您真正想要做的事情(wrap Exception(“copyItemError”))添加一个处理器在你的异常路径的末尾,包装到我认为是JAXB带注释的对象中。然后骆驼假设你想要返回该对象,并且始发端点将它转换为XML以返回。该过程(新的ConvertCartResponseProcessor())。throwException()看起来像一个反模式。如果响应处理器为您提供了要返回的bean,请移除throwException()。 –

+0

我已经尝试在异常路由上放置进程(新的ConvertCartResponseProcessor()),并且行为相同:空响应。使用throw可以中断当前的多播。 – Franch