簡體   English   中英

無法使用 XMLEventReader 將 XML 解組到我的 class

[英]Unable to unmarshal the XML to my class using the XMLEventReader

我正在嘗試對大型XML文件執行JAXB Unmarshalling ,因此使用XMLEventReader但它沒有按預期工作並且沒有執行Unmarshalling

以下是我試圖unmarshal組的 XML 文件:

<Customers>
  <Customer>
    <name>BATMAN</name>
    <age>2008</age>
  </Customer>
  <Customer>
    <name>SuperMan</name>
    <age>2022</age>
  </Customer>
</Customers>

以下是將用於unmarshallingCustomer.class

@XmlRootElement(name = "Customer")
@XmlType(name = "Customer", propOrder = {"name", "age"})
@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Customer {
  private String name;
  private String age;
}

以下是Main的 class,它將unmarshal組每個customer並存儲在customer字段中,但它返回 null。 通常,當我希望它打印我的客戶信息時。

class Main {

  public static void main(String[] args) throws JAXBException, XMLStreamException, JsonProcessingException {
    final InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("Customer.xml");
    final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
    final XMLEventReader streamReader = xmlInputFactory.createXMLEventReader(inputStream);
    final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

    while (streamReader.hasNext()) {
      final XMLEvent e = streamReader.nextEvent();

      if (e.isStartElement() && ((StartElement) e).getName().getLocalPart().equals("Customer")) {
        System.out.println(((StartElement) e).getName().getLocalPart());
        final Customer customer = unmarshaller.unmarshal(streamReader, Customer.class).getValue();
        System.out.println(customer);
      }
    }
  }
}

我嘗試使用XMLStreamReader ,它運行良好。 但我想利用XMLEventReader peak()功能。 因此,我正在嘗試使用XMLEventReader 我查看了許多示例,他們提供了類似的示例,不確定我的情況出了什么問題。

有人可以幫我理解這個問題嗎?

在嘗試了幾件事之后,我能夠讓它工作。 在這里發布答案,以便將來對某人有用:

class Main {

  public static void main(String[] args) throws JAXBException, XMLStreamException, JsonProcessingException {
    final InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("Customer.xml");
    final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
    final XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(inputStream);
    final JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

    while (xmlEventReader.peek() != null) {
      XMLEvent event = xmlEventReader.peek();

      if (event.isStartElement() && ((StartElement) event).getName().getLocalPart().equals("Customer")) {
        Customer customer = unmarshaller.unmarshal(xmlEventReader, Customer.class).getValue();
        System.out.println("Normal Customer : " + customer);
      } else {
        xmlEventReader.next();
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM