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
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.
JAXB nedir ve neden kullanmalıyım?...
Subversion ile garip bir sorun - "...
'ana.' benim com'da noktalar...
Neden benim program tam olarak 8192 el...
Neden stil iOS7 içinde UİTableViewStyl...