親プロパティは、子プロパティの前に、指定された順序に基づいてマーシャリングされます。propOrder
親クラスに で注釈を付けると、親クラスのプロパティを子クラスの に含めることができます@XmlTransient
。
アップデート
トランシスタントにする方法はありますが、通常どおり使用できますか?
いいえ、クラスを設定@XmlTransient
すると、JAXB がマップされていると見なすクラスからそのクラスが削除されます。JAXB がサブクラスのプロパティの前にスーパークラスのプロパティを整列化するのは、XML スキーマの規則に一致させるためです。クラスが対応する XML スキーマでSearch
マークされていない場合は、次のようになります。@XmlTransient
タイプの要素が有効であるためには、XML スキーマの規則に従ってsearchExtended
、サブタイプで定義されたどの要素よりも前にスーパー タイプの要素が出現する必要があります。
<xs:complexType name="searchExtended">
<xs:complexContent>
<xs:extension base="search">
<xs:sequence>
<xs:element name="three" type="three" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="search">
<xs:sequence>
<xs:element name="one" type="one" minOccurs="0"/>
<xs:element name="two" type="two" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
次のコードを実行すると、JAXB モデルに対応する XML スキーマを確認できます。
import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(SearchExtended.class);
jc.generateSchema(new SchemaOutputResolver() {
@Override
public Result createOutput(String namespaceUri,
String suggestedFileName) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(suggestedFileName);
return result;
}
});
}
}