Pergunta

Eu gostaria de devolver um objeto usando zend_soap. Eu também quero o objeto fornecido no arquivo WSDL. Mas não consigo fazer os dois trabalharem juntos. É um ou outro.

1. WSDL funcionando, mas objeto não retornando

Se no phpdoc da minha função no script do servidor de sabão, escrevo

 @return Application_Model_Soap_Test

Eu posso ver isso no arquivo wsdl

<message name="getPostcodeOut">
    <part name="return" type="tns:Application_Model_Soap_Test"/>
</message>

Mas quando eu corro o script, ele retorna uma aula vazia:

stdClass Object
(
)

2. Obtenha objeto, mas WSDL errado

Se eu alterar a informação phpdoc da função do servidor para

@return mixed Application_Model_Soap_Test

Recebo um objeto de volta com informações:

stdClass Object
(
    [name] => Fred
    [age] => 40
)

Mas o arquivo WSDL está errado

<message name="getPostcodeOut">
    <part name="return" type="xsd:anyType"/>
</message>

Alguma ideia? Obrigado.

Foi útil?

Solução

Você precisa passar uma variável de opção 'Classmap' no cliente.

Veja os dois http://www.php.net/manual/en/soapclient.soapclient.php e http://www.php.net/manual/en/soapclient.soapclient.php Sobre a opção 'ClassMap' passada na matriz de opções.

Basicamente, deve ser uma matriz mapeando suas classes para as classes definidas como os objetos retornados no arquivo WSDL.

Outras dicas

Você tentou desligar o cache?

No PHP, como você pode limpar um cache WSDL?

Eu tive o mesmo problema. Cada solicitação que eu fiz devolveu -me um stdclass vazio, mesmo que o WSDL estivesse correto. Depois de desativar o cache, funcionou bem para mim. De uma chance.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top