[
https://issues.apache.org/jira/browse/CAMEL-4780?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13170162#comment-13170162
]
Willem Jiang commented on CAMEL-4780:
-------------------------------------
Added a FAQ entry[1] for it.
[1]https://cwiki.apache.org/confluence/display/CAMEL/How+to+define+a+static+camel+converter+method+in+Scala
> ObjectHelper can not access a member of class
> com.db.fi.camel.scala.XmlToScalaNode$ with modifiers "private"
> ------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-4780
> URL: https://issues.apache.org/jira/browse/CAMEL-4780
> Project: Camel
> Issue Type: Bug
> Components: camel-core, camel-scala
> Affects Versions: 2.8.3
> Environment: Java 1.6, Scala 2.9.1, Camel 2.8.3
> Reporter: Craig McDaniel
> Assignee: Willem Jiang
> Priority: Minor
> Attachments: XmlToScalaNode.scala
>
>
> The ObjectHelper is choking on a TypeConverter written in Scala. Two classes
> are compiled by Scala for singleton objects: XmlToScalaNode and
> XmlToScalaNode$
> Here is the TypeConverter code:
> {quote}
> import scala.xml.XML
> import scala.xml.Elem
> import org.apache.camel.Converter
> import org.apache.camel.converter.jaxp.XmlConverter
> import org.w3c.dom.Node
> import org.w3c.dom.Element
> @Converter object XmlToScalaNode {
>
> //val converter = new XmlConverter()
>
> @Converter
> def convert(xml: String) = XML.loadString(xml)
>
> @Converter
> def convert(elem: Node): Elem = convert(new XmlConverter().toString(elem,
> null))
>
> @Converter
> def convert(elem: Element): Elem = convert(new
> XmlConverter().toString(elem, null))
> }
> {quote}
> The root cause appears to be:
> {quote}Caused by: java.lang.IllegalAccessException: Class
> org.apache.camel.util.ObjectHelper can not access a member of class
> com.db.fi.camel.scala.XmlToScalaNode$ with modifiers "private"{quote}
> This was working just fine with camel 2.7.3. As a workaround, I had to use
> the full class name for XmlToScalaNode in my TypeConverter file in META-INF.
> Using just the package name caused the error. My guess is that the annotation
> is existing on both classes and some change in ObjectHelper is now more
> strict with the XmlToScalaNode$ class.
> Here is the full stack trace:
> {quote}Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.704
> sec <<< FAILURE!
> testSplitConversion(com.db.fi.camel.XpathSplitterTest) Time elapsed: 0.691
> sec <<< ERROR!
> org.apache.camel.CamelExecutionException: Exception occurred during execution
> on the exchange: Exchange[Message: <b>bar</b>]
> at
> org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1180)
> at
> org.apache.camel.builder.ExpressionBuilder$33.evaluate(ExpressionBuilder.java:814)
> at
> org.apache.camel.impl.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)
> at
> org.apache.camel.component.bean.MethodInfo$2.evaluate(MethodInfo.java:371)
> at
> org.apache.camel.component.bean.MethodInfo.createMethodInvocation(MethodInfo.java:204)
> at
> org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:204)
> at
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:151)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:162)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at org.apache.camel.processor.interceptor.Debug$1.process(Debug.java:50)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)
> at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:306)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:116)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:79)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:139)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:106)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:572)
> at
> org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:505)
> at
> org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:218)
> at org.apache.camel.processor.Splitter.process(Splitter.java:96)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:162)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at org.apache.camel.processor.interceptor.Debug$1.process(Debug.java:50)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)
> at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)
> at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:306)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:111)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> at
> org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:61)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:139)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:106)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:104)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
> at
> org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63)
> at
> org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:351)
> at
> org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:323)
> at
> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:222)
> at
> org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:323)
> at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:168)
> at
> org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:110)
> at
> org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:123)
> at
> org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:130)
> at
> com.db.fi.camel.XpathSplitterTest.testSplitConversion(XpathSplitterTest.scala:30)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
> at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> at
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
> at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
> at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
> at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
> at
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
> Caused by: org.apache.camel.InvalidPayloadException: No body available of
> type: scala.xml.Elem but has value: [b: null] of type:
> com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl on: Message:
> <b>bar</b>. Caused by: No type converter available to convert from type:
> com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl to the required
> type: scala.xml.Elem with value [b: null]. Exchange[Message: <b>bar</b>].
> Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type
> converter available to convert from type:
> com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl to the required
> type: scala.xml.Elem with value [b: null]]
> at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:102)
> at
> org.apache.camel.builder.ExpressionBuilder$33.evaluate(ExpressionBuilder.java:812)
> ... 94 more
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> converter available to convert from type:
> com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl to the required
> type: scala.xml.Elem with value [b: null]
> at
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:140)
> at
> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:100)
> ... 95 more
> Caused by: org.apache.camel.RuntimeCamelException:
> java.lang.IllegalAccessException: Class org.apache.camel.util.ObjectHelper
> can not access a member of class com.db.fi.camel.scala.XmlToScalaNode$ with
> modifiers "private"
> at
> org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1066)
> at
> org.apache.camel.util.ReflectionInjector.newInstance(ReflectionInjector.java:32)
> at
> org.apache.camel.impl.converter.CachingInjector.createInstance(CachingInjector.java:44)
> at
> org.apache.camel.impl.converter.CachingInjector.newInstance(CachingInjector.java:38)
> at
> org.apache.camel.impl.converter.InstanceMethodTypeConverter.convertTo(InstanceMethodTypeConverter.java:58)
> at
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:182)
> at
> org.apache.camel.impl.converter.LazyLoadingTypeConverter.doConvertTo(LazyLoadingTypeConverter.java:47)
> at
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:138)
> ... 96 more
> Caused by: java.lang.IllegalAccessException: Class
> org.apache.camel.util.ObjectHelper can not access a member of class
> com.db.fi.camel.scala.XmlToScalaNode$ with modifiers "private"
> at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
> at java.lang.Class.newInstance0(Class.java:349)
> at java.lang.Class.newInstance(Class.java:308)
> at
> org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1062)
> ... 103 more{quote}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira