【问题标题】:java.lang.ClassCastException: org.apache.camel.builder.ValueBuilder cannot be cast to java.lang.Stringjava.lang.ClassCastException: org.apache.camel.builder.ValueBuilder 不能转换为 java.lang.String
【发布时间】:2013-07-08 14:18:37
【问题描述】:

我快疯了,因为我无法追查为什么我的骆驼路线会出现这个异常:

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

你能告诉我这是什么意思吗?我的代码中没有明确的演员表。

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

  1. 我无法在几行代码中重现异常,因为在这种情况下我能够自己解决它
  2. 我知道什么是类转换异常,但实际上我从不将值构建器分配给字符串变量或转换字符串
  3. 我尝试调试和跟踪,但现在明天可以运行的同一段代码会引发此异常
  4. 我已阅读骆驼文档,但可能我仍然不明白 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)

谢谢, 马里奥

【问题讨论】:

  • 在此处添加SSCCE样式代码。
  • 请发布您的堆栈跟踪中提到的代码。堆栈跟踪本身也会有所帮助!
  • 您可以简单地将 org.apache.camel.builder.ValueBuilder 对象分配给 java.lang.String 类型的变量。
  • 我按要求添加了堆栈跟踪

标签: java apache-camel


【解决方案1】:

来自ClassCastException 的 API 规范:

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

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

【讨论】:

    【解决方案2】:

    我找到了问题!

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

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

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

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

    constant() 更改了导致异常的 ValueBuilder 中的字符串。

    我想这是一个错误,因为骆驼缓存组件的行为发生了变化。

    马里奥

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2021-04-30
      • 1970-01-01
      • 2015-02-13
      相关资源
      最近更新 更多