2013-05-23 22 views
5

XML ve web hizmetlerine yeni bir java programcısıyım. Aşağıdaki kod parçasını içeren bir XSD'ye (yazmamıştım) uyan bir xml belgesi oluşturmaya çalışıyorum. Yapmak istediğim, posta göndermek için bu web servisini aramak. "Tns: CopyRequest" soyut tipinde olan kopya denen bir eleman var. Öğenin türü soyut olduğundan, Eclipse bana bir tane oluşturamadığımı söyler. Bir CopyMailingRequest tipi var (istediğim gibi geliyor), ancak bu türden bir öğe olmadığından onu nasıl başlatacağından emin değilim. Neyi kaçırıyorum?Bir soyut XSD öğesi örneği nasıl oluşturulur

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

<xs:complexType name="CopyMailingRequest"> 
    <xs:complexContent> 
    <xs:extension base="tns:CopyRequest"> 
     <xs:sequence> 
     <xs:element name="fromId" type="tns:MailingId"/> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="StandardMailingId"> 
    <xs:complexContent> 
    <xs:extension base="tns:MailingId"/> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="MailingId"> 
    <xs:complexContent> 
    <xs:extension base="tns:ObjectId"/> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="CopyRequest" abstract="true"> 
    <xs:sequence> 
    <xs:element name="newName" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 
daha kolay altında minimal modifiye şema olup, takip etmek yapmak için

cevap

9

(keyfi targetNamespace ile şema öğesi eklendi ve objectId için bir kukla tanımını eklendi):

<?xml version="1.0" encoding="utf-8" ?> 
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> 
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:tns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="copy" nillable="true" type="tns:CopyRequest"/> 

    <xs:complexType name="CopyMailingRequest"> 
     <xs:complexContent> 
      <xs:extension base="tns:CopyRequest"> 
       <xs:sequence> 
        <xs:element name="fromId" type="tns:MailingId"/> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="StandardMailingId"> 
     <xs:complexContent> 
      <xs:extension base="tns:MailingId"/> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="MailingId"> 
     <xs:complexContent> 
      <xs:extension base="tns:ObjectId"/> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="ObjectId"/> 

    <xs:complexType name="CopyRequest" abstract="true"> 
     <xs:sequence> 
      <xs:element name="newName" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Bu ne bir olduğunu otomatik (ve geçerli) oluşturulan örnek XML XSD için görünecektir:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) --> 
<copy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CopyMailingRequest" xmlns="http://tempuri.org/XMLSchema.xsd"> 
    <newName>newName1</newName> 
    <fromId/> 
</copy> 

burada esas nokta xsi:type="CopyMailingRequest" olduğu; senaryonuzda bu şekilde somut bir tip sağlıyorsunuz.