尝试通过php webservice发送数组时出现异常

时间:2015-01-13 12:59:04

标签: java php arrays web-services wsdl

当我试图在Android客户端获取数组对象时,我收到此错误:

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG (empty) <br>@1:7 in java.io.InputStreamReader@415f48e0) 

我在这里读到了一些关于这个问题的答案,他们说这是因为名称空间或url或soap命令之类的参数是错误的。事实并非如此。

我正在尝试使用nusoap构建一个PHP Web服务并调用其中一个方法。该方法应该返回一个数组:

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;
    }
}

尝试返回内部包含该person对象的数组时会发生此问题。当我这样做时,我在客户端获得上述例外。 如果我试图返回null,它会毫无例外地工作。如果我试图在没有将person对象推入内部的情况下返回数组,我会得到一个没有任何异常的空数组。我尝试更改方法只返回类型为Person的对象而不是数组,它也可以工作。只有在尝试返回一个内部有对象的数组时,我才会得到异常。你也许明白为什么?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。我使用Visual Studio将服务添加到新的sln,在那里我设法找到一种方法来查看从Web服务返回的SOAP消息。 似乎nusoap.php文件中有警告。在当前版本中,它位于第6132行:

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

由于某种原因,此警告已添加到返回的SOAP消息中,这使得解析器无法识别消息的内容。在我评论出这条线后,问题得到解决。