2

JavaFxのコンポーネントを拡張するクラスを使用しています

public class MyClass extends Pane {}

そのクラスのみをシリアル化し、Paneスーパークラスはシリアル化しません。

Jaxbはそれをサポートしていないので、私はそれを達成するためにEclipselinkMOXyを使用しています。

マーシャラー

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-typeは、パッケージ[com.myapp]にキー設定されたバインディングファイルでは許可されていません。-リンクされた例外あり:[例外[EclipseLink-50037](Eclipse Persistence Services-2.4.1.v20121003-ad44345):org.eclipse.persistence.exceptions.JAXBException

私はいくつかの情報を見つけるために何時間も費やしましたが、何も見つかりませんでした。

どんな助けでもいただければ幸いです!

ありがとう

4

1 に答える 1

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>

関連する質問への回答

于 2012-12-06T00:54:30.203 に答える