Hola Tengo que escribir un servidor SOAP, donde me gustaría ser capaz de pasar los tipos complejos, structuraly que se vería así:¿Cómo establecer estos tipos complejos en ZEND SOAP AutoDiscovery?
<ParcelDetails>
<countryType></countryType>
<addressType>
<countryType></countryType>
.... .....
.... ....
<contact></contact>
</addressType>
<ParcelDetails>
y yo/m usando siguiente código para generar el archivo WSDL para este servicio
<?php
include_once("Zend/Soap/Wsdl/Strategy/ArrayOfTypeSequence.php");
include_once("Zend/Soap/Wsdl/Strategy/DefaultComplexType.php");
include_once("Zend/Soap/Wsdl/Strategy/Composite.php");
include_once("Zend/Soap/Wsdl/Strategy/ArrayOfTypeComplex.php");
include_once("Zend/Soap/Wsdl/Strategy/AnyType.php");
include_once('Zend/Soap/AutoDiscover.php');
include_once('Zend/Soap/Server.php');
include_once('Zend/Soap/Client.php');
include_once('Zend/Soap/Wsdl.php');
//*************************************
// Classes used by getGroup service method below
class countryTypeSpace
{
/** @var country */
public $country = '';
}
class addressTypeSpace
{
/** @var countryType */
public $countryType = '';
....
/** @var contact */
public $contact = '';
}
class ParcelDetailsSpace
{
/** @var countryType */
public $countryType;
/** @var addressType[] */
public $addressType;
}
//*************************************
class ServiceClass
{
/**
* ParcelDetails
*/
public function registerParcel($username, $pasword) {
$group = new ParcelDetailsSpace();
//fill in the array
for ($i = 1; $i <= 3; $i++) {
$countryType = new countryType();
$countryType->country = 'country';
$addressType = new addressTypeSpace();
$addressType->address = 'Adresas';
$addressType->area = 'Area';
$group->countryType = $countryType;
$group->addressType = $addressType;
}
return $group;
}
}
if(isset($_GET['wsdl'])) {
$autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_AnyType');
$autodiscover->setClass('ServiceClass');
$autodiscover->handle();
} else {
$soap = new Zend_Soap_Server("http://localhost/zs/zserverComplex.php?wsdl");
$soap->setClass('ServiceClass');
$soap->handle();
}
?>
en el cliente final Recibo un error:
Fatal error: Uncaught SoapFault exception: [VersionMismatch] Wrong
Version in C:\Program Files
(x86)\EasyPHP-5.3.8.0\www\zs\Zend\Soap\Client.php:1121 Stack trace:
# 0 C:\Program Files
(x86)\EasyPHP-5.3.8.0\www\zs\Zend\Soap\Client.php(1121):
SoapClient->__soapCall('registerParcel', Array, NULL, NULL, Array)
# 1 C:\Program Files (x86)\EasyPHP-5.3.8.0\www\zs\zclientDpd.php(6):
Zend_Soap_Client->__call('registerParcel', Array)
#2 C:\Program Files
(x86)\EasyPHP-5.3.8.0\www\zs\zclientDpd.php(6):
Zend_Soap_Client->registerParcel(Array)
#3 {main} thrown in C:\Program Files
(x86)\EasyPHP-5.3.8.0\www\zs\Zend\Soap\Client.php on line 1121
Me'v trató diferentes estrategias Zend_Soap_Wsdl_Strategy como se puede ver incluye en la parte superior del archivo del servidor, pero no tiene éxito en absoluto Sé que probablemente me falta algo, pero no estoy seguro de dónde buscar ...
Estaría encantado de que alguien fuera capaz de apuntar a la dirección correcta, sobre estos tipos complejos y la detección automática, por lo menos, si no es la respuesta correcta a este problema
Debido a que no pude conseguir ninguna buena información sobre este
Gracias de antemano