상속

2012-07-19 5 views
0

누군가가 (xsd1 또는 xsd2)이 XSD 부품의 whitch 말씀 해주십시오 수 아래의 샘플 코드 유효 A 및 추가 속성이 없습니다.상속

xsd1 : wsimport를 사용하여 xsd의이 부분이 포함 된 wsdl 파일의 코드를 생성하면 모든 요소 A와 B가 생성됩니다. 그러나 svcutil을 사용하면 생성됩니다 클래스 A.

<xs:element name="B" nillable="true" type="tns:A" /> 
<xs:complexType name="A"> 
    <xs:sequence> 
     <xs:element name="prop1" type="xs:string"/> 
     <xs:element name="prop2" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:element name="A" nillable="true" type="tns:A" /> 

xsd1이 경우 모두 wsimport의와는 svcutil이 모든 요소, A와 B를 생성합니다

<xs:complexType name="B"> 
    <xs:complexContent mixed="false"> 
     <xs:extension base="tns:A"> 
      <xs:sequence /> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 
<xs:element name="B" nillable="true" type="tns:A" /> 
<xs:complexType name="A"> 
    <xs:sequence> 
     <xs:element name="prop1" type="xs:string"/> 
     <xs:element name="prop2" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:element name="A" nillable="true" type="tns:A" /> 

그래서, 내 질문은 ...이 첫 번째 정의가 유효하다?

답변

1

올바른 해결책은 두 번째 것입니다. complexTypes를 클래스로, 요소를 인스턴스로 생각하면 어쩌면 더 나은지 설명 할 수 있습니다.

첫 번째 xsd에서 실제로 A 클래스의 두 인스턴스 (A와 B)를 선언하고 있습니다. 두 번째 인스턴스에서는 동일한 클래스의 두 인스턴스를 계속 선언하지만 B 클래스에 대한 정의도 포함합니다.

는 사실, 나는 그것이 더 정확할 것이다 가정

<xs:element name="B" nillable="true" type="tns:B" /> 

<xs:element name="B" nillable="true" type="tns:A" /> 
이상