Игнорировать суперкласс

Я использую класс, который расширяет компонент 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"));

мойкласс.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: Описание исключения: тип java с пакетом [javafx.scene.layout] не разрешен в файле привязок, указанном в пакете [com.myapp]. - со связанным исключением: [Exception [EclipseLink-50037] (Eclipse Persistence Services — 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.JAXBException

Я потратил часы, чтобы найти некоторую информацию, но не нашел.

Любая помощь будет оценена!

Спасибо


person Badisi    schedule 06.12.2012    source источник


Ответы (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>

Ответ на похожий вопрос

person bdoughan    schedule 06.12.2012