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é <j...@nanthrax.net
<mailto:j...@nanthrax.net>> 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é
<j...@nanthrax.net <mailto:j...@nanthrax.net>
<mailto:j...@nanthrax.net <mailto:j...@nanthrax.net>>> 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é
<j...@nanthrax.net <mailto:j...@nanthrax.net>
<mailto:j...@nanthrax.net <mailto:j...@nanthrax.net>>
<mailto:j...@nanthrax.net <mailto:j...@nanthrax.net>
<mailto:j...@nanthrax.net <mailto:j...@nanthrax.net>>>> 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é
jbono...@apache.org <mailto:jbono...@apache.org>
<mailto:jbono...@apache.org <mailto:jbono...@apache.org>>
<mailto:jbono...@apache.org
<mailto:jbono...@apache.org> <mailto:jbono...@apache.org
<mailto:jbono...@apache.org>>>
http://blog.nanthrax.net
Talend - http://www.talend.com
--
Jean-Baptiste Onofré
jbono...@apache.org <mailto:jbono...@apache.org>
<mailto:jbono...@apache.org <mailto:jbono...@apache.org>>
http://blog.nanthrax.net
Talend - http://www.talend.com
--
Jean-Baptiste Onofré
jbono...@apache.org <mailto:jbono...@apache.org>
http://blog.nanthrax.net
Talend - http://www.talend.com
--
Jean-Baptiste Onofré
jbono...@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com