【问题标题】:JAXB invalid XML structure while working with ArrayList使用 ArrayList 时 JAXB 无效的 XML 结构
【发布时间】:2017-04-20 23:39:14
【问题描述】:

我在使用 JAXB 和对象列表时遇到问题。 JAXB 用于从 Spring 4 开发的 REST api 编组/解组 XML。 类结构没有太多xml结构,在我使用ArrayList的地方

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

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

 public Client() {
    super();
 }
}

优惠(根元素):

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

 public Offer() {
    super();
 }
}  

和解组器:

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;
}

问题:
当我发送:

<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 - 正确的价值。

根据我的知识和一些 JAXB 经验,我做了几件事:

  • 我尝试使用注解 XMLSeeAlso
  • 为客户列表定制包装类

    @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso(Client.class) 公共类 ClientsXMLWrapper { @XmlElement(name = "客户") 私人名单客户;

    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 初始化:

    1. JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class, Client.class, ClientsXMLWrapper.class);
    2. JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class, Client.class);
    3. JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class, ClientsXMLWrapper.class);

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

【问题讨论】:

    标签: xml jakarta-ee jaxb


    【解决方案1】:

    试试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多