Ciao ho bisogno di scrivere un server SOAP, dove sarei in grado di passare tipi complessi, structuraly che sarebbe simile a questa:Come impostare questi tipi complessi in ZEND SOAP AutoDiscovery?
<ParcelDetails>
<countryType></countryType>
<addressType>
<countryType></countryType>
.... .....
.... ....
<contact></contact>
</addressType>
<ParcelDetails>
e m I/usando seguente codice per generare file WSDL per questo servizio
<?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();
}
?>
sul lato client che sto ottenendo un errore:
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
I'v provato diverse strategie Zend_Soap_Wsdl_Strategy come si può vedere da include nella parte superiore del mio file server, ma senza successo a tutti So che probabilmente mi manca qualcosa, ma non sono sicuro di dove cercare ...
Sarei felice se qualcuno sarebbe in grado di punto me nella giusta direzione, su questi tipi complessi e di rilevamento automatico, almeno, se non è la risposta giusta a questo problema
Perché non potevo ottenere qualsiasi buone informazioni su questo
Grazie in anticipo