Axiom Causes java.lang.LinkageError Running Under OSGi/Servicemix/Equinox
-------------------------------------------------------------------------
Key: AXIOM-355
URL: https://issues.apache.org/jira/browse/AXIOM-355
Project: Axiom
Issue Type: Bug
Affects Versions: 1.2.10
Environment: Apache Servicemix 4.3 (Fuse distribution), Apache ODE,
Equinox
Reporter: Kurt Westerfeld
When using Apache ODE under Apache Servicemix, Fuse distribution, which uses
Equinox as a OSGi container, the Apache ODE code throws a classloader exception
(see below....java.lang.LinkageError) when trying to use the
javax.xml.stream.util package. The error seems to be related to a partial OSGi
"Import-Package" decleration provided by Apache Axiom. To fix, I adjusted the
OSGi manifest, and added:
javax.xml.stream.events,javax.xml.stream.util
Around/alongside the javax.xml.stream import package statement. This hack was
not something I would recommend normal users to have to do--it just illustrates
the OSGi packaging problem Axiom has.
What I think is going on here is that Axiom loads parts of its classes with the
OSGi loader when running under Servicemix, which provides the javax.xml.stream
package from a supplied package (Stax API), and then the boot loader provides
other parts. These two class domains cannot be intermingled.
Please simply add these two packages listed above to an explicitly declared
Import-Package to the maven compile for Axiom. This will fix this nicely.
Simply add all three to the maven-bundle-plugin:
javax.xml.stream,
javax.xml.stream.events,
javax.xml.stream.util
A workaround for this issue can be found at the bottom of this web page, on
project Apache ODE: http://ode.apache.org/smx4-osgi-deployment.html. Note
the workaround in this case causes the javax.xml.stream to always be loaded
from one place, and the OSGi manifest tweaks on Import-Package I suggest above
do the same thing (but don't require the user to change the configuration of
the container).
Here is the stacktrace for the error I am receiving:
Caused by: java.lang.LinkageError: loader constraint violation: when resolving
method
"javax.xml.stream.util.StreamReaderDelegate.<init>(Ljavax/xml/stream/XMLStreamReader;)V"
the class loader (instance of
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the current class,
org/apache/axiom/om/impl/builder/SafeXMLStreamReader, and the class loader
(instance of <bootloader>) for resolved class,
javax/xml/stream/util/StreamReaderDelegate, have different Class objects for
the type javax/xml/stream/XMLStreamReader used in the signature
at
org.apache.axiom.om.impl.builder.SafeXMLStreamReader.<init>(SafeXMLStreamReader.java:62)
at
org.apache.axiom.om.impl.builder.StAXBuilder.initParser(StAXBuilder.java:151)
at
org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:128)
at
org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:160)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.<init>(StAXOMBuilder.java:130)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.<init>(StAXOMBuilder.java:146)
at org.apache.ode.il.DynamicService.convertToOM(DynamicService.java:159)
at org.apache.ode.il.DynamicService.invoke(DynamicService.java:78)
at
org.apache.ode.jbi.DynamicMessageExchangeProcessor.invoke(DynamicMessageExchangeProcessor.java:61)
at
org.apache.ode.jbi.BaseMessageExchangeProcessor.onJbiMessageExchange(BaseMessageExchangeProcessor.java:83)
... 8 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]