Я использую класс, который расширяет компонент 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
Я потратил часы, чтобы найти некоторую информацию, но не нашел.
Любая помощь будет оценена!
Спасибо