Как объявить функцию WSDL для PHP, которая возвращает несколько ТИПОВ?

Я пишу веб-службу PHP и одну функцию. Я хочу настроить веб-сервис на PHP. Мне нужно создать описание WSDL для этой веб-службы, чтобы оно было доступно из I.e. визуальная студия. Он принимает документы / строки поиска в качестве входных данных и рекомендует аналогичные документы в качестве выходных данных. Я возвращаю массив с первым элементом resultCode (int), который показывает, была ли операция успешной (1) или неудачной (0). Второй элемент, однако, может быть либо сообщением об ошибке (строкой), сообщающим пользователю, что пошло не так, либо сложным возвращаемым типом, таким как массив с подэлементами для различных совпадающих статей, т. е. array( array("heading"=>" заголовок статьи", "articleId"=>12345, "text"=>"основной текст статьи"), array( ... ), ... ). Мне нужно знать, как сгенерировать/записать WSDL для этого возвращаемого типа или как это сделать в NuSOAP. Как бы Вы это сделали?

Это часть кода, который я сейчас использую для настройки сервиса.

$server->wsdl->addComplexType(
'returnStructBase',
'complexType',
'struct',
'all',
'',
array('resultCode' => array('name'=>'resultCode', 'type'=>'xsd:int'),
      'resultData' => array('name'=>'resultData', 'type'=>'xsd:anyType')
     )
); 
$server->wsdl->addComplexType(
'returnStructArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
    array('ref' => 'SOAP-ENC:arrayType',
          'wsdl:arrayType' => 'tns:returnStructBase[]'
        )               
    ),
'tns:returnStructArray'
);

$server->register("GetRecommendations", array('username'=>'xsd:string', 'password'=>'xsd:string','articleId'=>'xsd:string',
                'text'=>'xsd:string', 'returnText'=>'xsd:boolean'), array('return'=>'tns:returnStructArray'), $namespace, $namespace . '#getRecommendations', 'rpc', 'encoded', ' ... ');

Может быть, свободная типизация PHP заставила меня использовать плохой дизайн для возвращаемого типа, и мне нужно использовать что-то еще?

Любые рекомендации приветствуются.


person gouwsmeister    schedule 21.09.2009    source источник


Ответы (3)


Вы можете вернуться

  • Первый элемент: код ошибки, 0 = плохо, 1 = хорошо
  • Второй элемент: сообщение об ошибке, пустое, если все в порядке
  • Третий элемент: ваш сложный тип, пустой, если мы плохие.
person Vladislav Rastrusny    schedule 24.09.2009

Вы можете использовать xsd:anytype. На самом деле я бы не рекомендовал это, поскольку среды на основе типов, такие как .NET и Java, не смогут обрабатывать ваш wsdl.

Чтобы получить чистое решение, я бы переосмыслил тот дизайн php, который соблазнил вас... ;)

person KB22    schedule 21.09.2009

Вы всегда должны возвращать одну и ту же структуру. В случае сбоя вы должны использовать исключения, как и при обычном использовании, используя ошибки SOAP: http://www.ibm.com/developerworks/webservices/library/ws-tip-jaxrpc.html

person tster    schedule 21.09.2009