我正在使用 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 中填充结果。
请指教