错误:注意:尝试获取非对象的属性

时间:2014-10-09 08:49:21

标签: java php web-services

我正在开发一个需要Java和PHP技术的项目。我使用Java来实现我的业务逻辑和数据源管理,而PHP有助于使用我使用Java提供的Web服务。 我的问题: 当我从Web服务使用响应并且结果包含多个返回集合时,程序运行正常。 (http://driesmeers.mamca.be/images/successpage.png) 但是,一旦结果只返回一个集体响应,我就会收到如下所示的错误。 (http://driesmeers.mamca.be/images/errorpage.png

这是我的代码.PHP

<?php
  try {
$wsdl_url = 'http://localhost:8080/Mamca/MamcaWS?WSDL';
$client = new SOAPClient($wsdl_url);
$params = array(
    'projectid' => $_SESSION['projectID'],
);
$return = $client->getAlternativeListByProjectID($params);
if (isset($return->return)) {
    foreach ($return->return as $eachItem) {
        echo "<tr align='center'>";
        echo "<td align='left' class='rowDisplay'> <a href = '#' class = 'rowNumber2'>" . $eachItem->alternativedescription . "</a></td>";
        echo "<td align='left' class='rowDisplay'>" . $eachItem->alternativeGroup . "</td>";
        echo "<td align='left' class='rowDisplay'>";
        echo ($eachItem->status === 1 ? 'Active' : 'Inactive');
        echo "</td>";
        echo "<td align='center' class='rowDisplay'><img src = '../images/icons/delete.png' longdesc = 'http://.delete' /><img src = '../images/icons/table_edit.png' width = '16' height = '16' /></td>";
        echo "</tr>";
    }
}
} catch (Exception $e) {
echo "Exception occured: " . $e;
}
?>

<tr  id="ajax_response">                                         
</tr> 

来自WS的响应,错误输出:

 <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
    <ns2:getAlternativeListByProjectIDResponse xmlns:ns2="http://services.mamca.be.vub/">
        <return>
            <alternativeGroup>testt</alternativeGroup>
            <alternativedescription>testtt</alternativedescription>
            <alternativeid>10670</alternativeid>
            <id>19</id>
            <projectid>12313</projectid>
            <status>1</status>
        </return>
    </ns2:getAlternativeListByProjectIDResponse>
</S:Body>
 </S:Envelope>

如何解决此错误?谢谢。

1 个答案:

答案 0 :(得分:0)

当结果是一个单独的元素时,SOAPClient默认情况下不返回数组,而是一个对象。

您可以将SOAPClient设置为始终返回一个数组,即使结果是一个元素,也可以在实例化时添加此参数:

$client = new SOAPClient($wsdl_url ,array(
  "features" => SOAP_SINGLE_ELEMENT_ARRAYS
));