4

当我尝试在我的 jaxb.in​​dex 文件中引用嵌套类时,在序列化过程中会引发异常。如何避免这种情况?

这是在 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.in​​dex 文件包含以下内容:

Foo
Foo.FooMetric

在序列化过程中,异常说要使用“OuterClass.InnerClass”——我正在这样做。

javax.xml.bind.JAXBException:加载 com/mypackage/jaxb.in​​dex 中列出的类“Foo.FooMetric”时出错,请确保条目可在 CLASSPATH 上访问,并且格式为“ClassName”或“OuterClass.InnerClass”,而不是“ ClassName.class" 或 "fully.qualified.ClassName" - 带有链接异常:[java.lang.ClassNotFoundException: com.mypackage.Foo.FooMetric]

javadocs(“jaxb.in​​dex 的格式”)还建议 jaxb.in​​dex 可以包含 OuterClass.InnerClass 形式的条目。

对 jaxb.in​​dex 文件中出现的类名的约束是:

  • 不得以“.class”结尾。
  • 类名相对于包含 jaxb.in​​dex 文件的包进行解析。只允许直接出现在包含 jaxb.in​​dex 文件的包中的类。
  • 不允许使用完全限定的类名。一个合格的类名,相对于当前包,只允许指定一个嵌套或内部类。

但是,这似乎不起作用。什么会让它发挥作用?

4

1 回答 1

5

我找到的解决方案(通过反复试验)是OuterClass$InnerClass在 jaxb.in​​dex 中使用而不是OuterClass.InnerClass. 这允许序列化成功完成。

但是,我还没有找到任何推荐这个的权威来源。

[我根据stackoverflow 指南发布此解决方案,但希望看到并接受更好的答案。]

于 2013-06-10T13:33:28.847 回答