忽略SuperClass

时间:2012-12-06 00:31:09

标签: jaxb eclipselink moxy

我正在使用扩展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:   异常说明:在包[com.myapp]上键入的绑定文件中不允许使用包[javafx.scene.layout]的java类型。     - 链接异常:   [例外[EclipseLink-50037](Eclipse Persistence Services - 2.4.1.v20121003-ad44345):org.eclipse.persistence.exceptions.JAXBException

我花了好几个小时才找到一些信息,但没有发现..

任何帮助将不胜感激!

由于

1 个答案:

答案 0 :(得分: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>

回答相关问题