홈>
eBay의 LMS (Large Merchant Services)와 협력하고 있으며 계속 오류가 발생합니다 :
시행 착오의많은후에 나는 문제를 추적했다. 작동합니다.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 속성을 어떻게 추가합니까?
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;
- 답변 # 1
- 답변 # 2
클래스 주석 사용 시도
Marshaller
또는
xmlns
특정 경우에만 네임 스페이스를 지정하려는 경우 속성 주석
- 답변 # 3
생성 된 클래스의 필드에
@XmlType(namespace="urn:ebay:apis:eBLBaseComponents")
가 없는지 확인 주석이 있으면 네임 스페이스 속성이 누락됩니다. 마샬링 된 XML의 모든 요소에 대해 네임 스페이스 접두사를 가져 오려면이 두 개가 있어야합니다.@XmlElement(namespace="urn:ebay:apis:eBLBaseComponents")
관련 자료
- CSS는 다른 요소의 속성을 얻습니다
- javascript - 요소에 데이터 속성 추가가 첫 번째 시도에서 작동하지 않습니다
- xml - 요소 노드의 속성 노드 자식 노드
- Java에서 마샬링 할 때 XML 요소 이름을 변경하는 방법
- c# - 요소의 "Version"속성이 인식되지 않습니다
- jquery - puppeteer에서 요소 속성을 true/false로 설정하거나 해제하는 방법
- c# - TagBuilder 특정 내부 요소를 찾아서 새 속성 추가
- xslt - 다른 lv와 동일한 lv에없는 속성의 요소를 count ()하는 방법은 무엇입니까?
- jquery - cliked 요소의 속성과 일치하는 클래스가있는 div를 표시하는 방법은 무엇입니까?
- d3.js - 전환이 진행되는 동안 d3 요소의 속성 값을 얻는 방법은 무엇입니까?
- xslt - XML 요소에서 네임 스페이스 속성 추출
- sql server - 요소 및 속성 이름을 사용하여 컨텐츠를 가져 오는 OPENXML
- c# - xml 네임 스페이스의 속성
- javascript - HTML DOM을 통해 요소에 oninput 속성을 추가하려면 어떻게해야합니까?
- JavaScript의 요소에 대한 CSS 속성 선택
- jsonb 열의 json 속성에있는 배열에서 배열 요소 가져 오기
- python - 특정 속성을 가진 html 요소 포착
- javascript - 조명 요소 VSCode 플러그인 알 수없는 속성 'frameborder'
- python - Selenium을 사용하여 클릭 할 수있는 요소의 href 속성을 얻을 수없는 이유
- Selenium 및 Python을 사용하여 요소의 href 속성을 가져 오는 방법
관련 질문
- java : .xsd 스키마는 로컬에 파일이있는 네임 스페이스를 가져 오지만 외부에서 가져올 수 없습니다. 구현하는 방법?
- java.lang.ClassNotFoundException : com.sun.xml.bind.api.JAXBRIContext
- java : 카드 뷰 고도 색상 변경
- java : Postman에서는 작동하지만 Spring Boot 프로젝트에서는 작동하지 않는 Soap 웹 서비스 호출
- java : set.Visibility (View.GONE) 버튼과 EditText가 사라지지 않고 code를 추가하지 않은 것처럼 표시됩니다.
- java : 스프링 부트에서 XML을 직렬화하고 역 직렬화하는 방법은 무엇입니까?
- java : OpenSAML3.3 (adfs) FederationService.xml을 읽는 올바른 방법?
- Java를 사용하여 AdUnitId를 설정하려면 어떻게해야합니까?
- java.lang.IllegalArgumentException : 결과 맵 컬렉션에 특정 매퍼에 대한 값이 포함되지 않습니다.
- java : 태그 값 00E11을 사용하여 XML에서 JSON으로 변환하면 0이 제공됩니다.
알 수 있듯이 XML 조각은 의미 상 동일합니다. 와이즈 비즈
xmlns
의 속성 요소는 부모 요소의 네임 스페이스를 암시 적으로 상속하므로 중복됩니다. JAXB는 이것을 알고 있으므로AddFixedPriceItemRequest
에 네임 스페이스를 추가하지 않아도됩니다. -필요하지 않습니다.이베이 서버가
AddFixedPriceItemRequest
일 때만 작동하는 경우 와이즈 비즈 XML이 있고 XML이 필요하고 스키마가 요구하는 것 이상으로 입력을 요구하고 있습니다. 이것이 사실이라면 (믿기 어렵지만 가능할 경우) JAXB와 같은 Java XML 문서 모델을 사용하면 XML이 XML 인 것으로 가정하기 때문에 어려움을 겪을 것입니다.AddFixedPriceItemRequest
를 얻는 요소에 대한 저수준 방귀 선언은 필요하지 않기 때문에 API에 노출되지 않습니다.아무것도 당신을 도와주지 않습니다. 내 접근 방식은 JAXB 모델을 DOM 객체에 마샬링하는 것입니다 (
xmlns
사용)xmlns
에 전달 )을 누른 다음 DOM을 수동으로 조정하여DOMResult
를 강제 실행할 수 있는지 확인하십시오. 적절한 장소에서 문서에. 그런 다음 해당 DOM을 XML로 직렬화하여 보낼 수 있습니다.이 작업을 수행 할 필요는 없으며, 어딘가에서 다른 일을하고있는 것 같습니다. 이것은 ebay 웹 서비스가 이렇게 망가 졌을 가능성이 높습니다.
<시간>edit : JAXB-to-DOM-to-XML 솔루션보다 약간 덜 다른 제안이 있습니다. 요청 XML이 구조상 합리적인 정적이고 숫자/문자열 값만 변경 한 경우이를 문자열 템플리트로 정의한 다음 런타임시 값을 바꾸고 전송하십시오. 그런 다음 JAXB를 사용하여 결과를 해석 할 수 있습니다. 웹 서비스 thyat이 매우 정확한 네임 스페이스 접두어를 필요로하는 oast 에서이 작업을 수행했습니다 .Java XML 라이브러리를 설득 할 때 설득력이 없었습니다.