首页 文章

使用ArrayList时JAXB无效的XML结构

提问于
浏览
0

我有使用JAXB和对象列表的问题 . JAXB用于对Spring 4中开发的REST api中的XML进行编组/解组 . 类结构没有太多的xml结构,我使用ArrayList的地方

我有Java业务对象模型如下:
Client:

@XmlRootElement(name="client")
public class Client {
@XmlElement
public Integer age = Integer.valueOf(0);

 public Client() {
    super();
 }
}

Offer (root element):

@XmlRootElement
@XmlSeeAlso(Client.class)
public class Offer {
@XmlElement
public ArrayList<Client> clients = new ArrayList<Client>();
public Boolean decission = Boolean.FALSE;

 public Offer() {
    super();
 }
}

和unmarshaller:

public static Offern unmarshalXMLOffer(String httpMessage) throws Exception{
    logger.debug("unmarshal: receved data to unmarshal:  " + httpMessage);
    JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class, Client.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    StringReader reader = new StringReader(httpMessage);
    Offer ca = (Offer)jaxbUnmarshaller.unmarshal(reader);
    return ca;
}

The issue:
当我发送:

<Offer>
  <clients>
    <client>
        <age>21</age>
    </client>
  </clients>
  <decission>false</decission>
</Offer>

我得到了: Offer.Client.age = 0
但如果我发送给unmarshaller这个:

<Offer>
  <clients>
        <age>21</age>
  </clients>
  <decission>false</decission>
</Offer>

我得到了: Offer.Client.age = 21 - 正确的 Value .

根据我的最佳知识和一些JAXB经验,我做了一些事情:

  • 我试图使用注释XMLSeeAlso

  • 为客户列表制作了自定义包装类

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)@XmlSeeAlso(Client.class)public class ClientsXMLWrapper {@XmlElement(name =“clients”)private list clients;

public ClientsXMLWrapper(){

}

public ClientsXMLWrapper(List<Client> clientsList){
    clients = clientsList;
}

public List<Client> getClients() {
    return clients;
}
public void setClients(List<Client> clients) {
    this.clients = clients;
}

}

  • 我做了不同的JAXB初始化:

  • JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class,Client.class,ClientsXMLWrapper.class);

  • JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class,Client.class);

  • JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class,ClientsXMLWrapper.class);

到目前为止没有任何帮助 . 你能帮我解决这个问题吗?科赫 .

1 回答

  • 1

    尝试:

    @XmlElementWrapper(name="clients")
    @XmlElement(name="client")
    public ArrayList<Client> clients = new ArrayList<Client>();
    

相关问题