я сгенерировал некоторые классы из xsd с помощью команды 'xjc'.
Проблема, с которой я столкнулся, заключается в том, что в сгенерированном пакете есть файл информации о пакете с только аннотацией @XmlSchema напакет:
например,
@javax.xml.bind.annotation.XmlSchema(namespace = "https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd", elementFormDefault = XmlNsForm.QUALIFIED)
package com.xxx.bolapp.dto;
У меня возникли две проблемы: во-первых, маршаллер всегда выдает исключение при демаршаллинге:
exception is org.springframework.http.converter.HttpMessageNotReadableException: Could not unmarshal to [class nl.minc.bolapp.dto.Orders]: unexpected element (uri:"https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd", local:"Orders"). Expected elements are <{}Orders>; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd", local:"Orders"). Expected elements are <{}Orders>
Я могу удалить это при настройке пространства именнепосредственно на @XmlRoot. Как только я это сделаю, начальные заказы будут правильно проанализированы.Тогда проблема, с которой я сталкиваюсь, заключается в том, что дочерние элементы имеют нулевое значение, где должны быть данные.
В настоящее время проблема главным образом в том, что дочерний элемент является нулевым, но я подозреваю, что он как-то связан с пространством имен.
РЕДАКТИРОВАТЬ 1 Проблема с нулевыми дочерними элементами исчезает при публикации пространства имен в каждом элементе XmlEle, так что это определенно прямая причина.
Я публикую сгенерированный класс и xml:
Класс:
package com.xxx.bolapp.dto;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"order"
})
@XmlRootElement(name = "Orders")
public class Orders
implements Serializable
{
private final static long serialVersionUID = 1L;
@XmlElement(name = "Order")
protected List<Orders.Order> order;
....
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"orderId",
"dateTimeCustomer",
"dateTimeDropShipper",
"customerDetails",
"orderItems"
})
public static class Order
implements Serializable
{
....
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Orders xmlns="https://plazaapi.bol.com/services/xsd/v2/plazaapi.xsd">
<Order>
<OrderId>4123456789</OrderId>
<DateTimeCustomer>2017-02-09T12:39:48.000+01:00</DateTimeCustomer>
<DateTimeDropShipper>2017-02-09T12:39:48.000+01:00</DateTimeDropShipper>
<CustomerDetails>
<ShipmentDetails>
<SalutationCode>02</SalutationCode>
<Firstname>Billie</Firstname>
<Surname>Van der Bol.com</Surname>
<Streetname>Dorpstraat</Streetname>
<Housenumber>1</Housenumber>
<HousenumberExtended>B</HousenumberExtended>
<ZipCode>1111 ZZ</ZipCode>
<City>Utrecht</City>
<CountryCode>NL</CountryCode>
<Email>2awq74td4z4mizmx6dcdbsdbdcna@verkopen.bol.com</Email>
<Company>bol.com</Company>
</ShipmentDetails>
<BillingDetails>
<SalutationCode>02</SalutationCode>
<Firstname>Billie</Firstname>
<Surname>van der Bol.com</Surname>
<Streetname>Dorpstraat</Streetname>
<Housenumber>1</Housenumber>
<HousenumberExtended>B</HousenumberExtended>
<ZipCode>1111 ZZ</ZipCode>
<City>Utrecht</City>
<CountryCode>NL</CountryCode>
<Email>2awq74td4z4mizmx6dcdbsdbdcna@verkopen.bol.com</Email>
<Company>bol.com</Company>
</BillingDetails>
</CustomerDetails>
<OrderItems>
<OrderItem>
<OrderItemId>2012345678</OrderItemId>
<EAN>5412810182312</EAN>
<OfferReference>BOLCOM00123</OfferReference>
<Title>Basicxl - Rijdende Wekker - Kunststof - 16x11cm - Zwart</Title>
<Quantity>1</Quantity>
<OfferPrice>27.95</OfferPrice>
<TransactionFee>5.18</TransactionFee>
<LatestDeliveryDate>2017-02-10+01:00</LatestDeliveryDate>
<OfferCondition>NEW</OfferCondition>
<CancelRequest>false</CancelRequest>
<FulfilmentMethod>FBR</FulfilmentMethod>
</OrderItem>
</OrderItems>
</Order>
</Orders>