Как объявить функцию WSDL для PHP, которая возвращает несколько типов? - PullRequest
1 голос
/ 21 сентября 2009

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

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

Ответы [ 3 ]

1 голос
/ 21 сентября 2009

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

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

0 голосов
/ 24 сентября 2009

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

  • Первый элемент: код ошибки, 0 = плохо, 1 = хорошо
  • Второй элемент: сообщение об ошибке, пусто, если у нас все хорошо
  • Третий элемент: ваш сложный тип, пустой, если мы плохие.
0 голосов
/ 21 сентября 2009

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

...