Nikolay Voskresenskiy created CAMEL-11599:
---------------------------------------------

             Summary: XPath feature with Saxon implementation broken when 
ServiceMix jaxp-api is present in the endorsed classpath
                 Key: CAMEL-11599
                 URL: https://issues.apache.org/jira/browse/CAMEL-11599
             Project: Camel
          Issue Type: Bug
          Components: camel-saxon
    Affects Versions: 2.18.4
            Reporter: Nikolay Voskresenskiy
            Priority: Minor


Due to https://issues.apache.org/jira/browse/SM-3452, 
org.apache.camel.builder.xml.XPathBuilder throws the following exception on any 
attempt to use the camel-xpath feature with Saxon enabled in a Karaf container 
(full distribution):

{code}
2017-07-25 17:16:06,137 | ERROR | lixDispatchQueue | FrameworkEvent ERROR - 
java.lang.IllegalAccessError: tried to access method 
javax.xml.xpath.XPathFactoryFinder.createInstance(Ljava/lang/String;)Ljavax/xml/xpath/XPathFactory;
 from class javax.xml.xpath.XPathFactory
        at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)[:2.7.0]
        at 
org.apache.camel.builder.xml.XPathBuilder.createXPathFactory(XPathBuilder.java:1218)
        at 
org.apache.camel.builder.xml.XPathBuilder.doStart(XPathBuilder.java:1173)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.processor.FilterProcessor.doStart(FilterProcessor.java:119)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
        at 
org.apache.camel.processor.ChoiceProcessor.doStart(ChoiceProcessor.java:202)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
        at 
org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:80)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.doStart(RedeliveryErrorHandler.java:1466)
        at 
org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:44)
        at 
org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:31)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
        at 
org.apache.camel.processor.interceptor.DefaultChannel.doStart(DefaultChannel.java:156)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:104)
        at 
org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:90)
        at 
org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:80)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at 
org.apache.camel.impl.RouteService.startChildService(RouteService.java:348)
        at org.apache.camel.impl.RouteService.doWarmUp(RouteService.java:191)
        at org.apache.camel.impl.RouteService.warmUp(RouteService.java:141)
        at 
org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3666)
        at 
org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3573)
        at 
org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3359)
        at 
org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3213)
        at 
org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:184)
        at 
org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3008)
        at 
org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3004)
        at 
org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3027)
        at 
org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3004)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2970)
        at 
org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:188)
        at 
org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:228)
        at 
org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:158)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:991)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:839)
        at 
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:546)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4557)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3549)
        at 
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
        at 
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:355)
        at 
org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:108)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)[:1.8.0_20]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_20]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_20]
        at java.lang.reflect.Method.invoke(Method.java:483)[:1.8.0_20]
        at 
org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299)
        at 
org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980)
        at 
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736)
        at 
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:848)
        at 
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:811)
        at 
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_20]
        at 
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
        at 
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:255)
        at 
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:186)
        at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:724)
        at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:411)
        at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:276)
        at 
org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:300)
        at 
org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:269)
        at 
org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:265)
        at 
org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:255)
        at 
org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
        at 
org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
        at 
org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
        at 
org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
        at 
org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
        at 
org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1179)
        at 
org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:731)
        at 
org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:486)
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4541)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2172)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1286)
        at 
org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:846)
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1176)
        at 
org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:1074)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_20]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_20]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_20]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_20]
{code}

Due to complexity of propagating the fix through the framework, it might be 
worth to update org/apache/camel/builder/xml/XPathBuilder.java:1218 to 
instantiate net.sf.saxon.xpath.XPathFactoryImpl directly, especially 
considering Saxon manual starting from version 9.7 explicitly says not to 
consider them a provider of javax.xml.xpath.XPathFactory 
(http://www.saxonica.com/html/documentation/xpath-api/jaxp-xpath/factory.html)



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to