2015-01-13 2 views
1

Когда я пытаюсь получить массив объектов на стороне клиента Android Я получаю эту ошибку:Исключение при попытке отправить массив с помощью PHP веб-сервиса

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG (empty) <br>@1:7 in [email protected]) 

Я читал некоторые из ответов здесь для этой задачи и они говорят, потому что параметры, такие как пространство имен или команда url или soap, были неправильными. Это не тот случай.

Я пытаюсь создать веб-службу PHP с помощью nusoap и вызвать один из методов. Метод должен возвращать массив:

function GetAllWorkerUsers($id,$Password) 
{ 
    $ret_array=array(); 
    $person=new Person(12, 11, 11, "First", "Last", true, "12345", 0); 
    array_push($ret_array, $person->GetWsdlObj()); 
    return $ret_array; 
} 

Person класс:

class WorkerUser 
{ 
    public $id; 
    public $id2; 
    public $id3; 
    public $name1; 
    public $name2; 
    public $somebool; 
    public $name3; 
    public $id4; 


    function __construct($id, $id2, $id3, $name1, $name2, $somebool, $name3, $id4) 
    { 
     $this->id = $id; 
     $this->id2= $id2; 
     $this->id3= $id3; 
     $this->name1= $name1; 
     $this->name2= $name2; 
     $this->somebool= $somebool; 
     $this->name3= $name3; 
     $this->id4= $id4; 
    } 

    function GetWsdlObj() 
    { 
     $obj['id']= $this->id; 
     $obj['id2']=$this->id2; 
     $obj['id3']=$this->id3; 
     $obj['name1']=$this->name1; 
     $obj['name2']= $this->name2; 
     $obj['somebool']=$this->somebool; 
     $obj['name3']=$this->name3; 
     $obj['id4']=$this->id4; 
     return $obj; 
    } 
} 

проблема возникает при попытке вернуть массив с этим человеком объектом внутри. Когда я это делаю, я получаю на стороне клиента исключение выше. Если я пытаюсь вернуть null, он работает без исключения. Если я пытаюсь вернуть массив без нажатия объекта person внутри, я получаю пустой массив без каких-либо исключений. Я попытался изменить метод, чтобы возвращать только объект типа Person не в массив, и он также работает. Только при попытке вернуть массив с объектом внутри я получаю исключение. Вы, наверное, понимаете, почему?

+0

Итак, вы получаете исключение * после * вы возвращаете массив или когда вы инициализируете объект? Можете ли вы var_dump '$ person' и' $ ret_array'? – vanamerongen

+1

Похоже, что вы передаете пробел/
перед объектом. (заметьте, это просто быстрый взгляд). Посмотрите, можете ли вы получить вывод, который вы отправляете в браузере, и проверить источник. Возможно, у вас есть пробел/новая строка в вашем скрипте получения php, который заменяется на
или что-то подобное. – Joeblade

+0

@vanamerongen исключение происходит после того, как я возвращаю массив. Нет никакой проблемы с инициализацией массива или в создании объекта или при нажатии объекта на массив (проверял его на стороне сервера с помощью try catch). –

ответ

0

Я нашел проблему. Я использовал Visual Studio, чтобы добавить службу в новый sln, и там мне удалось найти способ просмотра сообщения SOAP, которое было возвращено из веб-службы. Кажется, что было предупреждение в файле nusoap.php. в текущей версии она была в строке 6132:

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

Это предупреждение было добавлено в возвращенном сообщении SOAP для какой-то причине, и что сделал синтаксический анализатор не распознает содержание сообщения. После того, как я прокомментировал эту строку, проблема была исправлена.

Смежные вопросы