나는 이베이의 LMS (대형 가맹점 서비스)와 함께 일하고 있어요 및 오류로 실행 보관 :정렬 할 때 JAXB의 요소에 네임 스페이스 특성을 추가하려면 어떻게해야합니까?
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
후 시행 착오의 작정 내가 문제를 추적. 이 동안
<?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>
차이가 AddFixedPriceItemRequest
에 XML 네임 스페이스 속성입니다 그것은이 작품 밝혀졌습니다. 모든 XML은 현재 JAXB를 통해 마샬링되고 있으며, 두 번째 xmlns 특성을 내 파일의 다른 요소에 추가하는 가장 좋은 방법은 무엇인지 모르겠습니다.
그래서 질문입니다. JAXB의 다른 요소에 xmlns 속성을 추가하려면 어떻게합니까?
UPDATE : 요청에 의해
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;
}
}
추가 된 클래스 정의.
UPDATE 2 : 상기 클래스에 아무런 영향과 같이 편집 :
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "urn:ebay:apis:eBLBaseComponents",
name = "AddFixedPriceItemRequestType", propOrder = {
"item"
})
public class AddFixedPriceItemRequestType
UPDATE 3 : 여기 BulkDataExchangeRequestsType 클래스의 단편이다. AddFixedPriceItemRequest에 대해 @XmlElement에 namespace="urn:ebay:apis:eBLBaseComponents"
을 던지려고했지만 아무 것도하지 않았습니다.
@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;
업데이트 4 : 다음은 마샬링 후 XML을 업데이트하는 코드의 끔찍한 덩어리입니다. 비록 내가 특히 그것을 자랑스럽게 생각하지는 않지만 이것은 현재 작동 중이다.
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
marshaller.marshal(request, doc);
NodeList nodes = doc.getChildNodes();
nodes = nodes.item(0).getChildNodes();
for(int i = 0; i < nodes.getLength(); i++){
Node node = nodes.item(i);
if (!node.getNodeName().equals("Header")){
((Element)node).setAttribute("xmlns", "urn:ebay:apis:eBLBaseComponents");
}
}
모두에게 도움을 주셔서 감사합니다. 당신은 단지 일부 특정 경우에 네임 스페이스를 지정하려면
"JAXB를 통해 생성"이란 정확히 무엇을 의미합니까? AddFixedPriceItemRequest 클래스의 정의를 추가 할 수 있습니까? –
XML을 생성하기 위해 JAXB를 통해 마샬링을 사용하고 있습니다. BulkDataExchangeRequestsType 클래스에 xmlns 특성을 추가하는 특정 태그를 볼 수 없습니다. AddFixedPriceItemRequestType 클래스 정의를 질문에 추가했습니다. –
왜 WSDL에 지정된 스키마를 aginst 생성하지 않습니까? http://developer.ebay.com/webservices/bulk-data-exchange/latest/BulkDataExchangeService.wsdl –