PHP Web Service nesnelerinin bir dizisi dönersek

1 Cevap php

Ben NuSOAP v 1.114 kullanarak, bir PHP web hizmeti makale nesneleri bir dizi dönmek istiyorum. Bu benim WSDL kurmak nasıl:

$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'
);

Benim PHP Makale sınıf çok basittir:

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

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

Ben bu gibi, sadece bir yeni Madde Nesne dönerseniz:

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

olarak kayıtlı işlevi:

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

gayet iyi çalışıyor, ve bir dizi var sanki makaleyi döndürür. Ben denemek ve bir ArrayOfArticleType (TestArrayReturn olarak yorumladı hattı ()) return ve dönüş türü TNS olarak işlev kayıt Ancak,: ArrayOfArticleType, o hata ile başarısız: HTTP Hatası: HTTP başlıklarını sonra mevcut veri yok.

Ancak, ben bu yüzden gibi, elle diziler oluşturun:

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

çalışıyor!? Ne ("metin" "başlığı", "articleId") doğru ArticleType nesneleri seri, ancak doğru aynı özelliklere sahip bir ilişkisel dizi seri izin vermez benim ArrayOfArticleType WSDL açıklama ile yanlış?

Tüm kodu için özür dilerim, ama ben bakan değilim hatayı saptamak için gerekli hissediyorum. Herhangi bir yardım Ben gün boyunca bu hizmet için WSDL kurma ile mücadele ettik, takdir.

1 Cevap

Ben bu hata düzeltildi. Ilgilenen herkes için, bu NuSOAP bir hata gibi görünüyor. XSD olarak işlevi için returnType kayıt ZORUNLU: Array doğru dizi dönmek için, doğru WSDL 'TNS: ArrayOfArticleType' olarak teşkil edeceğini bile. Bazı Drupal kaynak kodunda bu bulundu:

// 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';
  }
}

Bu aynı sorunu ile mücadele başkası yardımcı olur umarım.