亲爱的Camel用户!请告诉我
1)我的设计总体上有什么问题? (我确信这不是最佳的)
2)在Exchange正文中使用POJO的正确方法是什么?
My Grails网络应用程序需要通过一些中间步骤与远程Web服务进行交互:
每个步骤都可能抛出异常,必须在页面上显示。像这样:“步骤 StepName 发生错误,错误消息:消息”。
所以我猜我的首选模式是“Request-Reply”。
我正在尝试使用一组处理器组装一个camel路由。每个处理器都包含在.doTry()中,就像这样。
from("direct:sendServiceCatalog")
.doTry()
.process(new Processor() {
@Override
public void process(Exchange arg0) throws Exception {
System.out.println("PROCESSING");
throw new RuntimeException("Nice try");
}
})
.to("mock:result")
.doCatch(Exception.class)
.process(
new ExceptionStageDetectorProcessor(
SendServiceCatalogStage.FORM_XML))
.to("mock:catch")
.end();
ExceptionStageDetectorProcessor.java类非常简单:
public class ExceptionStageDetectorProcessor implements Processor {
public ExceptionStageDetectorProcessor(SendServiceCatalogStage stage) {
this.stage = stage;
}
public SendServiceCatalogStage getStage() {
return stage;
}
private SendServiceCatalogStage stage;
@Override
public void process(Exchange exchange) throws Exception {
Throwable caughtException = (Throwable) exchange
.getProperty(Exchange.EXCEPTION_CAUGHT);
exchange.getOut().setBody(new ProcessError(stage, caughtException));
}
}
它几乎奏效了! :)
问题是无法使用新的主体 ProcessError ,当发生异常时,返回对象是错误字符串,而不是ProcessError对象。如果我尝试设置一个简单的字符串.setBody(“FOO”)返回对象完全是“FOO”。