-->

返回对象的数组中的PHP Web服务(Returning An Array of Objects i

2019-07-18 23:46发布

我想回到文章对象的数组在PHP Web服务,使用的NuSOAP v 1.114。 这是我如何设置WSDL:

$server->wsdl->addComplexType(
'ArticleType',
'complexType',
'struct',
'all',
'',
array('articleId' => array('name'=>'articleId', 'type'=>'xsd:int'),
      'heading' => array('name'=>'heading', 'type'=>'xsd:string'),
      'text' => array('name'=>'text', 'type'=>'xsd:string')
     )
); 


$server->wsdl->addComplexType(
'ArrayOfArticleType',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
    array('ref' => 'SOAP-ENC:arrayType',
          'wsdl:arrayType' => 'tns:ArticleType[]'       // ArticleType[]
        )               
    ),
'tns:ArticleType'
);

我的PHP Article类是非常简单的:

class Article {
public $articleId;
public $heading;
public $text;

public function __construct($articleId, $heading, $text=NULL) {
    $this->articleId = $articleId;
    $this->heading = $heading;
    $this->text = $text;
}
}

如果我只返回一个新的文章对象,就像这样:

function TestArrayReturn() {
    $arr =  new Article(12345, "Test heading", "Test text.");
    //$arr2 = array($arr);  
    return $arr;
 }

功能,注册为:

$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');

做工精细,并返回文章,就好像它是一个数组。 然而,如果我尝试,并返回一个ArrayOfArticleType(在TestArrayReturn的注释行()),并注册该功能的返回类型TNS:ArrayOfArticleType,则失败,错误:HTTP错误:无数据的HTTP标头之后存在。

但是,如果我手动创建一个数组的数组,就像这样:

$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);

有用!? 有什么不对我ArrayOfArticleType WSDL描述,不允许它正确地序列ArticleType对象,但正确地序列具有相同属性(“条款ArticleID”,“标题”,“文本”)的关联数组?

对不起,所有的代码,但我觉得有必要找出我俯瞰错误。 任何帮助表示赞赏,我一直在挣扎设立此服务的好几天。

Answer 1:

我解决了这个错误。 任何有兴趣,这似乎是一个的NuSOAP错误。 您必须注册您的返回类型为功能的xsd:数组才能正常返回数组,即使正确的WSDL将构成它为“TNS:ArrayOfArticleType”。 我发现这在一些Drupal的源代码:

// Set return value for the service
$return = array();
if ($method['#return']) {
  **// Don't let a struct be declared as return parameter, because nusoap will not
  // Send back anything.**
  $return['return'] = 'xsd:'. $method['#return'];
  if ($method['#return'] == 'struct' || $method['#return'] == 'array') {
    $return['return'] = 'xsd:Array';
  }
} 

希望这可以帮助别人谁同样的问题挣扎。



Answer 2:

这里是例如客户端和服务器如何返回与PHP网页service.It数组是简单的例子来理解http://my-source-codes.blogspot.com/2011/10/php-web-service-return- array.html



文章来源: Returning An Array of Objects in PHP Web Service