Я работаю с LMS eBay (Large Merchant Services) и постоянно сталкиваюсь с ошибкой:
org.xml.sax.SAXException:
SimpleDeserializer обнаружил дочерний элемент
, который НЕ ожидался, в
чем-то, что он пытался
десериализовать.
После много проб и ошибок я отследил проблему. Оказывается, это работает:
<?xml version="1.0" encoding="UTF-8"?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<Version>583</Version>
<SiteID>0</SiteID>
</Header>
<AddFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
Хотя это (то, что я отправлял) не:
<?xml version="1.0" encoding="UTF-8"?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<Version>583</Version>
<SiteID>0</SiteID>
</Header>
<AddFixedPriceItemRequest>
Разница заключается в атрибуте пространства имен XML в файле AddFixedPriceItemRequest
. Весь мой XML в настоящее время сортируется через JAXB, и я не уверен, как лучше всего добавить второй атрибут xmlns к другому элементу в моем файле.
Вот в чем вопрос. Как добавить атрибут xmlns к другому элементу в JAXB?
package ebay.apis.eblbasecomponents;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AddFixedPriceItemRequestType", propOrder = {
"item"
})
public class AddFixedPriceItemRequestType
extends AbstractRequestType
{
@XmlElement(name = "Item")
protected ItemType item;
public ItemType getItem() {
return item;
}
public void setItem(ItemType value) {
this.item = value;
}
}
Добавлено определение класса по запросу.
Отредактировал вышеприведенный класс безрезультатно:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "urn:ebay:apis:eBLBaseComponents",
name = "AddFixedPriceItemRequestType", propOrder = {
"item"
})
public class AddFixedPriceItemRequestType
Вот фрагмент класса BulkDataExchangeRequestsType
. Я попытался бросить namespace="urn:ebay:apis:eBLBaseComponents"
в @XmlElement
вместо AddFixedPriceItemRequest
, но это ничего не дало.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BulkDataExchangeRequestsType", propOrder = {
"header",
"addFixedPriceItemRequest"
})
public class BulkDataExchangeRequestsType {
@XmlElement(name = "Header")
protected MerchantDataRequestHeaderType header;
@XmlElement(name = "AddFixedPriceItemRequest")
protected List<AddFixedPriceItemRequestType> addFixedPriceItemRequest;