このパッケージには、インデックスを作成する必要があります。私はApache Felixの内部でJAXBがjaxb.indexを見つけられないのはなぜですか?
JAXBContext jc = JAXBContext.newInstance("my.package.name");
を呼び出すときそれでも、私は持つJAXBExceptionはそれが含まれていないものの、
"my.package.name" のdoesntが
でObjectFactory.classまたはjaxb.indexが含まれていることを言ってもらいますどちらも。
作業を行いますが、私は望んかなりものではありませんどのような、様々な他の人から
JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);
この質問はかなりのメーリングリストやフォーラムに表示されているが、一見の答えを得ることはありません。
私はOpenJDK 6でこれを実行していますので、ソースパッケージを入手して、デバッガをライブラリに追加しました。まず、jaxb.propertiesを探してから、システムプロパティーを検索して見つからない場合は、com.sun.internal.xml.bind.v2.ContextFactoryを使用してデフォルトのコンテキストを作成しようとします。そこに例外がスローされます(ContextFactor.createContext(String ClassLoader, Map)
)が、ソースがここにないので何が起こっているのかわかりません。
ETA:
ContentFactoryのソースコードから判断、私はhereを発見し、これはおそらく意図したとおりに動作しないコードの一部です:
/**
* 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;
}
私previousexperienceから、私は、これが実行されているOSGiコンテナのクラスローディングメカニズムと関係があると推測しています。残念ながら、私はここでも少し深いところです。
私は例外スタックトレースを投稿してください。 – akarnokd
投稿はもう少し長くなっていますが、私は既に例外の起源を追跡しました。 –