我正在使用EclipseLink MOXy作为我的JAXB (JSR-222)提供程序,并且需要一些关于我的映射文件的帮助来将我的类编组为 XML。
我正在使用外部文件进行映射。
我有两种类型的交易:A 和 B。两者都包含一个带有两个字段(text1 和 text2)的标题对象(相同的对象)。
在将这些编组为 XML 时,我希望 transactionA 的标头字段的 xml 标记成为 <headerA1> 和 <headerA2>,并且链接到 transactionB 的那些成为 <headerB1> 和 <headerB2>。
知道如何实现这一点(最好不使用继承)?
这是代码:
标题类
public class Header {
private String text1;
private String text2;
public Header(){}
public String getText1() {
return text1;
}
public void setText1(String text1) {
this.text1 = text1;
}
public String getText2() {
return text2;
}
public void setText2(String text2) {
this.text2 = text2;
}
}
交易一
public class TransactionA {
private Header statementHeader;
private BigDecimal units;
private BigDecimal price;
public TransactionA(){}
public BigDecimal getUnits() {
return units;
}
public void setUnits(BigDecimal units) {
this.units = units;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Header getStatementHeader() {
return statementHeader;
}
public void setStatementHeader(Header statementHeader) {
this.statementHeader = statementHeader;
}
}
交易乙
public class TransactionB {
private Header statementHeader;
private BigDecimal units;
private BigDecimal price;
public TransactionB(){}
public BigDecimal getUnits() {
return units;
}
public void setUnits(BigDecimal units) {
this.units = units;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Header getStatementHeader() {
return statementHeader;
}
public void setStatementHeader(Header statementHeader) {
this.statementHeader = statementHeader;
}
}
映射文件
<java-types>
<java-type name="Statement" xml-accessor-type="NONE">
<java-attributes>
<xml-element java-attribute="tranA" />
<xml-element java-attribute="tranB" />
</java-attributes>
</java-type>
<java-type name="Header" xml-accessor-type="NONE">
<java-attributes>
<xml-element java-attribute="text1" name="headerA1" />
<xml-element java-attribute="text2" name="headerA2" />
</java-attributes>
</java-type>
<java-type name="TransactionA" xml-accessor-type="NONE">
<java-attributes>
<xml-element java-attribute="statementHeader" name="headerA" />
<xml-element java-attribute="units" />
<xml-element java-attribute="price"/>
</java-attributes>
</java-type>
<java-type name="TransactionB" xml-accessor-type="NONE">
<java-attributes>
<xml-element java-attribute="statementHeader" name="headerB" />
<xml-element java-attribute="units" />
<xml-element java-attribute="price"/>
</java-attributes>
</java-type>
</java-types>
结果如您所见,标题 B 的标签与标题 A 的标签相同。
<?xml version="1.0" encoding="UTF-8"?>
<tranA>
<headerA>
<headerA1>Description</headerA1>
<headerA2>Units</headerA2>
</headerA>
<units>10</units>
<price>99999999.98999999463558197021484375</price>
</tranA><tranB>
<headerB>
<headerA1>Bheader1</headerA1>
<headerA2>Bheader2</headerA2>
</headerB>
<units>10</units>
<price>99999999.98999999463558197021484375</price>
</tranB>