2013-07-08 62 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

相關問題