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
Priority: Minor
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