Por que o JAXB não pode encontrar o meu jaxb.index ao rodar dentro do Apache Felix?

Está bem aí, no pacote que deveria estar indexando. Ainda assim, quando eu chamo

<code>JAXBContext jc = JAXBContext.newInstance("my.package.name");
</code>

Eu recebo um JAXBException dizendo que

"my.package.name" não contém ObjectFactory.class ou jaxb.index

embora contenha ambos.

O que funciona, mas não é bem o que eu quero, é

<code>JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);
</code>

Esta pergunta de várias outras pessoas aparece em algumas listas de discussão e fóruns, mas aparentemente não obtém respostas.

Estou executando isso no OpenJDK 6, então peguei os pacotes de código-fonte e coloquei meu depurador na biblioteca. Ele inicia procurando por jaxb.properties e, em seguida, procura por propriedades do sistema e falha ao localizar um dos dois, ele tenta criar o contexto padrão usando com.sun.internal.xml.bind.v2.ContextFactory. Lá, a exceção é jogada (dentroContextFactor.createContext(String ClassLoader, Map)), mas não consigo ver o que está acontecendo porque a fonte não está aqui.

ETA:

A julgar pelo código fonte do ContentFactory, encontreiAqui, esta é provavelmente a parte do código que não funciona como pretendido:

<code>/**
 * 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;
    }
</code>

Do meuanterior experiência, Eu estou supondo que isso tem a ver com os mecanismos de carregamento de classe do contêiner OSGi que isso está sendo executado. Infelizmente, ainda estou um pouco fora da minha profundidade aqui.

questionAnswers(10)

yourAnswerToTheQuestion