WSDL возвращает массив сложных типов - PullRequest
0 голосов
/ 08 января 2010

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

Я написал веб-сервис на 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);

1 Ответ

10 голосов
/ 12 января 2010

Я сам нашел ответ после поиска в интернете.

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

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

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

...