当我尝试在jaxb.index文件中引用嵌套类时,序列化期间会抛出异常。如何避免这种情况?
这是在Eclipse RCP应用程序中。导致异常的类与创建JAXB上下文并启动序列化的插件位于不同的插件中。这些类位于插件的一个导出包中。
类结构如下所示(名称已更改):
@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]
javadocs("Format for jaxb.index")还表明jaxb.index可以包含OuterClass.InnerClass形式的条目。
jaxb.index文件中出现的类名约束是:
- 不得以“.class”结尾。
- 相对于包含jaxb.index文件的包解析类名。只允许直接在包含jaxb.index文件的包中出现的类。
- 不允许使用完全限定的类名。相对于当前包的限定类名仅允许指定嵌套或内部类。
然而,这似乎不起作用。什么能使它发挥作用?
答案 0 :(得分:5)
我找到的解决方案(通过反复试验)是在jaxb.index而不是OuterClass$InnerClass
中使用OuterClass.InnerClass
。这样可以成功完成序列化。
但是,我没有找到任何推荐此权威的权威来源。
[我按照stackoverflow guidelines发布此解决方案,但很乐意看到并接受更好的答案。]