我有使用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 回答
尝试: