java - JAXB - java类的正确注释

标签 java xml jaxb

我有一个 xml 文档,例如:

<ParentClass>
    <FirstClass>
        <Row>
            <data1>...<data1>
            <data2>...<data2>
        </Row>
        <Row>
            <data1>...<data1>
            <data2>...<data2>
        </Row>
    </FirstClass>   
    <SecondClass>
        <Row>
            <data1>...<data1>
            <data2>...<data2>
        </Row>
        <Row>
            <data1>...<data1>
            <data2>...<data2>
        </Row>
    </SecondClass>
    </ParentClass>

我有如下java类:

@XmlRootElement(name = "ParentClass")
@XmlAccessorType(XmlAccessType.FIELD)
public class ParentJavaClass
{
    @XmlElement(name="FirstClass")
    private List<FirstJavaClass> fc;
    public List<FirstJavaClass> getFc()
    {
        return fc;
    }
    public void setFc(List<FirstJavaClass> fc)
    {
        this.fc = fc;
    }

    @XmlElement(name="SecondClass")
    private List<SecondJavaClass> sc;
    public List<SecondJavaClass> getSc()
    {
        return sc;
    }
    public void setSc(List<SecondJavaClass> sc)
    {
        this.sc = sc;
    }
}

    @XmlType(name = "Row", namespace = "Fc")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class FirstJavaClass
    {
    private String data1;
    private String data2;

    // getters & setters
    }

    @XmlType(name = "Row", namespace = "Sc")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class SecondJavaClass
    {
    private String data1;
    private String data2;

    // getters & setters
     }

但是,当我打电话时

final ParentJavaClass x = (ParentJavaClass) jaxbUnmarshaller.unmarshal(file);

我的 FirstJavaClass 和 SecondJavaClass 的结果列表全部为空值。我认为“行”元素让我困惑,但我不确定如何正确注释它。 请协助。谢谢。

最佳答案

您应该注释如下:

@XmlElementWrapper(name="FirstClass")
@XmlElement(name="Row")
private List<FirstJavaClass> fc;

@XmlElementWrapper(name="SecondClass")
@XmlElement(name="Row")
private List<SecondJavaClass> sc;

注释的意思是:

  • @XmlElementWrapper 对应于您想要在其中嵌套集合数据的元素。
  • FirstJavaClass 的每个实例都将对应于嵌套在 FirstClass 元素中的一个 Row 元素。
<小时/>

调试技巧

当您的 JAXB 对象模型未正确解码时,请尝试:

  1. 填充它并将其编码为 XML。
  2. 然后将此 XML 与您尝试解码的 XML 进行比较,看看有什么差异。
  3. 调整注释,直到编码的 XML 与您尝试解码的内容匹配
  4. 解码 XML。

关于java - JAXB - java类的正确注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127116/

相关文章:

java - Apache HttpClient 响应内容长度返回 -1

sql - T-SQL - 选择 XML 节点值,如果节点不存在则选择 NULL

java - 在创建 XMLGregorianCalendar 时使用 DataTypeFactory 严重影响性能

java - 迁移到 Java 8 后,Jaxb 无法解析 XML

java - Guava 的 BiMap 和 LinkedHashMap 的问题

java - 将数组反序列化为自定义列表实现的 Jackson 全局设置

java - 如何在 Java 中获取 Javascript 变量值?

java - 为什么我的 Android 应用程序崩溃并出现 "Unfortunately myapp stopped"错误?

php - 无法使用php在远程服务器上创建xml文件

jaxb - 为什么 JAXB 不编码我自己的子类