You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2017/09/12 13:53:00 UTC

[jira] [Commented] (CAMEL-11599) XPath feature with Saxon implementation broken when ServiceMix jaxp-api is present in the endorsed classpath

    [ https://issues.apache.org/jira/browse/CAMEL-11599?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16162969#comment-16162969 ] 

Claus Ibsen commented on CAMEL-11599:
-------------------------------------

Yeah for future upgrades of Saxon we likely need a way of creating that xpath factory as they say on that website.

> 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)