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>

> 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>:
>
> >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>
> >
> >> 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
> >> >:
> >>
> >> >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> 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>
> >> >>
> >> >>> 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
> >> >Twitter: davsclaus
> >> >Blog: http://davsclaus.com
> >> >Author of Camel in Action: http://www.manning.com/ibsen
> >>
> >>
> >>
>
>
>

Reply via email to