Dlaczego JAXB nie może znaleźć mojego jaxb.index podczas uruchamiania w Apache Felix?

Jest tam, w pakiecie, który powinien być indeksowany. Nadal, kiedy dzwonię

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

Otrzymuję wyjątek JAXBException, który to mówi

„my.package.name” nie zawiera ObjectFactory.class ani jaxb.index

chociaż zawiera oba.

To, co działa, ale nie jest tym, czego chcę, jest

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

To pytanie od różnych innych osób pojawia się na kilku listach dyskusyjnych i forach, ale najwyraźniej nie ma odpowiedzi.

Używam tego na OpenJDK 6, więc dostałem pakiety źródłowe i przeszedłem mój debugger do biblioteki. Zaczyna się od wyszukania jaxb.properties, a następnie szuka właściwości systemu i nie może ich znaleźć. Próbuje utworzyć domyślny kontekst za pomocą com.sun.internal.xml.bind.v2.ContextFactory. Tam zostaje wyrzucony wyjątek (wewnątrzContextFactor.createContext(String ClassLoader, Map)), ale nie widzę, co się dzieje, ponieważ źródła nie ma.

ETA:

Sądząc po kodzie źródłowym ContentFactory, znalazłemtutaj, prawdopodobnie jest to fragment kodu, który nie działa zgodnie z przeznaczeniem:

<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>

Od mojegopoprzedni doświadczenieZgaduję, że ma to związek z mechanizmami ładowania klas kontenera OSGi, w którym jest uruchomiony. Niestety, wciąż jestem trochę poza moją głębią.

questionAnswers(10)

yourAnswerToTheQuestion