2012-08-31 3 views
2

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을 생성 할 수 있습니까?

답변

2

생성 된 ObjectFactory 클래스에는 여러 가지 방법이있을 수 있습니다. 중첩 된 요소에 해당하는 요소에는 메서드 이름에 전체 경로가 내장되어 있습니다.

+0

예제에서는 메서드 이름이 어떻게됩니까? 'ObjectFactory.createStuffContainermyStuff()'? –

+0

@TimGoodman - 그런 식으로, 당신의'ObjectFactory'에 그런 방법이 있습니까? –

+0

아마도 클라이언트에서보다 완벽한 코드 샘플을 얻어야 할 것입니다. –

관련 문제