2010-01-08 2 views
0

Я определил веб-службу, которая вернет данные из моей базы данных mysql.wsdl возвращает массив сложных типов

Я написал веб-сервис в php.

Теперь я определил сложный тип следующим образом:

$server->wsdl->addComplexType(
'Category', 
'complexType', 
'struct', 
'all', 
'', 
array(
    'category_parent_id' => array('name' => 'category_parent_id', 'type' => 'xsd:int'), 
    'category_child_id' => array('name' => 'category_child_id', 'type' => 'xsd:int'), 
    'category_list' => array('name' => 'category_list', 'type' => 'xsd:int') 
) 

);

Вышеупомянутый сложный тип - это строка в таблице в моей базе данных.

Теперь моя функция должна послать массив этих строк так, как я достичь того же

Мой код выглядит следующим образом:

require_once('./nusoap/nusoap.php'); 
$server = new soap_server; 

$server->configureWSDL('productwsdl', 'urn:productwsdl'); 

// Register the data structures used by the service 
$server->wsdl->addComplexType(
    'Category', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
     'category_parent_id' => array('name' => 'category_parent_id', 'type' => 'xsd:int'), 
     'category_child_id' => array('name' => 'category_child_id', 'type' => 'xsd:int'), 
     'category_list' => array('name' => 'category_list', 'type' => 'xsd:int') 
    ) 
); 
$server->register('getaproduct',     // method name 
    array(),   // input parameters 
    //array('return' => array('result' => 'tns:Category')), // output parameters 
    array('return' => 'tns:Category'), // output parameters 
    'urn:productwsdl',       // namespace 
    'urn:productwsdl#getaproduct',     // soapaction 
    'rpc',         // style 
    'encoded',        // use 
    'Get the product categories'  // documentation 
); 

function getaproduct() 
{ 
    $conn = mysql_connect('localhost','root',''); 
    mysql_select_db('sssl', $conn); 
    $sql = "SELECT * FROM jos_vm_category_xref"; 
    $q = mysql_query($sql); 
    while($r = mysql_fetch_array($q)) 
    { 
     $items[] = array('category_parent_id'=>$r['category_parent_id'], 
           'category_child_id'=>$r['category_child_id'], 
           'category_list'=>$r['category_list']); 
    } 
     return $items; 
} 


    // Use the request to (try to) invoke the service 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
$server->service($HTTP_RAW_POST_DATA); 
+0

Да, я знаю, что форматирование неверно, но ребята, я вставил код в блок кода, предоставленный редактором, но он, похоже, не работает. Если кто-то может мне сказать, почему или кто-то может отредактировать его для меня, это будет замечательно –

ответ

10

я понял, то ответ сам после того, как поиск в Интернете.

Ниже приведен код для создания сложного типа данных. Здесь я создаю тип данных Person whch имеет имя, возраст и пол в качестве своих членов данных.

$server->wsdl->addComplexType(
    'Person', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
    'firstname' => array('name' => 'firstname', 'type' => 'xsd:string'), 
    'age'  => array('name' => 'age', 'type' => 'xsd:int'), 
    'gender' => array('name' => 'gender', 'type' => 'xsd:string') 
) 
); 

Далее мы должны создать еще один новый тип данных, который представляет собой массив типа данных, который мы создали. Я называю это массив человек и код находится ниже:

$server->wsdl->addComplexType(
    'PersonArray', // Name 
    'complexType', // Type Class 
    'array',   // PHP Type 
    '',    // Compositor 
    'SOAP-ENC:Array', // Restricted Base 
    array(), 
    array(
     array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Person[]') 
    ), 
    'tns:Person' 
); 

Теперь я зарегистрировал функцию под названием getPeople, который не принимает входные параметры, но возвращает массив лиц, как:

$server->register(
    'getPeople',       // method name 
    array(),        // input parameters 
    array('return' => 'tns:PersonArray'), // output parameters 
    'urn:hellowsdl2',      // namespace 
    'urn:hellowsdl2#getPeople',   // soapaction 
    'rpc',        // style 
    'encoded',       // use 
    'Return an array of people'   // documentation 
); 

и запрограммированный функция, чтобы вернуть некоторые фиктивные данные, как:

function getPeople() 
{ 
    $peopleArray = array(); 
    $peopleArray[] = array(
     'firstname' => "Anand", 
     'age'  => 25, 
     'gender' => "Male" 
    ); 

    $peopleArray[] = array(
     'firstname' => "Sandhya", 
     'age'  => 21, 
     'gender' => "Female" 
    ); 

    return $peopleArray; 
} 

я, кстати, жаль, что я не упомянул, но весь этот код в PHP.

Надеюсь, это поможет кому-то.

+0

Отлично, мой друг, ваш пример помог мне решить мою проблему в создании веб-сервисов в nusoap :-) Большое спасибо! – Cris

+0

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

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