C'est juste là, dans le paquet qu'il devrait indexer. Pourtant, quand je l'appellePourquoi JAXB ne trouve-t-il pas mon jaxb.index lors d'une exécution dans Apache Felix?
JAXBContext jc = JAXBContext.newInstance("my.package.name");
je reçois un JAXBException disant que
"my.package.name" ne marche pas contenir ObjectFactory.class ou jaxb.index
bien qu'il ne contienne tous les deux.
Ce qui fonctionne, mais pas tout à fait ce que je veux, est
JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);
Cette question de divers autres apparaît sur pas mal de listes de diffusion et forums, mais ne semble pas obtenir des réponses. J'utilise ceci sur OpenJDK 6, donc j'ai récupéré les paquetages source et intégré mon débogueur dans la librairie. Il commence par rechercher jaxb.properties, puis recherche les propriétés du système et, ne trouvant pas non plus, il essaie de créer le contexte par défaut en utilisant com.sun.internal.xml.bind.v2.ContextFactory. Dans là, l'exception est levée (à l'intérieur ContextFactor.createContext(String ClassLoader, Map)
), mais je ne peux pas voir ce qui se passe parce que la source n'est pas là.
ETA:
A en juger par le code source pour ContentFactory, je l'ai trouvé here, ce qui est probablement le morceau de code qui ne fonctionne pas comme prévu:
/**
* 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;
}
De mon previousexperience, Je devine que cela a à voir avec les mécanismes de chargement de classe du conteneur OSGi dans lequel cela fonctionne. Malheureusement, je suis encore un peu hors de ma portée ici.
Je voulais dire s'il vous plaît envoyer la trace de pile d'exception. – akarnokd
Le post est déjà un peu long, mais j'ai déjà suivi l'origine de l'exception, juste posté ci-dessus. –