tengo entendido que en hay problemas con la extension SOAP de php5 para la transferencia de objetos u objetos anidados, el caso es que aqui te muestro una de las tantas formas de solucionarlo.
Código PHP:
<?php
abstract class SoapWrapper {
public function getAsSOAP() {
foreach($this as $key=>&$value) {
$this->prepareSOAPrecursive($this->$key);
}
return $this;
}
private function prepareSOAPrecursive(&$element) {
if(is_array($element)) {
foreach($element as $key=>&$val) {
$this->prepareSOAPrecursive($val);
}
$element=new SoapVar($element,SOAP_ENC_ARRAY);
}elseif(is_object($element)) {
if($element instanceof SoapWrapper) {
$element->getAsSOAP();
}
$element=new SoapVar($element,SOAP_ENC_OBJECT);
}
}
// ------------------------------------------
// Ejemplo de uso
// ------------------------------------------
class PersonList extends SoapWrapper {
protected $ArrayOfPerson;
}
class Person extends SoapWrapper {
}
$client=new SoapClient("demo.wsdl", array( 'soap_version'=>SOAP_1_2, 'trace'=>1, 'classmap' => array('Person' => "Person", 'PersonList' => "PersonList") ));
$PersonList=new PersonList;
$PersonList->getAsSOAP();
//Continuas aqui con tus metodos u operaciones.
?>
por tanto, cada clase que necesite realizar transferencias via SOAP, deberá extender desde
SoapWrapper.
Como puedes ver, en el código anterior, la función prepareSOAPrecursive busca objetos anidados en los nodos padres o en arreglos de objetos, de ser asi, entonces intenta llamar a la funcion
getAsSOAP() para preparar los objetos anidados y pasar por el SoapVar.
lo unico que tendras que hacer es siempre antes de transmitir $ obj-> getAsSOAP () y listo.
Enjoy it!...