2012-03-16 28 views
6

Estoy trabajando en un servicio web SOAP que presenta muchos campos de entrada que usan restricciones de enumeración.Restricción de enumeración WSDL con pares clave/valor

Estas enumeraciones son muy parecidas a una configuración de selección/opción HTML; Espero que se devuelva un determinado valor, pero la etiqueta de ese valor también debe exponerse utilizando el WSDL.

Un ejemplo: el cliente desea agregar una póliza de seguro con respecto a su casa y por lo tanto necesita especificar el tipo de edificio involucrado.

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

Sin embargo, el cliente aún no comprende qué son estos valores 1, 2 y 3. Por lo tanto, algo como esto:

<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> 

sería ideal para que el cliente se utilice para mostrar estas etiquetas al consumidor.

¿Hay alguna anotación/sintaxis WSDL estándar para esta construcción?

Respuesta

6

¿Hay alguna anotación/sintaxis estándar WSDL para esta construcción?

Me temo que no. El esquema XML enumeration se usa para restringir un valor para que esté dentro de un conjunto específico de valores posibles. Cuando su cliente le envía la solicitud, el elemento con el tipo de restricción solo tendrá (en su caso) un valor de 00001, 00002 o 00003 o no será válido.

La restricción solo especifica los valores, no puede agregar etiquetas. En el mejor de los casos, podría agregar <annotation>, pero eso sería solo documentación. En la IU del cliente, sería responsabilidad de cada cliente decir que 00001 es realmente "Ladrillo y mortero" y que 00002 es "Paja", etc.

Si no quiere hacer eso, y en su lugar desea también volver etiquetas, entonces necesita un objeto un poco más compleja, tal vez algo como esto:

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

Tiene que poner una etiqueta y se restringe la llave con un esquema como:

<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> 

puede volver una lista de opciones para los clientes y pueden presentarla en la interfaz con key como valor y label como el texto de las opciones en <select> entradas, mientras que en la solicitud se recuperará el valor seleccionado (es decir, el key seleccionado).

+0

logré que funcione agregando "tns:" antes de "ValuesTypes" como BMaximus