2

目前我正在使用 PHP 版本 5.4.16 和 NuSoap 0.95,我尝试了这个示例: 这里

它显示了这样的服务器代码;

$server->wsdl->addComplexType(
    'Chapter',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'title' => array('name'=>'title','type'=>'xsd:string'),
        'page' => array('name'=>'page','type'=>'xsd:int')
    )
);

$server->wsdl->addComplexType(
    'ChapterArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Chapter[]')
    ),
    'tns:Chapter'
);

$server->wsdl->addComplexType(
    'Book',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'author' => array('name'=>'author','type'=>'xsd:string'),
        'title' => array('name'=>'title','type'=>'xsd:string'),
        'numpages' => array('name'=>'numpages','type'=>'xsd:int'),
        'toc' => array('name'=>'toc','type'=>'tns:ChapterArray')
    )
);

$server->register(
    'getBook',
    array('title'=>'xsd:string'),
    array('return'=>'tns:Book'),
    $NAMESPACE);

function getBook($title) {
     // Create TOC
     $toc = array();
     $toc[] = array('title' => 'Chapter One', 'page' => 1);
     $toc[] = array('title' => 'Chapter Two', 'page' => 30);

     // Create book
     $book = array(
                 'author' => "Jack London",
                 'title' => $title,
                 'numpages' => 42,
                 'toc' => $toc);

     return $book;
}

但在 SOAP 响应中返回错误,我正在使用 SopUI 对其进行测试。我收到这样的错误:

<br />
<b>Notice</b>:  Array to string conversion in <b>E:\xampp\htdocs\myweb\lib\nusoap.php</b> on line <b>6132</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>E:\xampp\htdocs\myweb\lib\nusoap.php</b> on line <b>6132</b><br />
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:getBookResponse xmlns:ns1="http://localhost/myweb"><return><author>Jack London</author><title>This is my book</title><numpages>42</numpages><toc><item><title>Chapter One</title><page>1</page></item><item><title>Chapter Two</title><page>30</page></item></toc></return></ns1:getBookResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

我该如何解决这个错误?有人可以帮我解决这个错误吗...非常感谢提前...

4

3 回答 3

6

nusoap > lib > nusoap.php,评论第6132行:

////$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
于 2013-11-03T06:58:33.590 回答
0
$server->wsdl->addComplexType(
    'Book',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'author' => array('name1'=>'author','type'=>'xsd:string'),
        'title' => array('name2'=>'title','type'=>'xsd:string'),
        'numpages' => array('name3'=>'numpages','type'=>'xsd:int'),
        'toc' => array('name4'=>'toc','type'=>'tns:ChapterArray')
    )
);

$server->register(
    'getBook',
    array('title'=>'xsd:string'),
    array('return'=>'xsd:array'),
    $NAMESPACE);
于 2015-03-17T01:38:15.833 回答
0

比注释行更简洁的解决方案6132nusoap > lib > nusoap.php检查是否$v是数组并将其转换为字符串:

当前行6132:

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

改成:

$this->debug("serializing array element: $k, " . ( is_array($v) ? join(',', $v) : $v ) . " of type: $typeDef[arrayType]");
于 2016-04-13T14:14:45.833 回答