Вопрос

Я хотел бы вернуть объект, используя zend_soap. Я также хочу, чтобы объект, указанный в файле WSDL. Но я не могу получить оба работать вместе. Это либо один, либо другой.

1. WSDL работает, но объект не возвращается

Если в PHPDOC мою функцию на сценарии SOAP-сервера я пишу

 @return Application_Model_Soap_Test

Я вижу это в файле WSDL

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

Но когда я запускаю скрипт, он возвращает пустой класс:

stdClass Object
(
)

2. Получить объект, но неправильный WSDL

Если я изменю информацию о PHPDOC функции сервера в

@return mixed Application_Model_Soap_Test

Я получаю объект обратно с информацией:

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

Но файл WSDL не прав

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

Есть идеи? Спасибо.

Это было полезно?

Решение

Вам нужно передать опцию «ClassMap» в клиенте.

Увидеть оба http://www.php.net/manual/en/soapclient.soapclient.php. а также http://www.php.net/manual/en/soapclient.soapclient.php. О параметре «ClassMap» передается в массиве опциона.

В основном это должно быть массив, отображающий ваши классы на классы, определенные как возвращенные объекты в файле WSDL.

Другие советы

Вы пытались отключить кэширование?

В PHP Как вы можете очистить кеш WSDL?

У меня такая же проблема. Каждый запрос, который я сделал, вернул мне пустой stdclass, хотя WSDL был правильным. После отключения кэширования это работало нормально для меня. Дайте это попробовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top