2

次の内容のバインディング ファイルがあります。

<java-type name="JavaType">
  <xml-root-element name="root"/>
  <java-attributes>
    ...
  </java-attributes>
</java-type>

このバインディングを使用して JavaType クラスをマーシャリングすると、XML は次のようになります。

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="JavaType">

xsi:type をそこに置きたくないのですが、マーシャリング時にこれを抑制するにはどうすればよいですか?

4

2 に答える 2

1

サブクラスをマーシャリングすると、xsi:type属性が表示されます。JAXBElementタイプを含むルート要素に関する情報を提供する でオブジェクトをラップすることにより、それを抑制することができます。

JAXBElement<JavaType> je = new JAXBElement(new QName(), JavaType.class javaType);
marshaller.marshal(je, System.out); 


アップデート

ありがとう。ここで、スーパークラス XmlTransient を作成しました。これにより、xsi:type も消えます。そのために注釈を使用しました。Java型を一時的にするために実際に使用する方法はありますか? Java属性でしか機能させることができませんでした。

あなたは正しいです。@XmlTransientクラス レベルで使用して、継承階層から削除することができます。以下は、MOXyの外部マッピングドキュメントを使用してこれを行う方法です。

<?xml version="1.0" encoding="UTF-8"?>
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    package-name="com.example.foo">
     <java-types>
        <java-type name="Foo" xml-transient="true"></java-type>
     </java-types>
</xml-bindings>

詳細については

于 2013-11-22T18:21:04.197 に答える