Hi, I just checked the code of XsltUriResolver code in the trunk, it should be resolved since Camel 2.11.x. You may need to consider to upgrade the Camel version of it.
-- Willem Jiang Red Hat, Inc. FuseSource is now part of Red Hat Web: http://www.fusesource.com | http://www.redhat.com Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English) http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) Twitter: willemjiang Weibo: 姜宁willem On Tuesday, July 16, 2013 at 8:53 PM, Cristiano Costantini wrote: > Hi all again, > > in the end I think I've detected an issue, I don't know ho to report it, I > don't even know if it is a Camel or ServiceMix/Karaf issue. > I report here what it is about and please help me pointing me to report it > the right way. > > The full problem is: > - If I deploy a route using beans.xml file, > - in a ServiceMix 4.5.1 running under windows 7 > - where I have an XSLT endpoint which point to a resource in the folder > "src/main/resources/subfolder" i.e.: <to uri="xslt://subfolder/file.xsl" /> > > the file "file.xsl" is not seen an the following error is throw: > > 2013-07-16 14:21:16,589 | ERROR | xtenderThread-12 | ContextLoaderListener > | 80 - org.springframework.osgi.extender - 1.2.1 | Application > context refresh failed > (OsgiBundleXmlApplicationContext(bundle=test-xslt-bundle, > config=osgibundle:/META-INF/spring/*.xml)) > org.apache.camel.RuntimeCamelException: > org.apache.camel.FailedToCreateRouteException: Failed to create route > cxfEntryRoute at: >>> Choice[[When[xpath{//*[local-name()='alert']} -> > [To[xslt://subfolder/file.xsl]]], > Otherwise[[To[log:messagesNotManaged?showAll=true], Stop]]] <<< in route: > Route[[From[cxf:bean:cxfEntry]] -> [Choice[[When[xpath{... because of > Failed to resolve endpoint: xslt://subfolder/file.xsl due to: > java.io.FileNotFoundException: Cannot find resource in classpath for URI: > subfolder\file.xsl > at > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1316)[96:org.apache.camel.camel-core:2.10.4] > [...] > Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create > route cxfEntryRoute at: >>> Choice[[When[xpath{//*[local-name()='alert']} > -> [To[xslt://subfolder/file.xsl]]], > Otherwise[[To[log:messagesNotManaged?showAll=true], Stop]]] <<< in route: > Route[[From[cxf:bean:cxfEntry]] -> [Choice[[When[xpath{... because of > Failed to resolve endpoint: xslt://subfolder/file.xsl due to: > java.io.FileNotFoundException: Cannot find resource in classpath for URI: > subfolder\file.xsl > at > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:879)[96:org.apache.camel.camel-core:2.10.4] > [...] > Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to > resolve endpoint: xslt://subfolder/file.xsl due to: > java.io.FileNotFoundException: Cannot find resource in classpath for URI: > subfolder\file.xsl > at > org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:479)[96:org.apache.camel.camel-core:2.10.4] > [...] > Caused by: javax.xml.transform.TransformerException: > java.io.FileNotFoundException: Cannot find resource in classpath for URI: > subfolder\file.xsl > at > org.apache.camel.builder.xml.XsltUriResolver.resolve(XsltUriResolver.java:83)[96:org.apache.camel.camel-core:2.10.4] > [...] > Caused by: java.io.FileNotFoundException: Cannot find resource in classpath > for URI: subfolder\file.xsl > at > org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream(ResourceHelper.java:106)[96:org.apache.camel.camel-core:2.10.4] > at > org.apache.camel.builder.xml.XsltUriResolver.resolve(XsltUriResolver.java:81)[96:org.apache.camel.camel-core:2.10.4] > [...] > > > > > Relevant clues: > - the same problem does not happen on linux > - if I don't use a "subfolder" i.e. <to uri="xslt://file.xsl" />, the route > works also on windows. > - the error is throw when installing the bundle > - the same problem is not present when running the route in a java > application, only when deploying to ServiceMix > - the same problem does not happen on the velocity component which has > similar way to resolve velocity templates resources (i.e. a route with <to > uri="velocity://subfolder/template.vm" /> works on windows). > > Additional Clue: > - if I use a bad resource name on velocity template, i see that velocity > does not change the slash to backslash i.e. error due to bad name of file > "subfolder/bad_resource_name.vm", > > 2013-07-16 14:42:46,567 | ERROR | ault-workqueue-2 | DefaultErrorHandler > | 96 - org.apache.camel.camel-core - 2.10.4 | Failed delivery > for (MessageId: ID-AOCC-WS2-50100-1373969104441-9-3 on ExchangeId: > ID-AOCC-WS2-50100-1373969104441-9-4). Exhausted after delivery attempt: 1 > caught: java.io.FileNotFoundException: Cannot find resource in classpath > for URI: subfolder/bad_resource_name.vm > java.io.FileNotFoundException: Cannot find resource in classpath for URI: > vm/bad_resource_name.vm > at > org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream(ResourceHelper.java:106)[96:org.apache.camel.camel-core:2.10.4] > at > org.apache.camel.component.ResourceEndpoint.loadResource(ResourceEndpoint.java:94)[96:org.apache.camel.camel-core:2.10.4] > at > org.apache.camel.component.ResourceEndpoint.getResourceAsInputStreamWithoutCache(ResourceEndpoint.java:83)[96:org.apache.camel.camel-core:2.10.4] > [...] > > Quick solution: > - (I will) put the xslt file resources directly under "src/main/resources" > so no use of slashes is required (but I can't follow the advice from > Andreas to use good pacakge names...) > > > Sorry, until I learn how to debug in Servicemix I can't investigate more > than this... > > Cristiano > > > > 2013/7/16 Andreas Gies <andr...@wayofquality.de > (mailto:andr...@wayofquality.de)> > > > Hi > > > > I have used that instruction in the past. By now I find it easier to > > configure the bundle plugin including a file "osgi.bnd" > > which lives in the bundle root directory alongside the pom file. > > > > The bundle-plugin would be configured as: > > > > <plugin> > > <groupId>org.apache.felix</groupId> > > <artifactId>maven-bundle-plugin</artifactId> > > <version>2.3.7</version> > > <extensions>true</extensions> > > <executions> > > <execution> > > <id>manifest</id> > > <phase>process-classes</phase> > > <goals> > > <goal>manifest</goal> > > </goals> > > </execution> > > </executions> > > <configuration> > > <supportedProjectTypes> > > <supportedProjectType>jar</supportedProjectType> > > <supportedProjectType>bundle</supportedProjectType> > > <supportedProjectType>war</supportedProjectType> > > </supportedProjectTypes> > > <instructions> > > <_include>-osgi.bnd</_include> > > </instructions> > > </configuration> > > </plugin> > > > > > > Note that this configuration also allows me to OSGIFY wars and jars if I > > need it. > > > > A typical osgi.bnd file would look like: > > > > Bundle-Version:\ > > ${project.version} > > > > Bundle-SymbolicName:\ > > ${bundle.symbolicName}; singleton:=true > > > > Export-Package: ${bundle.namespace} > > > > Import-Package: \ > > * > > > > Private-Package: \ > > ${bundle.namespace}.internal > > > > > > The variables ${bundle.namespace} and ${bundle.symbolicName} always > > resolve to my artifactId, which is in my bundles always > > ${project.groupId} + "." + uniqueidentifier. > > > > > > Having this kind of structure kind of gives you a natural order of > > packages and exports. > > > > Have fun > > Andreas > > > > > > > > > > > > > > > > Am 7/16/13(29) 9:48 AM schrieb "Cristiano Costantini" unter > > <cristiano.costant...@gmail.com (mailto:cristiano.costant...@gmail.com)>: > > > > > Thank you Andreas for the hints on how to layout the packages. > > > > > > (I'm just studying how to make it work and not yet started to refine the > > > code style, > > > I will surely take care of your recommendation.) > > > > > > Could you confirm right way to export a resource in OSGi is to use the > > > <Export-Package> instruction? > > > > > > Thank you, > > > > > > Cristiano > > > > > > > > > > > > > > > > > > 2013/7/16 Andreas Gies <andr...@wayofquality.de > > > (mailto:andr...@wayofquality.de)> > > > > > > > Elaborating on Claus' answer. The XSLT processor tries to resolve the > > > > XSLT > > > > "test/test.xsl". > > > > In OSGI words, it has to resolve a package "test" which contains the > > > > resource test.xsl. > > > > > > > > Though exporting the package "test" would probably work, I would > > > > strongly > > > > recommend to have > > > > better qualified package names to avoid name clashes in exports. > > > > Especially generically named > > > > packages like "test" or "sample" may very well lead into a world of pain > > > > (been there). > > > > > > > > Once you go about exporting packages, think what you want / need to > > > > expose > > > > to other bundles. > > > > I always keep my internal stuff in a package ending in ".internal" and > > > > have configured my builds > > > > not to export something that matches this pattern. > > > > > > > > Good luck > > > > Andreas > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Am 7/16/13(29) 9:29 AM schrieb "Claus Ibsen" unter > > > > <claus.ib...@gmail.com (mailto:claus.ib...@gmail.com) > > > > > : > > > > > > > > > > > > > > > > > If the xsl file is in the classpath of your own bundle, then you need > > > > > to export this package. Looks like you put it in a test package. > > > > > > > > > > On Tue, Jul 16, 2013 at 9:27 AM, Cristiano Costantini > > > > > <cristiano.costant...@gmail.com > > > > > (mailto:cristiano.costant...@gmail.com)> wrote: > > > > > > I must update my previous question: > > > > > > velocity in facts works fine, it is just xslt which causing issues! > > > > > > > > > > > > My test route is in fact: > > > > > > <route id="testRoute"> > > > > > > <from uri="timer://myTimer?period=5000" /> > > > > > > <setBody> > > > > > > <constant>Foo</constant> > > > > > > </setBody> > > > > > > <to uri="velocity://test/test.vm" /> > > > > > > <to uri="xslt://test/test.xsl" /> > > > > > > <to uri="log:foo" /> > > > > > > </route> > > > > > > > > > > > > the velocity: endpoint works, it is the xslt: which fail... > > > > > > I'm able to run it if I use the full path for just the XSL file: > > > > > > > > > > > > <route id="testRoute"> > > > > > > <from uri="timer://myTimer?period=5000" /> > > > > > > <setBody> > > > > > > <constant>Foo</constant> > > > > > > </setBody> > > > > > > <to uri="velocity://test/test.vm" /> > > > > > > <to > > > > > > > > > > > > > > > > > > > > > > > uri="xslt://file:///C:/dev/Sandbox/osgi-deploy-test/src/main/resources/ > > > > > > te > > > > > > st/test.xsl" > > > > > > /> > > > > > > <to uri="log:foo" /> > > > > > > </route> > > > > > > > > > > > > Anyone has any suggestion on how to address this problem? > > > > > > > > > > > > My only suspect is that when I run from eclipse a simple java class > > > > > > with a > > > > > > main(String[] args) method where I start a > > > > > > ConfigurableApplicationContext) > > > > > > where it works, and when I deploy on OSGi, I'm actually using two > > > > > > different > > > > > > XSLT processors, but I'm not sure how to debug it... > > > > > > > > > > > > thank you again, > > > > > > > > > > > > Cristiano > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2013/7/16 Cristiano Costantini <cristiano.costant...@gmail.com > > > > > > (mailto:cristiano.costant...@gmail.com)> > > > > > > > > > > > > > Hello, > > > > > > > > > > > > > > I just tried to deploy my camel routes into an OSGi environment > > > > > > > (ServiceMix). > > > > > > > > > > > > > > I've made a simple maven project with just resources (the > > > > > > > beans.xml, > > > > > > > .xsl > > > > > > > and .vm files), > > > > > > > however the XSLT and Velocity endpoints cannot find the associated > > > > > > > files ( > > > > > > > with exception "Failed to resolve endpoint: > > > > > > > xslt://testTransform.xsl > > > > > > > due > > > > > > > to: java.io.FileNotFoundException: Cannot find resource in > > > > > > > classpath > > > > > > > for > > > > > > > URI: testTransform.xsl"). > > > > > > > > > > > > > > If I run the route locally (in a simple java console application) > > > > > > > everything works fine. > > > > > > > > > > > > > > Anyone has experience on this type of deployment and can give me > > > > some > > > > > > > hint? > > > > > > > > > > > > > > Thank you, > > > > > > > Cristiano > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Claus Ibsen > > > > > ----------------- > > > > > Red Hat, Inc. > > > > > Email: cib...@redhat.com (mailto:cib...@redhat.com) > > > > > Twitter: davsclaus > > > > > Blog: http://davsclaus.com > > > > > Author of Camel in Action: http://www.manning.com/ibsen > > > > > > > > > >