2013-09-13 3 views
2

В настоящее время я использую версию PHP 5.4.16 и NuSOAP 0,95, у меня есть попробовать этот пример: hereкак бороться с массивом ComplexType в NuSoap?

который показан код сервера, как это;

$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> 

как я могу исправить эту ошибку? может кто-нибудь помочь мне решить эту ошибку, пожалуйста ... большое спасибо заранее ...

+0

ВИскать nusoap.php на линии 6132, чтобы увидеть, что он пытается преобразовать в строку. Похоже, что вы отправляете массив в какое-то место, и nusoap пытается использовать его как строку. –

ответ

6

nusoap > lib > nusoap.php В, строка комментария :

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

Моя ошибка также исправлена, но я не знаю, в чем была проблема? – Manwal

+0

Проблема в том, что $ k, $ v или $ typeDef - это массив вместо строки. Для меня $ v был массивом. –

+0

Спасибо большое! Это проблема разрешения отправки массива клиенту! –

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); 
0

аккуратнее решение, чем комментируя линию 6132 в nusoap > 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]"); 
Смежные вопросы