[ 
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

        

Reply via email to