2012-04-06 7 views
2

Ich versuche axis2 (v. 1.5.1) und seine Abhängigkeiten in einem osgi-Bundle mit dem maven-bundle-plugin einzubetten. In meinen Projekten pom, habe ich die folgenden Tags:Axis2 in Felix 1.4.0 OSGi

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
<Embed-Transitive>true</Embed-Transitive> 

Damit alle axis2 Abhängigkeiten (und transitiv sind) werden in die endgültige JAR-Datei eingebettet ist. Die JAR-Datei erfolgreich in Felix installiert werden kann, aber das Problem ist, dass, wenn ein anderes Bündel versuchen Methoden zu verwenden, aus einer Klasse dieser jar ich die Ausnahme erhalten:

javax.xml.stream.FactoryConfigurationError: Requested factory 
    com.ctc.wstx.stax.WstxInputFactory cannot be located. 
    Classloader [email protected] 

Die com.ctc.wstx.stax.WstxInputFactory Klasse im woodstox wstx-asl Artefakt befindet welches in das jar eingebettet ist, daher sollte diese ausnahme nicht geworfen werden. Ich habe auch versucht, dieses Artefakt in ein anderes Bündel zu legen, aber der gleiche Fehler tritt auf.

Was ist das Problem hier?

In this discussion sie sagen, dass es ein Problem mit dem Ladeprogramm ist, aber ich kann keine Lösung finden.

Danke

Antwort

2

In der Mailing-Liste Thread Sie erwähnt haben, die ich beschrieben bereits eine Lösung, die nicht einzubetten StAX in das Bündel, aber OSGified Versionen der StAX API und Implementierung (Woodstox) zu verwenden.

Wenn das Einbetten von StAX in das Bundle sehr schwierig ist, müssen Sie einen Bündelaktivator hinzufügen, der die statische Methode setFactoryPerClassLoader in org.apache.axiom.om.util.StAXUtils aufruft, um diese Eigenschaft auf false festzulegen. Zumindest sollte dies für jeden Code (einschließlich Axis2) funktionieren, der StAX über Axiom verwendet. Sie können jedoch immer noch auf das Problem stoßen, wenn Code direkt mit StAX interagiert.

Verwandte Themen