JAXB xjcコマンドラインツールを使用してXMLスキーマ(.xsdファイル)をJavaオブジェクトに変換しています。ここでJAXBでJavaクラスを生成するとき、どのように各クラスにカスタムフィールドを追加できますか?
私の.xsdファイルの内容をされていますOwnerDog.java、ToyType.java、およびObjectFactory.java:私はの.xsd実行すると
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ownerDog">
<xs:complexType>
<xs:sequence>
<xs:element name="owner" type="xs:string" />
<xs:element name="dog" type="xs:string"/>
<xs:element name="toy" type="toyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="toyType">
<xs:sequence>
<xs:element name="color" type="xs:string" />
<xs:element name="price" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:schema>
は、私は三つのクラスを取得します。
OwnerDog.javaとToyType.javaにカスタムフィールドを追加したいと思います。このフィールドは、XMLツリーの各ノードの統計を追跡するために使用する簿記クラスへの参照になります。
たとえば、これは私がToyType.javaのために得るコードです:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "toyType", propOrder = {
"color",
"price"
})
public class ToyType {
@XmlElement(required = true)
protected String color;
@XmlElement(required = true)
protected BigInteger price;
public String getColor() {
return color;
}
public void setColor(String value) {
this.color = value;
}
public BigInteger getPrice() {
return price;
}
public void setPrice(BigInteger value) {
this.price = value;
}
}
私はそれは次のようになりたいと思います:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "toyType", propOrder = {
"color",
"price"
})
public class ToyType {
private BookKeeper bk;
@XmlElement(required = true)
protected String color;
@XmlElement(required = true)
protected BigInteger price;
public String getColor() {
return color;
}
public void setColor(String value) {
this.color = value;
}
public BigInteger getPrice() {
return price;
}
public void setPrice(BigInteger value) {
this.price = value;
}
}
は、JAXBにフィールドを追加する方法はあります生成されたクラスはプログラムによって?明らかに、私の例では手動で行うのは簡単ですが、これはずっと大きな生産上の問題のための練習問題です。
元の.xsdファイルを変更できません。まだ見たことがない複数の.xsdファイルで動作するようにする必要があります。