Ich verwende das JAXB xjc Befehlszeilentool, um ein XML-Schema (.xsd-Datei) in Java-Objekte zu konvertieren.Wie kann ich bei der Generierung von Java-Klassen mit JAXB ein benutzerdefiniertes Feld zu jeder Klasse hinzufügen?
Hier sind die Inhalte meiner XSD-Datei:
<?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>
Als ich .xsd laufen, bekomme ich drei Klassen: OwnerDog.java, ToyType.java und ObjectFactory.java.
Ich möchte OwnerDog.java und ToyType.java ein benutzerdefiniertes Feld hinzufügen. Dieses Feld wird eine Referenz zu einer Buchhaltungsklasse sein, die ich verwenden werde, um Statistiken für jeden Knoten in meinem XML-Baum zu verfolgen.
Zum Beispiel ist dies der Code, den ich für ToyType.java erhalten:
@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;
}
}
Ich mag es so aussehen:
@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;
}
}
Gibt es eine Möglichkeit Felder JAXB hinzufügen -generated Klassen programmgesteuert? Offensichtlich ist es für mein Beispiel leicht, es manuell zu machen, aber das ist nur ein Übungsproblem für ein viel größeres Produktionsproblem.
Ich bin nicht in der Lage, die ursprüngliche .xsd-Datei zu ändern, und ich brauche dies für mehrere .xsd-Dateien, die ich noch nicht gesehen haben.