You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Cristiano Costantini <cr...@gmail.com> on 2013/07/16 08:24:44 UTC

Camel resources URI into OSGi environment

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

Re: Camel resources URI into OSGi environment

Posted by Cristiano Costantini <cr...@gmail.com>.
Thank you Willem!

I'm stick to the camel version in ServiceMix (until I have time to try just
Camel + Karaf) which is using 2.10.4 now and moving to 2.10.6 I think in
next revision,
but it is good to know it is fixed!

Regards,
Cristiano



2013/7/17 Willem jiang <wi...@gmail.com>

> 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 <andreas@wayofquality.de (mailto:
> andreas@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.costantini@gmail.com (mailto:cristiano.costantini@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 <andreas@wayofquality.de (mailto:
> andreas@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.ibsen@gmail.com (mailto:claus.ibsen@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.costantini@gmail.com (mailto:
> cristiano.costantini@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.costantini@gmail.com(mailto:
> cristiano.costantini@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: cibsen@redhat.com (mailto:cibsen@redhat.com)
> > > > > > Twitter: davsclaus
> > > > > > Blog: http://davsclaus.com
> > > > > > Author of Camel in Action: http://www.manning.com/ibsen
> > > > >
> > > >
> > >
> >
>
>
>
>

Re: Camel resources URI into OSGi environment

Posted by Willem jiang <wi...@gmail.com>.
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 <andreas@wayofquality.de (mailto:andreas@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.costantini@gmail.com (mailto:cristiano.costantini@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 <andreas@wayofquality.de (mailto:andreas@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.ibsen@gmail.com (mailto:claus.ibsen@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.costantini@gmail.com (mailto:cristiano.costantini@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.costantini@gmail.com (mailto:cristiano.costantini@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: cibsen@redhat.com (mailto:cibsen@redhat.com)
> > > > > Twitter: davsclaus
> > > > > Blog: http://davsclaus.com
> > > > > Author of Camel in Action: http://www.manning.com/ibsen
> > > >  
> > >  
> >  
>  




Re: Camel resources URI into OSGi environment

Posted by Cristiano Costantini <cr...@gmail.com>.
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 <an...@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
> <cr...@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 <an...@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.ibsen@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
> >> ><cr...@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 <cr...@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: cibsen@redhat.com
> >> >Twitter: davsclaus
> >> >Blog: http://davsclaus.com
> >> >Author of Camel in Action: http://www.manning.com/ibsen
> >>
> >>
> >>
>
>
>

Re: Camel resources URI into OSGi environment

Posted by Andreas Gies <an...@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
<cr...@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 <an...@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.ibsen@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
>> ><cr...@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 <cr...@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: cibsen@redhat.com
>> >Twitter: davsclaus
>> >Blog: http://davsclaus.com
>> >Author of Camel in Action: http://www.manning.com/ibsen
>>
>>
>>



Re: Camel resources URI into OSGi environment

Posted by Cristiano Costantini <cr...@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 <an...@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.ibsen@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
> ><cr...@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 <cr...@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: cibsen@redhat.com
> >Twitter: davsclaus
> >Blog: http://davsclaus.com
> >Author of Camel in Action: http://www.manning.com/ibsen
>
>
>

Re: Camel resources URI into OSGi environment

Posted by Andreas Gies <an...@wayofquality.de>.
Depending on how you start your OSGi container, you can always add the
configuration for remote debugging to your launcher script.
For my own development I have written a small wrapper around Pax Exam that
uses a container.properties file to set the JVM's runtime
paramaters (incl. debugging). For inspiration you can have a look at

https://github.com/atooni/de.woq.osgi.java/blob/master/de.woq.osgi.java.lau
ncher/src/main/java/de/woq/osgi/java/container/Main.java

For me that works very well and I use pax-runner composites to keep my
container profiles around.

Best regards 
Andreas




Am 7/16/13(29) 9:41 AM schrieb "Cristiano Costantini" unter
<cr...@gmail.com>:

>Hi Claus and thank you,
>
>the XSL file is on the "src/main/resources/test" folder, and in the same
>folder there is the velocity template.
>
>I've tried to add <Export-Package>test</Export-Package> to maven bundle
>plugin but nothing changed.
>Is this the correct way to export it?
>
>also it's weird the velocity template on the same folder is found without
>exporting explicitly the package, I expect I would have the same issue
>with
>it.
>
>The exception is caused on class ResourceHelper  ==>
>
>Caused by: java.io.FileNotFoundException: Cannot find resource in
>classpath
>for URI: vm\test.xsl
>        at
>org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream
>(ResourceHelper.java:106)
>        at
>org.apache.camel.builder.xml.XsltUriResolver.resolve(XsltUriResolver.java:
>81)
>
>I will try to check the code of ResourceHelper but I don't know how to
>debug when using OSGI (yet).
>
>thank you,
>
>Cristiano
>
>
>
>
>
>2013/7/16 Claus Ibsen <cl...@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
>> <cr...@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 <cr...@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: cibsen@redhat.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>



Re: Camel resources URI into OSGi environment

Posted by Cristiano Costantini <cr...@gmail.com>.
Hi Claus and thank you,

the XSL file is on the "src/main/resources/test" folder, and in the same
folder there is the velocity template.

I've tried to add <Export-Package>test</Export-Package> to maven bundle
plugin but nothing changed.
Is this the correct way to export it?

also it's weird the velocity template on the same folder is found without
exporting explicitly the package, I expect I would have the same issue with
it.

The exception is caused on class ResourceHelper  ==>

Caused by: java.io.FileNotFoundException: Cannot find resource in classpath
for URI: vm\test.xsl
        at
org.apache.camel.util.ResourceHelper.resolveMandatoryResourceAsInputStream(ResourceHelper.java:106)
        at
org.apache.camel.builder.xml.XsltUriResolver.resolve(XsltUriResolver.java:81)

I will try to check the code of ResourceHelper but I don't know how to
debug when using OSGI (yet).

thank you,

Cristiano





2013/7/16 Claus Ibsen <cl...@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
> <cr...@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/test/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 <cr...@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: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
>

Re: Camel resources URI into OSGi environment

Posted by Andreas Gies <an...@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 <cl...@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
><cr...@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 <cr...@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: cibsen@redhat.com
>Twitter: davsclaus
>Blog: http://davsclaus.com
>Author of Camel in Action: http://www.manning.com/ibsen



Re: Camel resources URI into OSGi environment

Posted by Claus Ibsen <cl...@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
<cr...@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/test/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 <cr...@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: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Re: Camel resources URI into OSGi environment

Posted by Cristiano Costantini <cr...@gmail.com>.
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/test/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 <cr...@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
>