Apache Camel - 异常 - 如何捕获异常

时间:2012-02-04 00:32:49

标签: apache-camel

我是apache camel的新手(我使用的是2.8.1版本)。我正在使用这个框架,我理解(我希望)像路线这样的概念。现在我有了这个路线定义

    try {
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // TODO Auto-generated method stub

                from("vm:internal").
                split().method(DefaultSplitLogic.class, "split").
                dynamicRouter(bean(router, "route"));
            }
        });
    }catch (DefaultSplitLogicException e) {
        // TODO: handle exception
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是DefaultSpliLogic.class

公共类DefaultSplitLogic {

public Object[] split(Object o) throws DefaultSplitLogicException{
    if(o instanceof Collection<?>){
        Collection c = (Collection) o;
        return c.toArray();
    }
    else {
        throw new DefaultSplitLogicException("Default Splitting Logic not correct");    
    }
}

}

这是DefaultSplitLogicException.class

public class DefaultSplitLogicException扩展Exception {

/**
 * 
 */
private static final long serialVersionUID = 1L;

public DefaultSplitLogicException(String msg) {
    // TODO Auto-generated constructor stub
    super(msg);
    System.err.println(msg);
}

public  DefaultSplitLogicException(Throwable cause) {
    super(cause);
}

}

我留下了路由器定义。

现在我想捕获我的异常(我确定我的异常被抛出)。

我正在将onException子句用于路由定义

    try {
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // TODO Auto-generated method stub

                onException(DefaultSplitLogicException.class).handled(false);

                from("vm:internal").
                split().method(DefaultSplitLogic.class, "split").
                dynamicRouter(bean(router, "route"));
            }
        });
    }catch (DefaultSplitLogicException e) {
        // TODO: handle exception
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

但我无法管理我的例外情况。我尝试使用不同的这个条款但没有成功。为什么? 谢谢大家

1 个答案:

答案 0 :(得分:1)

我想我找到了答案。它应该是2.8.1的错误。版本,修复为2.8.2 +

http://camel.465427.n5.nabble.com/Cannot-handle-Exception-thrown-from-Splitter-Expression-td3286043.html