java.lang.ClassCastException:org.apache.camel.builder.ValueBuilder无法强制转换为java.lang.String

时间:2013-07-08 14:18:37

标签: java apache-camel

我变得疯狂,因为我无法追踪为什么我的骆驼路线有这个例外:

java.lang.ClassCastException: org.apache.camel.builder.ValueBuilder
cannot be  cast to java.lang.String
你能告诉我一些它是什么意思吗?我的代码中没有明确的强制转换。

在看到(正确的)注释后,我添加:

  1. 我无法在几行代码中重现异常,因为在这种情况下我能够自己解决它
  2. 我知道什么是分类异常,但实际上我从未将valuebuilder分配给字符串变量或者转换字符串
  3. 我尝试调试和跟踪,但明天正在运行的同一段代码启动此异常
  4. 我已经阅读过骆驼文档,但可能我仍然不明白ValueBuilder是什么用于
  5. 你能建议我用eclipse调试器调试异常的更好方法吗?

    我终于可以添加WITH stacktrace:

    java.lang.ClassCastException
    org.apache.camel.builder.ValueBuilder cannot be cast to java.lang.String
    at org.apache.camel.component.cache.CacheProducer.process(CacheProducer.java:61)       
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.  process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)
    at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.DelegateAsyncProcessor. processNext(DelegateAsyncProcessor.java:99)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
    at org.apache.camel.management.InstrumentationProcessor. process(InstrumentationProcessor.java:72)
    

    谢谢, 马里奥

2 个答案:

答案 0 :(得分:3)

来自ClassCastException的API规范:

  

抛出以指示代码已尝试将对象强制转换为   它不是实例的子类。

因此,例如,当您尝试将org.apache.camel.builder.ValueBuilder分配给java.lang.String时,操作无法完成,因为java.lang.String不是org.apache.camel.builder.ValueBuilder的子类,因此抛出ClassCastException

答案 1 :(得分:0)

我找到了问题!

这是以前的代码(有效),取自官方的骆驼教程:

in.setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD));

这是正确的代码,不会产生异常:

in.setHeader(CacheConstants.CACHE_OPERATION, CacheConstants.CACHE_OPERATION_ADD);

constant()更改ValueBuilder中的String,导致异常。

我认为这是一个错误,因为camel缓存组件的行为已经改变。

马里奥