StuffContainer를 호출 할 객체를 예상하는 WCF 서비스가 있습니다. 우리의 클라이언트는 JAXB를 사용하여 XML 직렬화 된 StuffContainer를 생성하려고 시도하고 있지만 잘못되었습니다. 그들은 속성 이름을 가져야하는 유형 이름으로 끝나기 때문에 그것을 역 직렬화 할 수 없습니다.왜 JAXB가 내 WCF 서비스에 잘못된 XML을 생성합니까?
JAXB에 대해 아무것도 모르지만 XML 직렬화 된 객체를 작성하는 데 사용할 수있는 XSD를 기반으로 자동 생성 클래스를 만듭니다.
<StuffContainer xmlns="..."><ArrayOfStuff>...</ArrayOfStuff></StuffContainer>
:
ObjectFactory objectFactory = new ObjectFactory();
ArrayOfStuff arrayOfStuff = objectFactory.createArrayOfStuff();
JAXBElement<ArrayOfStuff> arrayOfStuffJAXBElement = objectFactory.createArrayOfStuff(arrayOfStuff);
StuffContainer stuffContainer = objectFactory.createStuffContainer();
stuffContainer.setStuff(arrayOfStuffJAXBElement);
여기에 그들이 받고있는 XML은 다음과 같습니다
<xs:complexType name="StuffContainer">
<xs:sequence>
<xs:element minOccurs="0" name="myStuff" nillable="true" type="tns:ArrayOfStuff"/>
</xs:sequence>
</xs:complexType>
...
<xs:complexType name="ArrayOfStuff">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Stuff" nillable="true" type="tns:Stuff"/>
</xs:sequence>
</xs:complexType>
우리의 클라이언트의 코드는 다음과 같은 :
는 여기에 우리의 자동 생성 된 XSD 관련 조각의
하지만 필요합니다 :
<StuffContainer xmlns="..."><myStuff>...</myStuff></StuffContainer>
나는 그들이 objectFactory
에서 받고있는 JAXBElement<ArrayOfStuff>
가 "ArrayOfStuff"
과의 QName
설정을 가지고 있기 때문에이 생각,이 대신 속성 이름 myStuff
의 익숙해 끝납니다. 하지만 JAXB에 대해 아무 것도 모른다고 말했듯이, 나는 그들이 무엇을 다르게해야하는지 확신하지 못합니다.
XSD에서 변경할 수있는 것이 있습니까? 아니면 클라이언트에 코드 변경을 요청하여 올바른 XML을 생성 할 수 있습니까?
예제에서는 메서드 이름이 어떻게됩니까? 'ObjectFactory.createStuffContainermyStuff()'? –
@TimGoodman - 그런 식으로, 당신의'ObjectFactory'에 그런 방법이 있습니까? –
아마도 클라이언트에서보다 완벽한 코드 샘플을 얻어야 할 것입니다. –