Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/11/2009, 09:47
hiban
 
Fecha de Ingreso: octubre-2006
Mensajes: 5
Antigüedad: 17 años, 6 meses
Puntos: 0
Problema con restriccion en definicion de wsdl

Estoy definiendo un wsdl para un servicio web de la siguiente forma

Código:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions 
	xmlns:soap="ht___schemas.xmlsoap.org/wsdl/soap/"
	xmlns:soapenc="ht___schemas.xmlsoap.org/soap/encoding/" 
	xmlns:mime="ht___schemas.xmlsoap.org/wsdl/mime/"
	xmlns:tns="ht___url.cor/" 
	xmlns:xsd="ht___w3.org/2001/XMLSchema"
	xmlns:soap12="ht___schemas.xmlsoap.org/wsdl/soap12/" 
	xmlns:http="ht___schemas.xmlsoap.org/wsdl/http/"
	targetNamespace="http___url.cor/"
	xmlns:wsdl="ht___schemas.xmlsoap.org/wsdl/">
	<wsdl:documentation>Licitaciones</wsdl:documentation>
	<wsdl:types>
		<xsd:schema elementFormDefault="qualified" targetNamespace="ht___url.cor/">
		
			<xsd:element name="car" type="tns:carType"/>
			
			<xsd:simpleType name="carType">
			  <xsd:restriction base="xsd:short">
			    <xsd:enumeration value="1"/>
			    <xsd:enumeration value="2"/>
			    <xsd:enumeration value="3"/>
			  </xsd:restriction>
			</xsd:simpleType>
			
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="PruebaRequest">
		<wsdl:part name="PruebaRequest" element="tns:car"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="PruebaResponse">
		<wsdl:part name="PruebaResponse" type="xsd:string"></wsdl:part>
	</wsdl:message>		
	<wsdl:portType name="LicitacionWebServiceSoap">
		<wsdl:operation name="Prueba">
			<wsdl:documentation xmlns:wsdl="ht___schemas.xmlsoap.org/wsdl/">Prueba</wsdl:documentation>
			<wsdl:input message="tns:PruebaRequest"></wsdl:input>
			<wsdl:output message="tns:PruebaResponse"></wsdl:output>
		</wsdl:operation>		
	</wsdl:portType>
	<wsdl:binding name="LicitacionWebServiceSoap" type="tns:LicitacionWebServiceSoap">
		<soap:binding transport="ht___schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="Prueba">
			<soap:operation soapAction="ht___url.cor/Prueba"
				style="document" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>						
	</wsdl:binding>
	<wsdl:service name="LicitacionWebService">
		<wsdl:documentation xmlns:wsdl="ht___schemas.xmlsoap.org/wsdl/">Servicio de manejo de licitaciones</wsdl:documentation>
		<wsdl:port name="LicitacionWebServiceSoap" binding="tns:LicitacionWebServiceSoap">
			<soap:address location="ht___url.cor/servidor/servidor2.php" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>
Lo que hace el método prueba escrito en php es devolverme el valor que le pasamos.

Para probarlo uso SOAP UI, creo un proyecto nuevo con mi wsdl e invoco a prueba pasandole un string asdf

Fatal error: SOAP-ERROR: Encoding: Violation of encoding rules in /var/www/vhosts/url.cor/servidor/servidor2.php on line 14

Donde la linea 14 es aquella que se corresponde con $servidor->handle();

Si paso un valor numerico digamos 1, devuelve el valor correcto.

Pero si paso 4 también, u otro valor que no estea en la enumeración por ejemplo 99999999999999999999999999999999 que tampoco debería tragar por ser mayor que un short.

¿Acaso la información de xsd:restriction es solo orientativa para el cliente que construya?

Muchas gracias