Ich bereite den SOAP-Server und meine WSDL Erzeugung des Folge Code verwendet:Zend Framework 2 SOAP Autoermittlung und komplexe Typen
//(... Controller action code ...)
if (key_exists('wsdl', $params)) {
$autodiscover = new AutoDiscover();
$autodiscover->setClass('WebServiceClass')
->setUri('http://server/webserver/uri');
$autodiscover->handle();
} else {
$server = new Server(null);
$server->setUri($ws_url);
$server->setObject($this->getServiceLocator()->get('MyController\Service\WebServiceClass'));
$server->handle();
}
//(... Controller action code ...)
Aber in einem meiner WebService-Methode habe ich einen Parameter vom Typ Array, in dem jedes Element ist vom Typ "MyOtherClass", wie folgt:
/**
* Add list of MyOtherClass items
*
* @param MyOtherClass[] $items
*
* @return bool
*/
function add($items) {
// Function code here
}
Wenn ich versuche, den WSDL ich die folgenden Fehler erhalten zu generieren:
PHP Warning: DOMDocument::loadXML(): Empty string supplied as input in /<zend framweork path>/Server/vendor/zendframework/zendframework/library/Zend/Soap/Server.php on line 734
Oder diese Ausnahme:
Cannot add a complex type MyOtherClass[] that is not an object or where class could not be found in "DefaultComplexType" strategy.
Wenn ich meinen Code so etwas wie dies hinzugefügt:
//(...)
if (key_exists('wsdl', $params)) {
$autodiscover = new AutoDiscover();
$autodiscover->setClass('WebServiceClass');
$autodiscover->setUri($ws_url);
$complex_type_strategy = new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeComplex();
$complex_type_strategy->addComplexType('MyOtherClass');
$autodiscover->setComplexTypeStrategy($complex_type_strategy);
$autodiscover->handle();
} else {
//(...)
ich die folgende Fehlermeldung erhalten:
Fatal error: Call to a member function getTypes() on a non-object in /<project dir>/vendor/zendframework/zendframework/library/Zend/Soap/Wsdl/ComplexTypeStrategy/AbstractComplexTypeStrategy.php on line 54
In Lebenslauf, die Frage ist, : Wie kann ich auf die WSDL des neuen benutzerdefinierten Typs aufmerksam machen, der als Parameter verwendet wird?
Dank
'MyOtherClass []' sieht mir im PHP-Kontext falsch. Ich möchte versuchen, ein MyOtherClassCollection-Objekt zu erstellen, das die Elemente enthält. – DanielKhan
'MyOtherClass []' definiert ein Array von MyOtherClass-Objekten. Dies ist in PHP für die Zend \ Soap \ AutoDiscover-Modi 'ArrayOfTypeSequence' und' ArrayOfTypeComplex' völlig in Ordnung. –