Хорошо, у меня есть мыльный клиент php, который вызывает метод и правильно получает некоторую информацию, он может захватывать простые типы, такие как строки или даже объекты, но когда он переходит к массиву некоторого типа (в данном случае Strings), он всегда возвращается как пустой объект. Я пытался привести его к массиву и ко многим другим вещам, но каждый параметр, который я использую, всегда возвращает одно и то же.
Вот некоторая справочная информация:
Это веб-сервис, который я создал в java с помощью eclipse. Я также автоматически сгенерировал Java-клиент для тестирования веб-службы перед созданием клиента в php. Я создал несколько тестовых случаев, которые использовали автоматически сгенерированный Java-клиент (прокси-класс) и успешно вернули правильное ожидаемое значение. Другими словами, у java не было проблем с тем, чтобы взять этот массив строк и показать мне каждое значение. Я сделал это, чтобы определить, была ли проблема на стороне сервера или на стороне клиента, и пока она больше указывает на сторону клиента.
Далее, у мыльного клиента php есть хорошая функция, где, если вы установите опции для включения ("trace" => 1), вы можете вызвать __getLastResponse (), чтобы посмотреть, как выглядит ответ xml, так что вот оно:
< ?xml version="1.0" encoding="utf-8"?>
< soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
< soapenv:Body>
< getAllCarClassesIdsAsWsCarClassIdsResponse xmlns="X">
< getAllCarClassesIdsAsWsCarClassIdsReturn>
< carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< carClassIds>X< /carClassIds>
< /carClassIds>
< /getAllCarClassesIdsAsWsCarClassIdsReturn>
< /getAllCarClassesIdsAsWsCarClassIdsResponse>
< /soapenv:Body>
< /soapenv:Envelope>
Обратите внимание, что некоторые значения были заменены на X в целях безопасности. Кроме того, у xml есть дополнительный пробел после открывающей скобки, потому что я не мог найти способ разместить xml иначе. Прошу прощения, если трудно читать.
Дело в том, что в ответе указаны правильные значения (эти X должны быть в массиве строк), но вместо этого я все еще вижу пустой объект. Ниже приводится var_dump объекта полного ответа:
object(WsCarClassIds)#4 (1) {
["carClassIds"]=>
object(stdClass)#5 (0) {
}
}
Ниже приведен var_dump объекта после использования на нем get_object_vars ():
array(1) {
["carClassIds"]=>
object(stdClass)#5 (0) {
}
}
А ниже - var_dump объекта, за которым следует var_dump, приведенная к массиву с использованием (array) $ carClassIds:
object(stdClass)#5 (0) {
}
array(0) {
}
В случае, если информация полезна, вот фрагмент файла wsdl, который содержит «сложный тип», который должен быть массивом строк:
< complexType name="ArrayOf_xsd_string">
< sequence>
< element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:string"/>
< /sequence>
< /complexType>
Кроме того, я хочу добавить, что я уже пытался добавить функцию «SOAP_USE_XSI_ARRAY_TYPE» внутри массива параметров при создании экземпляра SOAP-клиента. На многих форумах было предложено заняться десерализацией «ArrayOf_xsd_string». Добавление опции не дало эффекта.
Я также попытался добавить это в начало моего кода:
ini_set ('soap.wsdl_cache_enabled', 0);
Что говорит клиенту отключить кэширование wsdl, что также не привело к изменениям.
Я поместил здесь много информации, но я готов поместить все, что может понадобиться для решения этой проблемы. Я работал над этим почти 2 полных, очень долгих дня и, похоже, не могу найти решение. Любая помощь будет высоко ценится, спасибо.
-Asaf