Hi Jean,
I am facing a similiar problem when I tried to use Afterburner from my toy
application to an actual code base. In the same code base in one place it
is working perfectly fine and in one place it is failing with the
error java.lang.ClassNotFoundException:
com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator.( I have
placed the full stack-trace towards the end of my email). The same code
base works perfectly fine when I run this as normal jar outside Karaf. I
have no issue in the MANIFEST.mf in the bundle. All the imports are added:-
Import-Package: com.fasterxml.jackson.core;resolut
ion:=optional;version="[2.7,3)",com.fasterxml.jackson.databind;resoluti
on:=optional;version="[2.7,3)",com.fasterxml.jackson.databind.annotatio
n;resolution:=optional;version="[2.7,3)",com.fasterxml.jackson.module.a
fterburner;resolution:=optional;version="[2.7,3)",org.json;reso
lution:=optional,org.osgi.service.blueprint;version="[1.0.0,2.0.0)";res
olution:=optional,com.fasterxml.jack
son.databind.ser;version="[2.7,3)",com.fasterxml.jackson.databind.deser
;version="[2.7,3)",com.fasterxml.jackson.databind.ser.std;version="[2.7
,3)",com.fasterxml.jackson.databind.deser.std;version="[2.7,3)",com.fas
terxml.jackson.module.afterburner.ser;version="[2.7,3)",com.fasterxml.j
ackson.module.afterburner.deser;version="[2.7,3)"
...
Even doing bundle:headers in Karaf I am seeing all the bundles correctly
imported
karaf@root>bundle:headers 286
basecomponent (286)
-------------------
Created-By = Apache Maven Bundle Plugin
Manifest-Version = 1.0
Bnd-LastModified = 1462969467812
Build-Jdk = 1.8.0_77
Built-By = debraj
Tool = Bnd-3.0.0.201509101326
Bundle-Blueprint =
OSGI-INF/blueprint/authenticationBeans.xml,OSGI-INF/blueprint/awsBeans.xml,OSGI-INF/blueprint/blueprint.xml,OSGI-INF/blueprint/camelContext.xml,OSGI-INF/blueprint/catalogBeans.xml,OSGI-INF/blueprint/erpBeans.xml,OSGI-INF/blueprint/healthCheckBeans.xml,OSGI-INF/blueprint/orderBeans.xml,OSGI-INF/blueprint/productBeans.xml,OSGI-INF/blueprint/vendorBeans.xml
Bundle-ManifestVersion = 2
Bundle-SymbolicName = basecomponent
Bundle-Version = 0.0.1
Bundle-Name = basecomponent
Require-Capability =
osgi.ee;filter:=(&(osgi.ee=JavaSE)(version=1.8))
Import-Package =
com.fasterxml.jackson.annotation;resolution:=optional;version="[2.7,3)",
com.fasterxml.jackson.core;resolution:=optional;version="[2.7,3)",
com.fasterxml.jackson.databind;resolution:=optional;version="[2.7,3)",
com.fasterxml.jackson.databind.annotation;resolution:=optional;version="[2.7,3)",
com.fasterxml.jackson.module.afterburner;resolution:=optional;version="[2.7,3)",
com.fasterxml.jackson.databind.ser;version="[2.7,3)",
com.fasterxml.jackson.databind.deser;version="[2.7,3)",
com.fasterxml.jackson.databind.ser.std;version="[2.7,3)",
com.fasterxml.jackson.databind.deser.std;version="[2.7,3)",
com.fasterxml.jackson.module.afterburner.ser;version="[2.7,3)",
com.fasterxml.jackson.module.afterburner.deser;version="[2.7,3)"
...
The full stack trace:-
OrderException-GetOrdersHTTPFailure
com.fasterxml.jackson.databind.JsonMappingException: Failed to load
class 'org.apache.camel.Message$Access4JacksonDeserializer98898f0f':
com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator
at [Source: {"data":{"total":2,"order":[],
"status":{"success":true}},"_metaData":{"urlParams":{}},"status":{"success":true,"errors":null,"httpStatusCode":200}};
line: 1, column: 1]
at
com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:290)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:444)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:948)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:446)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3908)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3803)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.jabong.orchestratorservice.basecomponent.http.JSONCamelHttpResponseHandler.marshallJSON(JSONCamelHttpResponseHandler.java:73)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.http.JSONCamelHttpResponseHandler.handleResponse(JSONCamelHttpResponseHandler.java:38)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.http.BaseCamelHTTPComponent.prepareResponse(BaseCamelHTTPComponent.java:133)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.http.BaseCamelHTTPComponent.call(BaseCamelHTTPComponent.java:88)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.node.HttpWFNode.executeRequest(HttpWFNode.java:130)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.node.HttpWFNode.executeWithRetry(HttpWFNode.java:118)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.node.HttpWFNode.executeWithRetry(HttpWFNode.java:49)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.node.HttpWFNode.execute(HttpWFNode.java:43)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.adapter.order.executor.GetOrdersWorkflowExecutor.execute(GetOrdersWorkflowExecutor.java:44)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.adapter.order.OrderHelper.getMarketplaceOrders(OrderHelper.java:53)[286:basecomponent:0.0.1]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_77]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_77]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_77]
at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_77]
at
org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:177)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:68)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:38)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.DelayProcessorSupport.process(DelayProcessorSupport.java:160)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:412)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:380)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:270)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:380)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.ProducerCache.send(ProducerCache.java:238)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:128)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:132)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:149)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.DefaultProducerTemplate.requestBody(DefaultProducerTemplate.java:301)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.impl.DefaultProducerTemplate.requestBody(DefaultProducerTemplate.java:331)[136:org.apache.camel.camel-core:2.16.1]
at
com.jabong.orchestratorservice.basecomponent.processor.AbstractProcessor.makeRequest(AbstractProcessor.java:47)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.processor.JSONRPCProcessor.processRequest(JSONRPCProcessor.java:167)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.processor.JSONRPCProcessor.processRequestAndSendResponse(JSONRPCProcessor.java:132)[286:basecomponent:0.0.1]
at
com.jabong.orchestratorservice.basecomponent.processor.JSONRPCProcessor.process(JSONRPCProcessor.java:72)[286:basecomponent:0.0.1]
at
org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)[136:org.apache.camel.camel-core:2.16.1]
at
org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:170)[250:org.apache.camel.camel-jetty-common:2.16.1]
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:668)[45:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0.0]
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.Server.handle(Server.java:370)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[50:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_77]
Caused by: java.lang.IllegalArgumentException: Failed to load class
'org.apache.camel.Message$Access4JacksonDeserializer98898f0f':
com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator
at
com.fasterxml.jackson.module.afterburner.util.MyClassLoader.loadAndResolve(MyClassLoader.java:100)
at
com.fasterxml.jackson.module.afterburner.deser.PropertyMutatorCollector.generateMutatorClass(PropertyMutatorCollector.java:204)[278:com.fasterxml.jackson.module.jackson-module-afterburner:2.7.4]
at
com.fasterxml.jackson.module.afterburner.deser.PropertyMutatorCollector.buildMutator(PropertyMutatorCollector.java:102)[278:com.fasterxml.jackson.module.jackson-module-afterburner:2.7.4]
at
com.fasterxml.jackson.module.afterburner.deser.DeserializerModifier.updateBuilder(DeserializerModifier.java:62)[278:com.fasterxml.jackson.module.jackson-module-afterburner:2.7.4]
at
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:239)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:406)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
at
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)[267:com.fasterxml.jackson.core.jackson-databind:2.7.4]
... 86 more
Caused by: java.lang.ClassNotFoundException:
com.fasterxml.jackson.module.afterburner.deser.BeanPropertyMutator
at java.lang.ClassLoader.findClass(ClassLoader.java:530)[:1.8.0_77]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)[:1.8.0_77]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_77]
at java.lang.ClassLoader.defineClass1(Native Method)[:1.8.0_77]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)[:1.8.0_77]
at java.lang.ClassLoader.defineClass(ClassLoader.java:642)[:1.8.0_77]
at
com.fasterxml.jackson.module.afterburner.util.MyClassLoader.loadAndResolve(MyClassLoader.java:94)
... 94 more
The code where it is working looks like something like below (and is called
first in the flow)
public static WFRequest fromJSON(String json, String targetClassName)
throws ClassNotFoundException, IOException {
WFRequest reqParam = null;
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new AfterburnerModule());
reqParam = (WFRequest) mapper.readValue(json,
Class.forName(targetClassName));
return reqParam;
}
The code where it is failing looks like below:-
@SuppressWarnings("unchecked")
private static <T extends BaseCamelHTTPComponentResponse> T
fromJSON(final JSONObject jsonObj,
String serviceResponseClass) throws ClassNotFoundException,
IOException {
LOG.info("Response: {}, Marshalling it to an object of {}",
jsonObj.toString(), serviceResponseClass);
ObjectMapper objectMapper = new ObjectMapper();
AfterburnerModule afterBurner = new AfterburnerModule();
afterBurner.setUseOptimizedBeanDeserializer(false);
objectMapper.registerModule(afterBurner);
return (T) objectMapper.readValue(jsonObj.toString(),
Class.forName(serviceResponseClass));
}
Can you help me what could be going wrong?
On Sun, May 8, 2016 at 2:22 PM, Jean-Baptiste Onofré <[email protected]>
wrote:
> When you use *, maven-bundle-plugin/bnd is checking the actual import in
> your byte code. Here, you "really" import
> com.fasterxml.jackson.module.afterburner, but the ser package is not in
> your byte code, but transitively to the afterburner package. That's why
> it's not imported by the wildcard (because not directly used in your code).
>
> Regards
> JB
>
> On 05/08/2016 09:40 AM, Debraj Manna wrote:
>
>> Thanks Jean. Updating the import as below in pom.xml solved the issue:-
>>
>>
>> <Import-Package>com.fasterxml.jackson.module.afterburner.ser;resolution:=optional,*</Import-Package>
>>
>>
>> Can you please let me know even though I specified * in the
>> Import-Package why com.fasterxml.jackson.module.afterburner.serwas not
>> getting imported even though the top level
>> packagecom.fasterxml.jackson.module.afterburnerwas getting imported?
>>
>>
>>
>>
>> On Sun, May 8, 2016 at 12:55 PM, Jean-Baptiste Onofré <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> It's not a Karaf issue ;)
>>
>> As you can see in bundle:headers, the package
>> com.fasterxml.jackson.module.afterburner.ser is not imported, so not
>> in the classloader: that's the issue.
>>
>> Just add com.fasterxml.jackson.module.afterburner.ser in the
>> Import-Package.
>>
>> Regards
>> JB
>>
>> On 05/08/2016 09:21 AM, Debraj Manna wrote:
>>
>> I updated to the latest Jackson:-
>>
>> |karaf@root>bundle:list | grep jackson 124 | Active | 50 | 2.6.2
>> |
>> jackson-databind 239 | Active | 80 | 2.7.4 | jackson-databind
>> karaf@root>bundle:list | grep Jackson 123 | Active | 50 | 2.6.2 |
>> Jackson-core 125 | Active | 50 | 2.6.2 | Jackson-annotations 237 |
>> Active | 80 | 2.7.4 | Jackson-core 238 | Active | 80 | 2.7.4 |
>> Jackson-annotations 240 | Active | 80 | 2.7.1 |
>> Jackson-module-Afterburner|
>>
>> The Hello World Bundle is active:-
>>
>> *karaf@root*>bundle:list | grep Hello
>>
>> 243 | Active | 80 | 0.0.1 |
>> HelloWorld
>>
>>
>> So bundle:headers is also showing correct wiring:-
>>
>> *karaf@root*>bundle:headers 243
>>
>>
>>
>> Hello World (243)
>>
>> -----------------
>>
>> Created-By = Apache Maven Bundle Plugin
>>
>> Manifest-Version = 1.0
>>
>> Bnd-LastModified = 1462691114227
>>
>> Build-Jdk = 1.8.0_77
>>
>> Built-By = debraj
>>
>> Tool = Bnd-2.1.0.20130426-122213
>>
>>
>> Bundle-ManifestVersion = 2
>>
>> Bundle-SymbolicName = world
>>
>> Bundle-Version = 0.0.1
>>
>> Bundle-Name = Hello World
>>
>> Bundle-Activator = com.hello.world.HelloWorldActivator
>>
>>
>> Export-Package =
>>
>> com.hello;version=0.0.1,
>>
>> com.hello.world;uses:=org.osgi.framework;version=0.0.1
>>
>> Import-Package =
>>
>>
>> com.fasterxml.jackson.databind;resolution:=optional;version="[2.7,3)",
>>
>> com.fasterxml.jackson.module.afterburner;
>>
>> resolution:=optional;
>>
>> version="[2.7,3)",
>>
>> org.osgi.framework;resolution:=optional;version="[1.6,2)"
>>
>>
>> But now getting the below error. It seems Karaf is not able to
>> load
>> classes at run time.
>>
>> |com.fasterxml.jackson.databind.JsonMappingException: Failed to
>> load
>> class
>> 'com.hello.world.JsonDataBlob$Access4JacksonDeserializerb9aaf44d':
>> com.fasterxml.jackson.module.afterburner.ser.BeanPropertyAccessor
>> at
>>
>> com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:312)
>> at
>>
>> com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1172)
>> at
>>
>> com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:490)
>> at
>>
>> com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:688)
>> at
>>
>> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:107)
>> at
>>
>> com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3631)
>> at
>>
>> com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2998)
>> at
>>
>> com.hello.world.HelloWorldActivator.getJsonDataAsString(HelloWorldActivator.java:26)
>> at
>>
>> com.hello.world.HelloWorldActivator.start(HelloWorldActivator.java:13)
>> at
>>
>> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
>> at
>> org.apache.felix.framework.Felix.activateBundle(Felix.java:2146)
>> at
>> org.apache.felix.framework.Felix.startBundle(Felix.java:2064) at
>> org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
>> at
>> org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
>> at
>>
>> org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:27)
>> at
>>
>> org.apache.karaf.bundle.command.BundlesCommandWithConfirmation.doExecute(BundlesCommandWithConfirmation.java:53)
>> at
>>
>> org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:50)
>> at
>>
>> org.apache.karaf.bundle.command.BundlesCommandWithConfirmation.doExecute(BundlesCommandWithConfirmation.java:41)
>> at
>>
>> org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
>> at
>>
>> org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
>> at
>>
>> org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
>> at Proxy836eebee_bd0c_424a_b0d9_7fc71158b4ca.execute(Unknown
>> Source) at
>> Proxy836eebee_bd0c_424a_b0d9_7fc71158b4ca.execute(Unknown Source)
>> at
>>
>> org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
>> at
>> org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
>> at
>>
>> org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
>> at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108) at
>> org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182) at
>> org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119) at
>>
>> org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
>> at
>>
>> org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
>> at
>>
>> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
>> at java.security.AccessController.doPrivileged(Native Method) at
>> org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)
>> at
>>
>> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)
>> Caused by: java.lang.IllegalArgumentException: Failed to load
>> class
>> 'com.hello.world.JsonDataBlob$Access4JacksonDeserializerb9aaf44d':
>> com.fasterxml.jackson.module.afterburner.ser.BeanPropertyAccessor
>> at
>>
>> com.fasterxml.jackson.module.afterburner.util.MyClassLoader.loadAndResolve(MyClassLoader.java:100)
>> at
>>
>> com.fasterxml.jackson.module.afterburner.ser.PropertyAccessorCollector.generateAccessorClass(PropertyAccessorCollector.java:171)
>> at
>>
>> com.fasterxml.jackson.module.afterburner.ser.PropertyAccessorCollector.findAccessor(PropertyAccessorCollector.java:97)
>> at
>>
>> com.fasterxml.jackson.module.afterburner.ser.SerializerModifier.changeProperties(SerializerModifier.java:63)
>> at
>>
>> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanSerializer(BeanSerializerFactory.java:401)
>> at
>>
>> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanSerializer(BeanSerializerFactory.java:271)
>> at
>>
>> com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:223)
>> at
>>
>> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:157)
>> at
>>
>> com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1215)
>> at
>>
>> com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1167)
>> ... 33 more Caused by: java.lang.ClassNotFoundException:
>> com.fasterxml.jackson.module.afterburner.ser.BeanPropertyAccessor
>> at
>> java.lang.ClassLoader.findClass(ClassLoader.java:530) at
>> java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
>> java.lang.ClassLoader.loadClass(ClassLoader.java:357) at
>> java.lang.ClassLoader.defineClass1(Native Method) at
>> java.lang.ClassLoader.defineClass(ClassLoader.java:763) at
>> java.lang.ClassLoader.defineClass(ClassLoader.java:642) at
>>
>> com.fasterxml.jackson.module.afterburner.util.MyClassLoader.loadAndResolve(MyClassLoader.java:94)
>> ... 42 more|
>>
>>
>> On Sun, May 8, 2016 at 1:10 AM, Jean-Baptiste Onofré
>> <[email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>> wrote:
>>
>> Can you check with bundle:headers if it's correctly wired ?
>>
>> Regards
>> JB
>>
>> On 05/07/2016 07:14 PM, Debraj Manna wrote:
>>
>> Below is the generated MANIFEST:-
>>
>> Manifest-Version: 1.0
>> Bnd-LastModified: 1462615570323
>> Build-Jdk: 1.8.0_77
>> Built-By: debraj
>> Bundle-Activator: com.hello.world.HelloWorldActivator
>> Bundle-ManifestVersion: 2
>> Bundle-Name: Hello World
>> Bundle-SymbolicName: world
>> Bundle-Version: 0.0.1
>> Created-By: Apache Maven Bundle Plugin
>> Export-Package:
>> com.hello;version="0.0.1",com.hello.world;uses:="org.osg
>> i.framework";version="0.0.1"
>> Import-Package:
>> com.fasterxml.jackson.databind;resolution:=optional;vers
>>
>>
>>
>> ion="[2.6,3)",com.fasterxml.jackson.module.afterburner;resolution:=opti
>>
>>
>>
>> onal;version="[2.7,3)",org.osgi.framework;resolution:=optional;version=
>> "[1.6,2)"
>> Tool: Bnd-2.1.0.20130426-122213
>>
>>
>> I have installed afterburner then only I installed my
>> Hello
>> World bundle.
>>
>>
>>
>>
>> On Sat, May 7, 2016 at 10:40 PM, Jean-Baptiste Onofré
>> <[email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>
>> <mailto:[email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>>> wrote:
>>
>> Hi,
>>
>> 1. Can you check that the generated MANIFEST
>> contains the
>> afterburner import ?
>> 2. If you install afterburner bundle after your
>> bundle, you
>> have to
>> refresh your bundle as it's an optional import
>>
>> Regards
>> JB
>>
>>
>> On 05/07/2016 05:27 PM, Debraj Manna wrote:
>>
>> Hi,
>>
>> I have a simple Hello World type Karaf Bundle.
>> The
>> activator
>> code looks
>> like below:-
>>
>> |public class HelloWorldActivator implements
>> BundleActivator {
>> @Override
>> public void start(BundleContext bundleContext)
>> throws
>> Exception {
>> System.out.println("STARTING DEMO: hello,
>> world\n");
>> System.out.println(getJsonDataAsString()); }
>> @Override
>> public void
>> stop(BundleContext bundleContext) throws
>> Exception {
>> System.out.println("STOPPING DEMO"); } private
>> String
>> getJsonDataAsString() { JsonDataBlob
>> jsonDataBlob = new
>> JsonDataBlob();
>> ObjectMapper objectMapper = new ObjectMapper();
>> objectMapper.registerModule(new
>> AfterburnerModule());
>> try { return
>> objectMapper.writeValueAsString(jsonDataBlob); }
>> catch(Exception
>> e) {
>> e.printStackTrace(); } return ""; } } |
>>
>> |pom.xml| looks like below:-
>>
>> |<project
>> xmlns="http://maven.apache.org/POM/4.0.0"
>>
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>
>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> <modelVersion>4.0.0</modelVersion>
>> <groupId>com.hello</groupId>
>> <artifactId>world</artifactId>
>> <version>0.0.1</version>
>> <packaging>bundle</packaging> <name>Hello
>> World</name>
>> <dependencies>
>> <!-- OSGi --> <dependency>
>> <groupId>org.osgi</groupId>
>> <artifactId>org.osgi.core</artifactId>
>> <version>4.3.1</version>
>> </dependency> <dependency>
>> <groupId>org.osgi</groupId>
>> <artifactId>org.osgi.compendium</artifactId>
>> <version>4.3.1</version>
>> </dependency> <dependency>
>> <groupId>org.json</groupId>
>> <artifactId>json</artifactId>
>> <version>20160212</version>
>> </dependency>
>> <dependency>
>> <groupId>com.fasterxml.jackson.core</groupId>
>> <artifactId>jackson-core</artifactId>
>> <version>2.6.2</version>
>> </dependency> <dependency>
>> <groupId>com.fasterxml.jackson.core</groupId>
>> <artifactId>jackson-annotations</artifactId>
>> <version>2.6.2</version>
>> </dependency> <dependency>
>> <groupId>com.fasterxml.jackson.core</groupId>
>> <artifactId>jackson-databind</artifactId>
>> <version>2.6.2</version>
>> </dependency> <dependency>
>> <groupId>com.fasterxml.jackson.module</groupId>
>>
>> <artifactId>jackson-module-afterburner</artifactId>
>> <version>2.7.1</version> </dependency>
>> </dependencies>
>> <build>
>> <sourceDirectory>src</sourceDirectory>
>> <plugins> <plugin>
>> <artifactId>maven-compiler-plugin</artifactId>
>> <version>3.3</version>
>> <configuration> <source>1.8</source>
>> <target>1.8</target> <excludes>
>> <exclude>**/com/hello/main/*</exclude>
>> </excludes>
>> </configuration>
>> </plugin> <plugin>
>> <groupId>org.apache.felix</groupId>
>> <artifactId>maven-bundle-plugin</artifactId>
>> <version>2.4.0</version>
>> <inherited>true</inherited>
>> <extensions>true</extensions>
>> <configuration> <instructions>
>>
>>
>> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
>>
>> <Bundle-Version>${project.version}</Bundle-Version>
>>
>>
>>
>> <Bundle-Activator>com.hello.world.HelloWorldActivator</Bundle-Activator>
>>
>> <Import-Package>*;resolution:=optional</Import-Package>
>> </instructions>
>> </configuration> </plugin> </plugins> </build>
>> </project> |
>>
>> The java object which I am trying to convert
>> to json is
>> a simple
>> object
>> as shown below:-
>>
>> |package com.hello.world; public class
>> JsonDataBlob {
>> private
>> String add1
>> = "JP Naagar"; private String add2 = "";
>> private int
>> shippartagent = 1;
>> public String getAdd1() { return add1; }
>> public void
>> setAdd1(String
>> add1) { this.add1 = add1; } public String
>> getAdd2() {
>> return add2; }
>> public void setAdd2(String add2) { this.add2 =
>> add2; }
>> public int
>> getShippartagent() { return shippartagent; }
>> public void
>> setShippartagent(int shippartagent) {
>> this.shippartagent =
>> shippartagent; } } |
>>
>> Whenever I am trying to install the bundle I
>> am getting
>> the below
>> exception:-
>>
>> |2016-05-07 15:36:48,986 | WARN |
>> x-6.1-2.0/deploy |
>> fileinstall
>> | 7 -
>> org.apache.felix.fileinstall - 3.5.0 | Error
>> while
>> starting bundle:
>>
>>
>>
>> file:/Users/debraj/Downloads/apache-servicemix-6.1-2.0/deploy/world-0.0.1.jar
>> org.osgi.framework.BundleException: Activator
>> start
>> error in bundle
>> world [239]. at
>>
>>
>>
>> org.apache.felix.framework.Felix.activateBundle(Felix.java:2196)[org.apache.felix.framework-4.2.1.jar:]
>> at
>>
>>
>>
>> org.apache.felix.framework.Felix.startBundle(Felix.java:2064)[org.apache.felix.framework-4.2.1.jar:]
>> at
>>
>>
>>
>> org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)[org.apache.felix.framework-4.2.1.jar:]
>> at
>>
>>
>>
>> org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1245)[7:org.apache.felix.fileinstall:3.5.0]
>> at
>>
>>
>>
>> org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1217)[7:org.apache.felix.fileinstall:3.5.0]
>> at
>>
>>
>>
>> org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:509)[7:org.apache.felix.fileinstall:3.5.0]
>> at
>>
>>
>>
>> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:358)[7:org.apache.felix.fileinstall:3.5.0]
>> at
>>
>>
>>
>> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:310)[7:org.apache.felix.fileinstall:3.5.0]
>> Caused by: java.lang.NoClassDefFoundError:
>>
>>
>> com/fasterxml/jackson/module/afterburner/AfterburnerModule at
>> java.lang.Class.getDeclaredConstructors0(Native
>> Method)[:1.8.0_77] at
>>
>>
>>
>> java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)[:1.8.0_77]
>> at
>>
>> java.lang.Class.getConstructor0(Class.java:3075)[:1.8.0_77] at
>>
>> java.lang.Class.newInstance(Class.java:412)[:1.8.0_77] at
>>
>>
>>
>> org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4336)
>> at
>>
>>
>> org.apache.felix.framework.Felix.activateBundle(Felix.java:2141)
>> ...
>> 7 more Caused by:
>> java.lang.ClassNotFoundException:
>>
>>
>> com.fasterxml.jackson.module.afterburner.AfterburnerModule not
>> found by
>> world [239] at
>>
>>
>>
>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)[org.apache.felix.framework-4.2.1.jar:]
>> at
>>
>>
>>
>> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)[org.apache.felix.framework-4.2.1.jar:]
>> at
>>
>>
>>
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
>> at
>>
>>
>> java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_77]
>> ...
>> 13 more |
>>
>> All the required Jackson bundles are installed
>> in Karaf:-
>>
>> |karaf@root>bundle:list | grep Jackson 123 |
>> Active |
>> 50 | 2.6.2 |
>> Jackson-core 125 | Active | 50 | 2.6.2 |
>> Jackson-annotations 238 |
>> Installed | 80 | 2.7.1 |
>> Jackson-module-Afterburner
>> karaf@root>bundle:list | grep jackson 124 |
>> Active | 50
>> | 2.6.2 |
>> jackson-databind |
>>
>> Everything works fine if I just comment out
>> the below
>> line:-
>>
>> |objectMapper.registerModule(new
>> AfterburnerModule()); |
>>
>> I have placed the required code in github
>>
>> <https://github.com/debraj-manna/afterburner-issue>
>>
>> Has anyone able to execute the Jackson's
>> Afterburner
>> module in
>> Karaf 3.0.5?
>>
>> Thanks,
>>
>> Debraj
>>
>>
>> --
>> Jean-Baptiste Onofré
>> [email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>
>> <mailto:[email protected]
>> <mailto:[email protected]> <mailto:[email protected]
>> <mailto:[email protected]>>>
>> http://blog.nanthrax.net
>> Talend - http://www.talend.com
>>
>>
>>
>> --
>> Jean-Baptiste Onofré
>> [email protected] <mailto:[email protected]>
>> <mailto:[email protected] <mailto:[email protected]>>
>> http://blog.nanthrax.net
>> Talend - http://www.talend.com
>>
>>
>>
>> --
>> Jean-Baptiste Onofré
>> [email protected] <mailto:[email protected]>
>> http://blog.nanthrax.net
>> Talend - http://www.talend.com
>>
>>
>>
> --
> Jean-Baptiste Onofré
> [email protected]
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>