【发布时间】:2016-06-17 13:32:23
【问题描述】:
我正在使用 JAXB xjc 命令行工具将 XML 模式(.xsd 文件)转换为 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>
当我运行 .xsd 时,我得到三个类:OwnerDog.java、ToyType.java 和 ObjectFactory.java。
我想向 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 文件。
【问题讨论】: