我正在使用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文件。
答案 0 :(得分:0)
这有点乱,但我能用一个小的bash脚本完成这个:
xjc -p com.company.ustruc_to_xml OwnerDog.xsd
cd ./com/company/ustruc_to_xml
for f in *.java; do sed -i 's/\(^public class .*$\)/\1\n\n private BookKeeper bk;/' $f; done
cp *.java /Users/car/Documents/workspace/proj_ustruc_to_xml/src/com/ibm/ustruc_to_xml
答案 1 :(得分:0)
我不知道使用JAXB
创建自定义字段的方法。
我建议您尝试更改项目的结构。我创建了一个包含JAXB
数据变量(ToyType
或OwnerDog
)的类型,并保存BookKeeper
。它可能是派生类型。
如果您的系统或开发团队变得更大,手动更改生成的JAXB
代码会使事情变得更难。