jaxb.index ファイル内でネストされたクラスを参照しようとすると、シリアル化中に例外がスローされます。どうすればこれを回避できますか?
これは Eclipse RCP アプリケーションにあります。例外の原因となっているクラスは、JAXB コンテキストを作成してシリアライゼーションを開始するプラグインとは異なるプラグインにあります。クラスは、プラグインのエクスポートされたパッケージの 1 つにあります。
クラス構造は次のようになります (名前は変更されています)。
@XmlRootElement(name="foo")
@XmlAccessorType (XmlAccessType.FIELD)
public class Foo extends AbstractFoo {
...
@XmlRootElement(name="fooMetric")
@XmlAccessorType (XmlAccessType.FIELD)
public static class FooMetric implements IFooMetric {
...
}
}
jaxb.index ファイルには以下が含まれます。
Foo
Foo.FooMetric
シリアル化中に、例外は「OuterClass.InnerClass」を使用するように指示します-これは私が行っています。
javax.xml.bind.JAXBException: com/mypackage/jaxb.index にリストされているクラス "Foo.FooMetric" のロード中にエラーが発生しました。エントリが CLASSPATH でアクセス可能であり、" ClassName" または "OuterClass.InnerClass" の形式ではないことを確認してください。 ClassName.class" または "fully.qualified.ClassName" - リンクされた例外: [java.lang.ClassNotFoundException: com.mypackage.Foo.FooMetric]
また、javadoc ( 「jaxb.index のフォーマット」 ) は、jaxb.index に OuterClass.InnerClass の形式のエントリを含めることができることを示唆しています。
jaxb.index ファイルで発生するクラス名の制約は次のとおりです。
- 「.class」で終わってはいけません。
- クラス名は、jaxb.index ファイルを含むパッケージに対して相対的に解決されます。jaxb.index ファイルを含むパッケージに直接出現するクラスのみが許可されます。
- 完全修飾クラス名は使用できません。現在のパッケージに関連する修飾クラス名は、ネストされたクラスまたは内部クラスのみを指定できます。
ただし、これは機能していないようです。それを機能させるものは何ですか?