2011-09-27 12 views
5

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

risposta

1

Potrei essere fuori dal mio campionato qui, ma ho appena scritto un servizio web in PHP usando NuSOAP, e permette s tu per definire tipi complessi e genera il WSDL per te.

potrebbe essere qualcosa di controllare: http://www.scottnichol.com/nusoapintro.htm

In NuSOAP, per creare un tipo complesso come quello che hai fornito, il codice sarebbe simile a questa:

$server = new nusoap_server(); 

$server->wsdl->addComplexType(
    "addressType", 
    "complexType", 
    "struct", 
    "all", 
    "", 
    array(
     "countryType" => array("name" => "countryType", "type" => "xsd:string"), 
     ... 
     "contact" => array("name" => "contact", "type" => "xsd:string") 
    ) 
); 

$server->wsdl->addComplexType(
    "ParcelDetails", 
    "complexType", 
    "struct", 
    "all", 
    "", 
    array(
     "countryType" => array("name" => "countryType", "type" => "xsd:string"), 
     "addressType" => array("name" => "addressType", "type" => "tns:addressType") 
    ) 
); 
Problemi correlati