jaxb.in​​dex和嵌套类(和OSGi)

时间:2013-06-10 13:33:29

标签: java jaxb

当我尝试在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("Format for jaxb.index")还表明jaxb.in​​dex可以包含OuterClass.InnerClass形式的条目。

  

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

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

然而,这似乎不起作用。什么能使它发挥作用?

1 个答案:

答案 0 :(得分:5)

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

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

[我按照stackoverflow guidelines发布此解决方案,但很乐意看到并接受更好的答案。]