我们有一个复杂的类结构,我们试图使用 JAXB-RI 将其编组为 xml 文件。编组似乎可以与 Spring 的 jaxb2Marshaller 一起正常工作,但不能与我们正在尝试使用的 jaxb-ri 一起工作。(我们使用的是 Java 6 和 jaxb-2.1.13)
这是我们目前在使用 JAXB-RI 编组后看到的输出示例:
<?xml version="1.0" encoding="UTF-8"?>
<specificCompanyList>
<org>com.ourcompany.etc.etc.TypeOfCompany@56cb0eed</org>
<org>com.ourcompany.etc.etc.TypeOfCompany@3125a57</org>
....
</specificCompanyList>
这是我们希望看到的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<specificCompanyList>
<org id="123456" name=" COMPANY NAME 1"/>
<org id="098765" name=" COMPANY NAME 2"/>
....
</specificCompanyList>
这是关于我们的班级结构的一些信息。抱歉,如果它令人困惑 - 我想把所有东西都摆在桌面上。类名和路径也已更改和缩短。
成为根元素的类:
@XmlRootElement(name="specificCompanyList")
public class SpecificCompanyLookup extends BaseCompanyLookup<TypeOfCompany> {
public SpecificCompanyLookup() {}
....
}
BaseCompany 查找:
@XmlAccessorType(XmlAccessType.FIELD)
abstract class BaseCompanyLookup<T extends OrgNode> implements Lookup {
@XmlElement(name="org")
final Set<T> companyList = new TreeSet<T>(.....);
}
组织节点:
@XmlAccessorType(XmlAccessType.FIELD)
classOrgNode extends BaseLookupItem {
}
BaseLookupItem:
@XmlAccessorType(XmlAccessType.FIELD)
public class BaseLookupItem {
@XmlAttribute(required = true)
protected String id;
@XmlAttribute(required = true)
protected String name;
....
}
一个扩展 OrgNode 的类:
class TypeOfCompany extends OrgNode {
....
}
所以:BaseLookupItem -> OrgNode -> TypeOfCompany
有谁知道是什么导致了这个糟糕的输出?我们如何让 JAXB-RI 编组器生成我们需要的输出?
编辑:我们找到了解决方案。这发生在我们迁移到 WebLogic 12c 时,它已将其 JAXB 默认值切换为 EclipseLink MOXy 实现。对于我在此处描述的情况,该实现似乎有一个错误。按照切换到 Glassfish JAXB RI 的说明为我们解决了这个问题。以下是这些说明:http ://docs.oracle.com/cd/E24329_01/web.1211/e24964/data_types.htm#CIHBHDGI