You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Freeman Fang (JIRA)" <ji...@apache.org> on 2018/02/22 06:12:00 UTC
[jira] [Commented] (CAMEL-12026) ensure camel bundle with spring
configuration works in OSGi with aries-blueprint-spring bridge
[ https://issues.apache.org/jira/browse/CAMEL-12026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16372453#comment-16372453 ]
Freeman Fang commented on CAMEL-12026:
--------------------------------------
Hi [~gnt],
Thanks for looking into this issue.
Please see the reproducer(say-more-spring.tar) I just attached, extract and build it.
Then with a clean Apache Karaf 4.1.3 kit, run commands from karaf console
{code}
repo-add camel 2.20.2
feature:install aries-blueprint-spring camel-spring camel-netty-http camel-jackson
bundle:install -s mvn:com.mycompany/say-more-spring/1.0.0-SNAPSHOT
{code}
wait a few seconds in the karaf.log we can see the exception like
{code}
Caused by: java.lang.IllegalArgumentException: Data format 'json-jackson' could not be created. Ensure that the data format is valid and the associated Camel component is present on the classpath
at org.apache.camel.model.DataFormatDefinition.getDataFormat(DataFormatDefinition.java:118) ~[?:?]
at org.apache.camel.model.DataFormatDefinition.getDataFormat(DataFormatDefinition.java:91) ~[?:?]
at org.apache.camel.model.UnmarshalDefinition.createProcessor(UnmarshalDefinition.java:189) ~[?:?]
at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:549) ~[?:?]
at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:510) ~[?:?]
at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:226) ~[?:?]
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1295) ~[?:?]
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:1148) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3727) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3441) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:208) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3249) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3245) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3268) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3245) ~[?:?]
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) ~[?:?]
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3168) ~[?:?]
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:133) ~[?:?]
... 26 more
{code}
IMO this is caused by the camel-spring has no OSGi support so that we cannot use OsgiComponentResolver, OsgiDataFormatResolver which are "OSGi aware".
Btw, my previous suggested fix is [1](this was reverted although it works, and we may need to use a separate module since it introduce OSGi dependency to camel-spring), which just add some crucial classes back from the removed camel-spring-dm module.
If we rewrite the reproducer with blueprint, then everything works great. we can send a request
{code}
curl -X POST -d "{ \"name\": \"Jack\" }" -H "Content-Type: application/json" http://localhost:10000/say/greeter
{code}
and get expected response
{code}
{"response":"SUCCESS","errors":["warn1","warn2"]}
{code}
Freeman
[1]https://github.com/apache/camel/commit/ba21445a2548946871ddd3ee2007c4659dbed223
> ensure camel bundle with spring configuration works in OSGi with aries-blueprint-spring bridge
> ----------------------------------------------------------------------------------------------
>
> Key: CAMEL-12026
> URL: https://issues.apache.org/jira/browse/CAMEL-12026
> Project: Camel
> Issue Type: Task
> Reporter: Freeman Fang
> Assignee: Guillaume Nodet
> Priority: Major
> Attachments: say-more-spring.tar
>
>
> the spring-dm won't work with spring 4.x, and there's a new blueprint-spring introduced in Aries to make the spring configured bundle still work with spring 4.x
> We need add back CamelContextFactoryBean.java and OsgiSpringCamelContext.java which was removed with camel-spring-dm module, as they are "OSGi context aware" and ensure we use OsgiComponentResolver, OsgiDataFormatResolver etc with the bundle in OSGi.
> We need remove spring-dm dependency from those classes.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)