2013-07-08 4 views
2

서비스 스텁을 생성하기 위해 Axis2를 사용하는 .NET WCF 서비스 및 Java 응용 프로그램이 있습니다. (선택 사항) 속성을 WCF의 데이터 계약에 추가하고 을 속성 목록 (역 호환 호환이어야 함) 끝에 정렬하면 Java 응용 프로그램에서 예상하지 못한 하위 요소이 발생합니다. 이 문제를 해결할 수있는 유일한 방법은 Axis2의 스텁을 다시 생성하고 Java 응용 프로그램을 재배포하는 것입니다. 필자의 경우에는 받아 들일 수있는 방법이 아닙니다.Axis2 : WSDL에 불필요한 속성을 추가 할 때 "예기치 않은 하위 요소"오류가 발생하지 않도록하십시오.

분명히하기 위해 속성 순서가 변경되지 않았으므로 WSDL이 유효합니다. org.apache : 버전이 오류가 발생 후에

<!-- BEFORE --> 
<xs:complexType name="MyObject"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

<!-- AFTER --> 
<xs:complexType name="MyObject"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/> 
     <xs:element minOccurs="0" name="MyNewProperty" nillable="true" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

: 여기 (이하 "예기치 않은 하위 요소"오류가 발생합니다)을 (자바 응용 프로그램이 작동) 전에서 WSDL에서 유형의 예 후에입니다. axis2.AxisFault : org.apache.axis2.databinding.ADBException : 예기치 않은 하위 요소 {HTTP : //mycompany.com/services/}MyNewProperty

는 이런 일이 발생을 방지하기 위해 우리가 Axis2와 함께 할 수있는 뭔가가 있나요? 그렇지 않다면, WSDL이나 WCF 측면에서 우리가해야 할 다른 것이 있습니까?

답변

2

XML 스키마의 관점에서 볼 때 하위 호환 가능 변경 사항이 아닌 것으로 보입니다. !

Invalid per cvc-complex-type.1.2.4: element {None}:MyNewProperty not allowed here (2) in element {None}:MyObject, expecting [$]:

내가 찾을 수 없습니다 : - 전 - 나는 당신의 <에 대해 메시지를

<MyObject> 
    <Name>Primus Secundus</Name> 
    <MyNewProperty>Addita notitia</MyNewProperty> 
</MyObject> 

의 유효성을 검사 XSV을 요구하는 경우에> 스키마, 나는 MyNewProperty이 잘못되었음을 나타내는 오류 XML 스키마 문서 (http://www.w3.org/TR/xmlschema-1/) 또는 SOAP 버전 (http://www.w3.org/TR/soap/)의 내용으로, 새 속성에 대한 새 요소가있는 시퀀스를 확장해야 함을 나타냅니다.


내가 http://www.w3.org/2001/03/webdata/xsv에서 XSV을 사용하고 다음 래퍼의 데이터를 업로드 님이 스키마에 대한 유효하지 비록 이것을 받아 들일 수

<?xml version="1.0"?> 
<wrapper xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="#mySchema"> 
    <xs:schema id="mySchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:element name="wrapper"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:any/> 
        <xs:element name="MyObject" type="MyObject"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <!-- BEFORE --> 
     <xs:complexType name="MyObject"> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:schema> 
    <MyObject> 
     <Name>Primus Secundus</Name> 
     <MyNewProperty>Addita notitia</MyNewProperty> 
    </MyObject> 
</wrapper> 
+0

축에서 데이터 바인딩을위한 JAXB를 사용하여, 유사한 WCF 클라이언트가 이러한 변경 사항을 비 중단으로 간주하는 방법 – Cirdec

+0

감사합니다. 이것은 필자의 변경 사항이 이전 버전과 호환되었다는 내 생각을 밝혀줍니다. 그러나 나는 여전히 해결책이 필요하다. – Keith

+1

나는 여전히 하나를 찾고있다. 우리는 수년간 이런 식으로 WCF를 사용 해왔지만 지금은 Axis를 사용하는 고객이 하나 있습니다. 따라서 반환 유형에 속성을 추가 할 때는 큰 변화입니다. , 아마도"lax "또는"skip "la 일 수 있습니다. http://msdn.microsoft.com/en/ -us/library/aa468563.aspx 또는 : 모든 변경 사항에 대한 끝점을 추가하십시오. – Cirdec

관련 문제