gpt4 book ai didi

java - JAXB-RI 编码通用列表给出了不正确的输出

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:59 26 4
gpt4 key购买 nike

我们有一个复杂的类结构,我们正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com