Ich habe eine einfache Hello World Art Karaf-Bundle innerhalb Apache ServiceMix 6.1.0
mit Jackson's Afterburner Module läuft. Der Aktivator Code sieht wie folgt: -Jackson Afterburner-Modul schlägt in Apache Karaf 3.0.5
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 "";
}
}
Die pom.xml
wie unten aussieht: -
<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>
Das Java-Objekt, das ich json zu konvertieren Ich versuche ein einfaches Objekt wie folgt: -
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;
}
}
Aber immer, wenn ich versuche, das Bündel installiere ich die unten Ausnahme bin immer und das Bündel wird im Resolved
Zustand stecken: -
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
Alle erforderlichen Jackson Bündel in Karaf installiert sind: -
[email protected]>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
[email protected]>bundle:list | grep jackson
124 | Active | 50 | 2.6.2 | jackson-databind
Alles funktioniert gut, wenn ich die folgenden Zeile aus kommentieren: -
objectMapper.registerModule(new AfterburnerModule());
Kann mir jemand mitteilen, was mache ich falsch?
Der ganze Code, den ich in der github platziert habe.
Wenn ich hinzufügen ' com.fasterxml.jackson.module.afterburner *, *, Auflösung: = optional Import-Package> 'dann habe ich im generierten' MANIFEST' weder 'com.fasterxml.jackson.module.afterburner' noch das Unterpaket' ser' oder 'deser' im' Import-Package' gesehen. Aber wenn ich Spezifizieren Sie das Unterpaket explizit wie unten gezeigt.Ich bekam sowohl den 'ser' als auch' deser' im 'Import-Paket'' com.fasterxml.jackson.module.afterburner.ser, com.fasterxml.jackson.module.afterburner.deser, * ; resolution: = optional Import-Package> '. Kannst du mich wissen lassen, was der Grund dafür sein könnte? –
tuk
Der inspizierte Bytecode scheint diese Pakete nicht zu verwenden und wird daher nicht importiert. Dies tritt normalerweise auf, wenn Klassen dieser Pakete über Reflection oder dergleichen verwendet werden. In solchen Fällen ist es wichtig, diese Abhängigkeiten selbst hinzuzufügen. Die Tools können nur bis zu einem gewissen Grad helfen, am Ende müssen Sie die Abhängigkeiten definieren, die Sie kennen. –
Ich habe wieder ein Problem. Ich habe es hier http://karaf.922171.n3.nabble.com/Jackson-Module-Afterburner-not-working-in-Karaf-3-0-5-td4046536.html#a4046579 geschrieben. Kannst du mir bitte helfen, was könnte schief gehen? – tuk