jaxb プラグイン (rg.jvnet.jaxb2.maven2) を使用して Java クラスを生成しています。だから、Javaクラスを自動的に生成するxsdを使用しています。解決策を抽象的にしたい。
私はXMLを持っています
<RESULTS>
<RESULT>
<TOKEN>XXXXXXXXXXXXXXXXXXXXXXXXX</TOKEN>
<LANGUAGE>en</LANGUAGE>
<SEARCHTYPE>PO</SEARCHTYPE>
</RESULT>
</RESULTS>
後で、他の製品でも同じ XML を使用する予定ですが、NUMBER 要素が追加されています。
<RESULTS>
<RESULT>
<TOKEN>XXXXXXXXXXXXXXXXXXXXXXXXX</TOKEN>
<LANGUAGE>en</LANGUAGE>
<SEARCHTYPE>PO</SEARCHTYPE>
<NUMBER>123456789</NUMBER>
</RESULT>
</RESULTS>
解決策を抽象的にしたい。以下は私のjaxb実装です。
1)私の結果クラスには結果のリストが含まれています。この結果を BaseResult にしました。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RESULTS", propOrder = {
"baseresult"
})
public class Results implements Equals2, HashCode2, ToString2
{
@XmlElement(name = "BASERESULT", required = true)
protected List<BaseResult> baseresult;
}
2)これは、共通フィールドを持つ BaseResult クラスです。
パブリック抽象クラス BaseResult は、Equals2、HashCode2、ToString2 を実装します {
@XmlElement(name = "TOKEN", required = true)
protected String token;
@XmlElement(name = "LANGUAGE", required = true)
protected String language;
}
これは、上記のコードを生成するための私の xsd ファイルです
<xs:complexType name="RESULTS">
<xs:annotation>
<xs:documentation>
Holds results tag <!-- <RESULTS></RESULTS> -->
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="BASERESULT" type="BASERESULT" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="BASERESULT" abstract="true">
<xs:annotation>
<xs:documentation>
Holds result <!-- <RESULT></RESULT> -->token , with all common elements in result tag
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="TOKEN" type="xs:string" />
<xs:element ref="LANGUAGE" type="xs:string"/>
</xs:sequence>
</xs:complexType>
3)これは結果の子クラスで、子フィールドがあります。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RESULT", propOrder = {
"searchType"
})
public class Result extends BaseResult
implements Equals2, HashCode2, ToString2
{
@XmlElement(name = "SEARCHTYPE", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlSchemaType(name = "NCName")
protected String searchType;
}
これは、上記のコードを生成するための私の xsd ファイルです
<xs:complexType name="RESULT">
<xs:complexContent>
<xs:extension base="BASERESULT">
<xs:sequence>
<xs:element ref="SEARCHTYPE" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
問題は、上記のように xml を作成できないことです。mu xml に結果を入力することはできません。
ご意見をお聞かせください