![]() |
Nota |
|---|---|
|
La clase Si no planea hacer esto, puede omitir esta sección de la documentación. |
El constructor de Zend_Soap_Wsdl recibe tres parámetros:
-
$name- nombre del servicio web que se está describiendo. -
$uri- URI donde estará disponible el WSDL (también puede ser una referencia a un archivo en el sistema de archivos.) -
$strategy- indicador opcional utilizado para identificar la estrategia de detección de tipos complejos (objetos). Antes de la versión 1.7 esto era un booleano$extractComplexTypesy todavía puede establecerse como booleano por compatibilidad con versiones anteriores. Por defecto se establece el comportamiento de detección de la versión 1.6. Para obtener más información sobre las estrategias de detección de tipos complejos, vaya a la sección: Añadir tipos complejos.
El método addMessage($name, $parts) añade una nueva descripción
de mensaje al documento WSDL (elemento /definitions/message).
Cada mensaje corresponde a métodos en términos de la funcionalidad de
Zend_Soap_Server y Zend_Soap_Client.
El parámetro $name representa el nombre del mensaje.
El parámetro $parts es un array de partes del mensaje que describen
los parámetros de la llamada SOAP. Es un array asociativo: 'nombre de
la parte' (nombre del parámetro de la llamada SOAP) => 'tipo de la parte'.
La gestión del mapeo de tipos se realiza mediante los métodos
addTypes(), addTypes() y
addComplexType() (ver más abajo).
![]() |
Nota |
|---|---|
|
Las partes de los mensajes pueden utilizar el atributo 'element' o 'type' para su tipado (ver http://www.w3.org/TR/wsdl#_messages). El atributo 'element' debe referirse a un elemento correspondiente de la definición del tipo de dato. El atributo 'type' se refiere a una entrada complexType correspondiente. Todos los tipos XSD estándar tienen definiciones tanto de 'element' como de 'complexType' (ver http://schemas.xmlsoap.org/soap/encoding/).
Todos los tipos no estándar, que pueden añadirse utilizando el método
Por lo tanto, el método |
El método addPortType($name) añade un nuevo tipo de puerto al
documento WSDL (/definitions/portType) con el nombre de tipo de puerto especificado.
Este une un conjunto de métodos del servicio web definidos en términos de la
implementación de Zend_Soap_Server.
Ver http://www.w3.org/TR/wsdl#_porttypes para más detalles.
El método addPortOperation($portType, $name, $input = false, $output = false, $fault
= false) añade una nueva operación de puerto al tipo de puerto especificado del
documento WSDL (/definitions/portType/operation).
Cada operación de puerto corresponde a un método de clase (si el servicio web se basa
en una clase) o a una función (si el servicio web se basa en un conjunto de métodos) en
términos de la implementación de Zend_Soap_Server.
También añade los mensajes de operación de puerto correspondientes según los parámetros
$input, $output y $fault
especificados.
![]() |
Nota |
|---|---|
|
El componente
|
Ver http://www.w3.org/TR/wsdl#_request-response para más detalles.
El método addBinding($name, $portType) añade una nueva
vinculación al documento WSDL (/definitions/binding).
El nodo 'binding' del documento WSDL define el formato de mensaje y los detalles del protocolo para las operaciones y mensajes definidos por un portType concreto (ver http://www.w3.org/TR/wsdl#_bindings).
El método crea el nodo de vinculación y lo devuelve. Después puede utilizarse para rellenarlo con datos reales.
La implementación de Zend_Soap_Server utiliza el nombre
$serviceName . 'Binding' para el elemento 'binding' del documento WSDL.
El método addBindingOperation($binding, $name, $input = false, $output = false, $fault
= false) añade una operación a un elemento de vinculación
(/definitions/binding/operation) con el nombre especificado.
Recibe como entrada el objeto XML_Tree_Node devuelto por
addBinding() (parámetro $binding)
para añadir el elemento 'operation' con entradas de entrada/salida/fallo dependiendo de
los parámetros especificados.
La implementación de Zend_Soap_Server añade la entrada de
vinculación correspondiente para cada método del servicio web con entradas de entrada y
salida que definen el elemento 'soap:body' como
'<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
Ver http://www.w3.org/TR/wsdl#_bindings para más detalles.
El método addSoapBinding($binding, $style = 'document', $transport =
'http://schemas.xmlsoap.org/soap/http') añade una entrada de vinculación
SOAP ('soap:binding') al elemento de vinculación (que ya está
enlazado a algún tipo de puerto) con el estilo y transporte especificados
(la implementación de Zend_Soap_Server utiliza el estilo RPC sobre HTTP).
El elemento '/definitions/binding/soap:binding' se utiliza para indicar que la vinculación está unida al formato de protocolo SOAP.
Ver http://www.w3.org/TR/wsdl#_bindings para más detalles.
El método addSoapOperation($binding, $soap_action) añade una
entrada de operación SOAP ('soap:operation') al elemento de
vinculación con la acción especificada. El atributo 'style' del elemento
'soap:operation' no se utiliza ya que el modelo de programación (orientado a RPC o a
documentos) puede utilizarse mediante el método
addSoapBinding().
El atributo 'soapAction' del elemento '/definitions/binding/soap:operation' especifica el valor de la cabecera SOAPAction para esta operación. Este atributo es obligatorio para SOAP sobre HTTP y no debe especificarse para otros transportes.
La implementación de Zend_Soap_Server utiliza
$serviceUri . '#' . $methodName como nombre de acción de la operación
SOAP.
Ver http://www.w3.org/TR/wsdl#_soap:operation para más detalles.
El método addService($name, $port_name, $binding, $location)
añade el elemento '/definitions/service' al documento WSDL con el nombre de servicio web,
nombre de puerto, vinculación y ubicación especificados.
WSDL 1.1 permite tener varios tipos de puerto (conjuntos de operaciones) por servicio.
Esta capacidad no se utiliza en la implementación de Zend_Soap_Server
y no está soportada por la clase Zend_Soap_Wsdl.
La implementación de Zend_Soap_Server utiliza:
donde $name es el nombre de la clase para el modo de definición del
servicio web basado en clase, y el nombre del script para el modo de definición del
servicio web basado en un conjunto de funciones.
Ver http://www.w3.org/TR/wsdl#_services para más detalles.
La implementación del descriptor de WSDL de Zend_Soap utiliza el
siguiente mapeo de tipos entre tipos PHP y SOAP:
cadenas PHP <->
xsd:string.enteros PHP <->
xsd:int.flotantes y dobles PHP <->
xsd:float.booleanos PHP <->
xsd:boolean.arrays PHP <->
soap-enc:Array.objeto PHP <->
xsd:struct.clase PHP <-> basado en la estrategia de tipos complejos (ver: esta sección) [28].
void PHP <-> tipo vacío.
Si el tipo no coincide con ninguno de estos tipos por algún motivo, entonces se utiliza
xsd:anyType.
Donde xsd: es el espacio de nombres "http://www.w3.org/2001/XMLSchema",
soap-enc: es el espacio de nombres "http://schemas.xmlsoap.org/soap/encoding/",
tns: es el "espacio de nombres de destino" (target namespace) de un servicio.
El método getType($type) puede utilizarse para obtener el
mapeo de un tipo PHP especificado:
...
$wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
...
$soapIntType = $wsdl->getType('int');
...
class MyClass {
...
}
...
$soapMyClassType = $wsdl->getType('MyClass');
El método addComplexType($type) se utiliza para añadir
tipos complejos (clases PHP) a un documento WSDL.
Es utilizado automáticamente por el método getType() para
añadir los tipos complejos correspondientes de los parámetros de método o los tipos
de retorno.
Su algoritmo de detección y construcción se basa en la estrategia de detección
activa actualmente para tipos complejos. Puede establecer la estrategia de detección
especificando el nombre de la clase como cadena o una instancia de una
implementación de Zend_Soap_Wsdl_Strategy_Interface como
tercer parámetro del constructor, o utilizando la función
setComplexTypeStrategy($strategy) de
Zend_Soap_Wsdl. Las siguientes estrategias de detección
existen actualmente:
Clase
Zend_Soap_Wsdl_Strategy_DefaultComplexType: Habilitada por defecto (cuando no se establece el tercer parámetro del constructor). Itera sobre los atributos públicos de un tipo de clase y los registra como subtipos del tipo de objeto complejo.Clase
Zend_Soap_Wsdl_Strategy_AnyType: Convierte todos los tipos complejos en el tipo XSD simple xsd:anyType. Tenga cuidado, este atajo para la detección de tipos complejos probablemente solo pueda ser manejado con éxito por lenguajes débilmente tipados como PHP.Clase
Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence: Esta estrategia permite especificar parámetros de retorno del tipo:int[]ostring[]. A partir de la versión 1.9 de Zend Framework puede manejar tanto tipos PHP simples como int, string, boolean, float, así como objetos y arrays de objetos.Clase
Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex: Esta estrategia permite detectar arrays de objetos muy complejos. Los tipos de objeto se detectan basándose enZend_Soap_Wsdl_Strategy_DefaultComplexTypey se envuelve un array alrededor de esa definición.Clase
Zend_Soap_Wsdl_Strategy_Composite: Esta estrategia puede combinar todas las estrategias conectando tipos complejos PHP (nombres de clase) a la estrategia deseada mediante el métodoconnectTypeToStrategy($type, $strategy). Se puede proporcionar un mapa de tipos completo al constructor como un array con pares$type->$strategy. El segundo parámetro especifica la estrategia por defecto que se utilizará si se solicita añadir un tipo desconocido. Este parámetro por defecto es la estrategiaZend_Soap_Wsdl_Strategy_DefaultComplexType.
El método addComplexType() crea el elemento
'/definitions/types/xsd:schema/xsd:complexType' para
cada tipo complejo descrito con el nombre de la clase PHP
especificada.
La propiedad de la clase DEBE tener una sección de docblock con el tipo PHP descrito para que la propiedad se incluya en la descripción WSDL.
addComplexType() comprueba si el tipo ya está descrito
dentro de la sección de tipos del documento WSDL.
Esto evita duplicaciones si este método se llama dos o más veces, y recursión en la sección de definición de tipos.
Ver http://www.w3.org/TR/wsdl#_types para más detalles.
El método addDocumentation($input_node, $documentation) añade
documentación legible por humanos utilizando el elemento opcional 'wsdl:document'.
El elemento '/definitions/binding/soap:binding' se utiliza para indicar que la vinculación está unida al formato de protocolo SOAP.
Ver http://www.w3.org/TR/wsdl#_documentation para más detalles.
Los métodos toXML(), toDomDocument() y
dump($filename = false) pueden utilizarse para obtener el
documento WSDL como XML, estructura DOM o un archivo.
[26]
El espacio de nombres 'tns:' se define como el
URI del script ('http://' .$_SERVER['HTTP_HOST']
. $_SERVER['SCRIPT_NAME']).
[27]
'http://' .$_SERVER['HTTP_HOST'] .
$_SERVER['SCRIPT_NAME']
[28]
Por defecto, Zend_Soap_Wsdl se creará
con la clase
Zend_Soap_Wsdl_Strategy_DefaultComplexType
como algoritmo de detección para tipos complejos. El primer
parámetro del constructor de AutoDiscover admite cualquier
estrategia de tipos complejos que implemente
Zend_Soap_Wsdl_Strategy_Interface o una
cadena con el nombre de la clase. Por compatibilidad con versiones
anteriores, las variables booleanas
$extractComplexType se interpretan de la
siguiente manera: si es TRUE,
Zend_Soap_Wsdl_Strategy_DefaultComplexType,
si es FALSE,
Zend_Soap_Wsdl_Strategy_AnyType.
![[Note]](images/note.png)