Re: Camel resources URI into OSGi environment

2013-07-17 Thread Cristiano Costantini
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 willem.ji...@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 

Camel resources URI into OSGi environment

2013-07-16 Thread Cristiano Costantini
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

2013-07-16 Thread Cristiano Costantini
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
constantFoo/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
constantFoo/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 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



Re: Camel resources URI into OSGi environment

2013-07-16 Thread Claus Ibsen
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
 constantFoo/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
 constantFoo/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 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


Re: Camel resources URI into OSGi environment

2013-07-16 Thread Cristiano Costantini
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-Packagetest/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 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
  constantFoo/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
  constantFoo/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 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



Re: Camel resources URI into OSGi environment

2013-07-16 Thread Andreas Gies
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
 constantFoo/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
 constantFoo/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




Re: Camel resources URI into OSGi environment

2013-07-16 Thread Cristiano Costantini
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
  constantFoo/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
  constantFoo/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





Re: Camel resources URI into OSGi environment

2013-07-16 Thread Andreas Gies
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
cristiano.costant...@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-Packagetest/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 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
  constantFoo/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
  constantFoo/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





Re: Camel resources URI into OSGi environment

2013-07-16 Thread Andreas Gies
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
  groupIdorg.apache.felix/groupId
  artifactIdmaven-bundle-plugin/artifactId
  version2.3.7/version
  extensionstrue/extensions
  executions
execution
  idmanifest/id
  phaseprocess-classes/phase
  goals
  goalmanifest/goal
 /goals
/execution
  /executions
  configuration
supportedProjectTypes
supportedProjectTypejar/supportedProjectType
supportedProjectTypebundle/supportedProjectType
supportedProjectTypewar/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
  constantFoo/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
  constantFoo/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: 

Re: Camel resources URI into OSGi environment

2013-07-16 Thread Cristiano Costantini
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 

Re: Camel resources URI into OSGi environment

2013-07-16 Thread Willem jiang
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