骆驼应用程序设计

时间:2012-10-16 12:27:30

标签: apache-camel

亲爱的Camel用户!请告诉我

1)我的设计总体上有什么问题? (我确信这不是最佳的)

2)在Exchange正文中使用POJO的正确方法是什么?

My Grails网络应用程序需要通过一些中间步骤与远程Web服务进行交互:

  1. 创建请求xml
  2. 验证此xml
  3. 使用dsig
  4. 签名xml
  5. 将签名的xml发送给网络服务
  6. 验证回复签名
  7. 验证响应XML
  8. 流程响应
  9. 每个步骤都可能抛出异常,必须在页面上显示。像这样:“步骤 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”。

0 个答案:

没有答案