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