2013-07-08 64 views
0

我越来越疯狂了,因为我无法追查为什么我的骆驼路线中有这个异常:java.lang.ClassCastException:org.apache.camel.builder.ValueBuilder不能转换为java.lang.String

java.lang.ClassCastException: org.apache.camel.builder.ValueBuilder 
cannot be cast to java.lang.String 

您能否给我提示一下这是什么意思?我的代码中没有明确的强制转换。

看到你的(正确的)注释后,我补充一下:

  1. 我无法重现例外的几行代码,因为在这种情况下,我能够解决它在我自己的
  2. 我知道是什么一个classcast异常,但INFACT我从来没有valuebuilder分配给一个字符串变量或铸造字符串
  3. 我试着调试和跟踪,但同一段代码,现在工作明天启动此异常
  4. 我看过骆驼文档,但可能我仍然没有注意tand什么是ValueBuilder

你可以建议我一个更好的方法来调试eclipse调试器的异常吗?

我终于可以添加异常,并堆栈跟踪:

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) 

感谢, 马里奥

+0

在此处添加[SSCCE](http://sscce.org/)样式代码。 – MockerTim

+0

请发布您的堆栈跟踪中提到的代码。 stacktrace本身也会有帮助! – desperateCoder

+1

您可以简单地将org.apache.camel.builder.ValueBuilder对象分配给java.lang.String类型的变量。 – MockerTim

回答

3

从API规格为ClassCastException

抛出,表明代码已经尝试将一个对象投射到它不是实例的 子类。

因此,举例来说,当你尝试指派org.apache.camel.builder.ValueBuilderjava.lang.String,操作无法完成,因为java.lang.String不是org.apache.camel.builder.ValueBuilder一个子类,因此一个ClassCastException被抛出。

0

我发现问题了!

这是以前的代码(即工作),从官方的骆驼教程采取:

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

这是正确的代码产生也不例外:

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

常数()改变字符串在一个造成异常的ValueBuilder中。

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

Mario

相关问题