SORU
25 HAZİRAN 2009, PERŞEMBE


Neden't JAXB benim jaxb bulabilirsiniz.Apache Felix içeride çalışırken dizini?

Orada, indeksleme olması gereken paket. Aradığımda hala

JAXBContext jc = JAXBContext.newInstance("my.package.name");

Bir JAXBException olduğunu söylediler

"benim.paket.adı" bakmıyor ObjectFactory.class ya jaxb içerir.dizin

her ikisi de içerir, ancak.

Çalışır, ama tam istediğim şey değil

JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);

Çeşitli diğer insanlardan bu soru oldukça uzun bir posta listeleri ve forumlar görünür ama görünüşte cevap vermez.

OpenJDK bu kaynak paketleri aldım ve kütüphaneye benim hata ayıklayıcı girdi yani 6, koşuyorum. Jaxb aramaya başlar.özellikleri, Sistem Özellikleri arar ve bulmak da başarısız, varsayılan bağlam com kullanarak oluşturmak için çalışır.güneş.iç.xml.bağlama.v2.ContextFactory. Orada, özel Durum alır (ContextFactor.createContext(String ClassLoader, Map) içinde), ama kaynak burada değil çünkü neler olduğunu göremiyorum.

ETA:

ContentFactory için kaynak kodu bakılırsa, here, Bu muhtemelen beklendiği gibi çalışması için başarısız bir kod parçası buldum:

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

previous experiencebenim bu sınıf ile bir ilgisi yoktur diye tahmin ediyorum bu çalışan Parçasını konteyner yükleme mekanizması. Ne yazık ki, hala burada benim derinlik biraz yokum.

CEVAP
25 HAZİRAN 2009, PERŞEMBE


TAMAM, bu oldukça uzun bir kazma aldı, ama cevap o kadar şaşırtıcı ve o kadar da karmaşık bile değil:

JAXB jaxb bulamıyorum.endeks, çünkü varsayılan olarak, newInstance(String) geçerli iş parçacığı sınıf yükleyicisi Thread.getContextClassLoader() tarafından döndürülen gibi) kullanır. Bu Parçasını demetlerinin çerçevesinde bu konuları ayrı sınıf yükleyiciler çünkü Felix içindeki işe yaramaz.

Çözüm bir yerden uygun bir sınıf loader ve newInstance(String, ClassLoader) kullanın. jaxb.index, sebep muhtemelen ObjectFactory esneklik için mantıklı bir seçim içeren paket sınıflardan biri uygun bir sınıf yükleyicisi var:

ClassLoader cl = my.package.name.ObjectFactory.class.getClassLoader();
JAXBContext jc = JAXBContext.newInstance("my.package.name", cl);

Belki de Bundle örnek kullanıyor, ama nasıl bir türlü çözemedim bu sınıf yükleyicisi de alabilir ve yukarıdaki çözüm bana güvenli gibi görünüyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007