【问题标题】:Ignore SuperClass忽略超类
【发布时间】:2012-12-06 00:31:09
【问题描述】:

我正在使用一个扩展 JavaFx 组件的类

public class MyClass extends Pane {}

我只想序列化该类而不是 Pane 超类。

由于 Jaxb 不支持它,我正在使用 Eclipselink MOXy 来实现:

编组器

Map<String, Source> metadataSource = new HashMap<String, Source>();
metadataSource.put("com.myapp", new StreamSource(getClass().getResourceAsStream("/com/myapp/myclass.xml")));

Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSource);

JAXBContext context = JAXBContext.newInstance(new Class[] {MyClass.class}, properties);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(new MyClass(), new File("test.xml"));

myclass.xml

<?xml version="1.0"?>
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    version="2.3">
    <java-types>
        <java-type name="javafx.scene.layout.Pane" xml-transient="true" />
    </java-types>
</xml-bindings>

但是我收到了这个错误:

javax.xml.bind.JAXBException: 异常描述:包 [javafx.scene.layout] 的 java 类型不允许在包 [com.myapp] 上键入的绑定文件中。 - 有关联的例外: [异常 [EclipseLink-50037] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.JAXBException

我花了几个小时寻找一些信息,但一无所获..

任何帮助将不胜感激!

谢谢

【问题讨论】:

    标签: jaxb eclipselink moxy


    【解决方案1】:

    您可以使用 MOXy 的外部映射文档指定超类型为java.lang.Object 而不是Pane

    <?xml version="1.0"?>
    <xml-bindings 
        xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
        package-name="com.example">
        <java-types>
            <java-type name="MyClass" super-type="java.lang.Object"/>
        </java-types>
    </xml-bindings>
    

    相关问题的回答

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多