The validator component in Apache Camel cannot load XSD files from the classpath, when using OSGi blueprint. It works with Spring-dm. One of the reason of that is because the validtor component uses some Spring code.
This has bee fixed in the upcoming Apache Camel 2.8.0 release. So it supports both spring-dm and blueprint. You can use the file scheme to load the XSD from the file system. That works with blueprint. On Mon, Jul 11, 2011 at 10:16 PM, jstandard <[email protected]> wrote: > Hello, > > I'm trying to create the route below in SM (Fuse ESB version 4.4.0). The > schema I'm trying to validate against is at the top level of my bundle when > deployed. It seems camel can't find the xsd file, but I'm unsure of how to > access it. > > I've seen some posts that mention using pax-url, but I'm not sure this is > necessary. Perhaps I'm missing something from the bundle manifest? I'd > like to use relative paths if at all possible. > > Thanks, > John > > > Code... > > package com.fusesource.camel; > > import org.apache.camel.ValidationException; > import org.apache.camel.builder.RouteBuilder; > > public class ValidationRouter extends RouteBuilder { > > public void configure() throws Exception { > from("jms:camel.jms.in") > .to("log:showAll?level=info") > .doTry() > .to("validator:hello.xsd") > .to("jms:camel.jms.out") > .doCatch(ValidationException.class) > .to("jms:camel.jms.error") > .end(); > } > > } > > Exception... > > org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to > intialize bean camel-4 > at > org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:724)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:198)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:137)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:718)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:499)[223:org.apache.camel.camel-blueprint:2.7.1.fuse-00-27] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:495)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:314)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:227)[10:org.apache.aries.blueprint:0.3.1] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)[:1.6.0_26] > at > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_26] > at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_26] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)[:1.6.0_26] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)[:1.6.0_26] > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_26] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_26] > at java.lang.Thread.run(Thread.java:662)[:1.6.0_26] > Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create > route route2 at: >>> DoTry[[To[validator:hello.xsd], To[jms:camel.jms.out], > DoCatch[ [class org.apache.camel.ValidationException] -> > [To[jms:camel.jms.error]]]]] <<< in route: Route[[From[jms:camel.jms.in]] -> > [To[log:showAll?level=info... because of Failed to resolve endpoint: > validator://hello.xsd due to: class path resource [hello.xsd] cannot be > resolved to URL because it does not exist > at > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:818) > at > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:165) > at > org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:708) > at > org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1650) > at > org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1439) > at > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1338) > at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67) > at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54) > at > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1316) > at > org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:78) > at > org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:73) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method)[:1.6.0_26] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_26] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_26] > at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_26] > at > org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824)[10:org.apache.aries.blueprint:0.3.1] > at > org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:636)[10:org.apache.aries.blueprint:0.3.1] > ... 18 more > Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to > resolve endpoint: validator://hello.xsd due to: class path resource > [hello.xsd] cannot be resolved to URL because it does not exist > at > org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:451) > at > org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:47) > at > org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:180) > at > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:110) > at > org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:116) > at > org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:61) > at > org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:55) > at > org.apache.camel.model.ProcessorDefinition.createOutputsProcessor(ProcessorDefinition.java:391) > at > org.apache.camel.model.TryDefinition.createProcessor(TryDefinition.java:78) > at > org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:433) > at > org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:181) > at > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:815) > ... 35 more > Caused by: java.io.FileNotFoundException: class path resource [hello.xsd] > cannot be resolved to URL because it does not exist > at > org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:179) > at > org.apache.camel.component.validator.SpringValidator.createSchemaSource(SpringValidator.java:47) > at > org.apache.camel.processor.validation.ValidatingProcessor.getSchemaSource(ValidatingProcessor.java:129) > at > org.apache.camel.processor.validation.ValidatingProcessor.createSchema(ValidatingProcessor.java:217) > at > org.apache.camel.processor.validation.ValidatingProcessor.loadSchema(ValidatingProcessor.java:102) > at > org.apache.camel.component.validator.ValidatorComponent.createEndpoint(ValidatorComponent.java:45) > at > org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:75) > at > org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:433) > ... 46 more > > -- > View this message in context: > http://servicemix.396122.n5.nabble.com/Failed-to-resolve-endpoint-URL-because-it-does-not-exist-tp4576334p4576334.html > Sent from the ServiceMix - User mailing list archive at Nabble.com. > -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
