2012-03-16 12 views
6

Sto lavorando a un servizio web SOAP che presenta molti campi di input che utilizzano restrizioni di enumerazione.Limitazione di enumerazione WSDL con coppie chiave/valore

Queste enumerazioni sono molto simili a una selezione di opzioni/opzioni HTML; Mi aspetto che venga restituito un certo valore, ma l'etichetta di quel valore dovrebbe essere esposta anche usando il WSDL.

Un esempio: il cliente desidera aggiungere una polizza assicurativa riguardante la propria casa e quindi deve specificare il tipo di edificio interessato.

<xsd:restriction base="xsd:string"> 
    <xsd:enumeration value="00001" /> 
    <xsd:enumeration value="00002" /> 
    <xsd:enumeration value="00003" /> 
</xsd:restriction> 

Tuttavia, il client non ha ancora capito quali sono questi valori 1, 2 e 3. Quindi, qualcosa del genere:

<xsd:restriction base="xsd:string"> 
    <xsd:enumeration value="00001" label="Brick and mortar" /> 
    <xsd:enumeration value="00002" label="Straw" /> 
    <xsd:enumeration value="00003" label="Aircastle" /> 
</xsd:restriction> 

sarebbe ottimo per il client da utilizzare per visualizzare queste etichette al consumatore.

Esiste qualche annotazione/sintassi WSDL standard per questa costruzione?

risposta

6

Esiste qualche annotazione/sintassi WSDL standard per questa costruzione?

Ho paura di no. Lo schema XML enumeration viene utilizzato per vincolare un valore in un set specificato di valori possibili. Quando il cliente ti invia la richiesta, l'elemento con il tipo di restrizione avrà solo (nel tuo caso) un valore di 00001, 00002 o 00003 o non sarà valido.

La restrizione specifica solo i valori, non è possibile aggiungere etichette. Si potrebbe al massimo aggiungere uno <annotation> ma sarebbe solo una documentazione. Nell'interfaccia utente del client, sarebbe responsabilità di ogni cliente dire che 00001 è effettivamente "Brick and mortar" e che 00002 è "Straw" ecc.

Se non si desidera farlo, e invece si desidera per tornare anche le etichette, allora avete bisogno di un oggetto un po 'più complessa, forse qualcosa di simile:

<option> 
    <key>00001</key> 
    <label>Brick and mortar</label> 
</option> 

È fornire un'etichetta e di limitare la chiave con uno schema simile:

<xsd:simpleType name="ValuesType"> 
    <xsd:restriction base="xsd:string"> 
    <xsd:enumeration value="00001" /> 
    <xsd:enumeration value="00002" /> 
    <xsd:enumeration value="00003" /> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:complexType name="OptionType"> 
    <xsd:sequence> 
     <xsd:element name="key" type="ValuesType" /> 
     <xsd:element name="label" type="xsd:string" /> 
    </xsd:sequence> 
</xsd:complexType> 

È possibile tornare un elenco di opzioni per i clienti e possono presentarlo nell'interfaccia con key come valore e label come testo delle opzioni negli ingressi <select>, mentre sulla richiesta si otterrà il valore selezionato (ad es. lo key selezionato).

+0

sono riuscito a farlo funzionare aggiungendo "tns:" prima di "ValuesTypes" come BMaximus