将XML与JAXB注释绑定在一起

时间:2012-07-15 15:12:47

标签: java jaxb

我有以下XML格式:

 <repositories>
     <set>
       <id>1</id>
       <name>First</name>
       <spec>data</spec>
     </set>
    <set>
       <id>2</id>
       <name>INFO</name>
       <spec>main</spec>
    </set>
      .
      .
 </repositories>

我创建了以下package-info.java

 @javax.xml.bind.annotation.XmlSchema (
 elementFormDefault=XmlNsForm.QUALIFIED,
 xmlns = {}
 )

package website.model;

import javax.xml.bind.annotation.XmlNsForm;

以下课程:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Repositories {

@XmlElement
private ListofRepositories repositories;

public ListofRepositories getRepositories() {
    return repositories;
}

public void setRepositories(ListofRepositories repositories) {
    this.repositories = repositories;
}

}

包裹套装

@XmlAccessorType(XmlAccessType.FIELD)
public class ListofRepositories {

private List<Sets> set;

public List<Sets> getSet() {
    return set;
}

public void setSet(List<Sets> set) {
    this.set = set;
}

}

数据:

@XmlAccessorType(XmlAccessType.FIELD)
public class Sets {

private Long id;
private String name;
private String spec;

//get set

}

我不知道为什么这不起作用。响应始终为null。我用Java和JAXB注释实现了类似的过程,我从来没有遇到过这种问题。有谁知道什么是错的,我该如何解决?

2 个答案:

答案 0 :(得分:2)

对于上面的xml,您需要以下类结构:

@XmlRootElement(name="repositories")
@XmlAccessorType(XmlAccessType.FIELD)
public class Repositories {

@XmlElement
private List<Sets> set;

//getter and setter

}

@XmlAccessorType(XmlAccessType.FIELD)
public class Sets {

private Long id;
private String name;
private String spec;

//getter and setter

}

但是,根据你的类结构,你将得到以下xml:

<Repositories>
  <repositories>
    <set>
      <id></id>
      <name></name>
      <spec></spec>
    </set>
    <set>
      <id></id>
      <name></name>
      <spec></spec>
    </set>
    .
    .
    .
  </repositories>
</Repositories>

答案 1 :(得分:1)

使用JAXB你也可以从xsd文件中生成这些类 - 并根据xsd检查传入的xml(这将显示为什么它不会接受它)