首页 > 解决方案 > ClassCastException by (String) getIn().getBody

问题描述

我的 RouteBuilder 中有这条骆驼路线:

    @Override
    public void configure() {
            ...
                .log(LoggingLevel.DEBUG, "AfterHttp IN: ${in.headers} - ${in.body}").choice().when(new Predicate() {
                    @Override
                    public boolean matches(Exchange exchange) {
                        String body = (String) exchange.getIn().getBody();
                        return body.contains("output wished");
                    }
                }).to("file://out/wished").end();
    }

我不明白为什么 ClassCastException 发生在(String) exchange.getIn().getBody()

不幸的是,从日志中,我没有得到信息,getBody() 的对象来自哪个类。是。

Execution of JMS message listener failed. Caused by: [org.apache.camel.RuntimeCamelException - java.lang.ClassCastException]
org.apache.camel.RuntimeCamelException: java.lang.ClassCastException

只转换为 String 绝对是错误的。它在文档中说明:

Object getBody()
Returns the body of the message as a POJO

如果我只是在没有任何逻辑的情况下返回 true:

                    @Override
                    public boolean matches(Exchange exchange) {
                          return true;
                    }

,很好,路线按预期结束(将正文写入目录 file://out/wished)

有什么建议吗?

谢谢你,哈迪

标签: apache-camel

解决方案


利用

String body = exchange.getIn().getBody(String.class);

推荐阅读