Exception below is cast when I use restlet Jackson in OSGi environment.
INFO: Unable to register the helper org.restlet.ext.jackson.JacksonConverter
java.lang.ClassNotFoundException: org.restlet.ext.jackson.JacksonConverter
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1710)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
at org.restlet.engine.internal.Activator$1.loadClass(Activator.java:97)
at org.restlet.engine.Engine.registerHelper(Engine.java:723)
at org.restlet.engine.Engine.registerHelpers(Engine.java:761)
at
org.restlet.engine.internal.Activator.registerHelper(Activator.java:93)
at
org.restlet.engine.internal.Activator.registerHelper(Activator.java:75)
at
org.restlet.engine.internal.Activator.registerHelpers(Activator.java:123)
at org.restlet.engine.internal.Activator.start(Activator.java:140)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:641)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle
org.restlet.ext.jackson [39]: Unable to resolve 39.0: missing
requirement [39.0] osgi.wiring.package;
(osgi.wiring.package=org.codehaus.jackson.impl)
at
org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1703)
... 14 more
After check, I found that package org.codehaus.jackson.impl in
org.codehaus.jackson.core.jar is private. The package is the same as the one
when I use restlet 2.0.6. Something changed in 2.0.11? After comparison with
restlet 2.0.11, I found that the code of org.restlet.ext.jackson.jar with
version 2.0.6 and 2.0.11 are the same. But why the manifest information in
2.0.11 is different from 2.0.6?
The difference is below:
Here is the import information in 2.0.11:
Import-Package: org.codehaus.jackson,org.codehaus.jackson.annotate,org
.codehaus.jackson.impl,org.codehaus.jackson.io,org.codehaus.jackson.m
ap,org.codehaus.jackson.map.annotate,org.codehaus.jackson.map.deser,o
rg.codehaus.jackson.map.ext,org.codehaus.jackson.map.introspect,org.c
odehaus.jackson.map.ser,org.codehaus.jackson.map.type,org.codehaus.ja
ckson.map.util,org.codehaus.jackson.node,org.codehaus.jackson.schema,
org.codehaus.jackson.sym,org.codehaus.jackson.type,org.codehaus.jacks
on.util,org.restlet,org.restlet.data,org.restlet.engine,org.restlet.e
ngine.converter,org.restlet.engine.resource,org.restlet.representatio
n,org.restlet.resource,org.restlet.service,org.restlet.util
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Require-Bundle: org.codehaus.jackson;bundle-version="1.4.0"
And the import information in 2.0.6 is :
Import-Package: org.codehaus.jackson,org.codehaus.jackson.map,org.rest
let,org.restlet.data,org.restlet.engine,org.restlet.engine.converter,
org.restlet.engine.resource,org.restlet.representation,org.restlet.re
source,org.restlet.service,org.restlet.util
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Besides the difference in import information, no require bundle is needed in
2.0.6.
For experiment, Then I edit the manifest file in 2.0.11 and change it into
2.0.6. Then the bundle works well.
Then here comes my questions:
1. Is there something more needed in org.restlet.ext.jackson.jar of verion
2.0.11 ? If not, is it a bug in org.restlet.ext.jackson.jar of verion 2.0.11?
2. Considering the license , is it legal if I change the manifest file?
Thanks a lot.
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2934357