我们有一个复杂的类结构,我们正在尝试使用 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() {}
....
}
基本公司查找:
@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 {
}
基本查找项:
@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 时,就发生了这种情况,WebLogic 12c 已将其 JAXB 默认值切换为 EclipseLink MOXy 实现。对于我在这里描述的情况,该实现似乎存在错误。按照切换到 Glassfish JAXB RI 的说明为我们解决了这个问题。以下是这些说明:http://docs.oracle.com/cd/E24329_01/web.1211/e24964/data_types.htm#CIHBHDGI
最佳答案
我确认这实际上是 MOXy 中的一个错误,并已打开以下错误来跟踪该问题 https://bugs.eclipse.org/bugs/show_bug.cgi?id=410001
我还确认,像这样添加 @XmlSeeAlso 注释将是这种情况的解决方法。
@XmlSeeAlso(TypeOfCompany.class)
public class SpecificCompanyLookup extends BaseCompanyLookup<TypeOfCompany> {
public SpecificCompanyLookup() {}
}
关于java - JAXB-RI 编码通用列表给出了不正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865375/