Es ist genau dort, in dem Paket, das es indexieren sollte. Dennoch, wenn ich rufeWarum kann JAXB meinen jaxb.index nicht finden, wenn er in Apache Felix läuft?
JAXBContext jc = JAXBContext.newInstance("my.package.name");
ich einen JAXBException sagen bekommen, dass
"my.package.name" muß nicht ObjectFactory.class oder jaxb.index enthalten
obwohl es enthält beide.
Was funktioniert, ist aber nicht ganz das, was ich will, ist
JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);
Diese Frage aus verschiedenen anderen Menschen erscheinen ziemlich einige Mailinglisten und Foren, aber scheinbar keine Antworten bekommen.
Ich bin dies auf OpenJDK 6 ausgeführt, also habe ich die Quellpakete und trat mein Debugger in die Bibliothek. Es beginnt mit der Suche nach jaxb.properties, sucht dann nach Systemeigenschaften und findet keine der beiden, es versucht, den Standardkontext mit com.sun.internal.xml.bind.v2.ContextFactory zu erstellen. Dort wird die Exception geworfen (innerhalb ContextFactor.createContext(String ClassLoader, Map)
), aber ich kann nicht sehen, was passiert, weil die Quelle nicht hier ist.
ETA:
Geht man von der Quellcode für Content, ich here gefunden, das ist wahrscheinlich das Stück Code, wie beabsichtigt nicht funktioniert:
/**
* Look for jaxb.index file in the specified package and load it's contents
*
* @param pkg package name to search in
* @param classLoader ClassLoader to search in
* @return a List of Class objects to load, null if there weren't any
* @throws IOException if there is an error reading the index file
* @throws JAXBException if there are any errors in the index file
*/
private static List<Class> loadIndexedClasses(String pkg, ClassLoader classLoader) throws IOException, JAXBException {
final String resource = pkg.replace('.', '/') + "/jaxb.index";
final InputStream resourceAsStream = classLoader.getResourceAsStream(resource);
if (resourceAsStream == null) {
return null;
}
Aus meiner previousexperience, Ich nehme an, dass das mit den Klassenlademechanismen des OSGi-Containers, in dem es läuft, zu tun hat. Leider bin ich hier noch ein wenig überfordert.
Ich meinte bitte die Ausnahme Stack-Trace veröffentlichen. – akarnokd
Der Beitrag wird schon ein wenig lang, aber ich habe bereits den Ursprung der Ausnahme verfolgt, nur oben gepostet. –