Chcę zwrócić tablicę obiektów artykułów w usłudze sieciowej PHP, używając nuSOAP v 1.114. To jest jak skonfigurować WSDL:Zwracanie tablicy obiektów w PHP Web Service
$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'
);
Moja klasa PHP artykuł jest bardzo prosta:
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
Jeśli wrócę tylko nowy artykuł Object, tak:
function TestArrayReturn() {
$arr = new Article(12345, "Test heading", "Test text.");
//$arr2 = array($arr);
return $arr;
}
funkcja, zarejestrowana jako:
$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');
działa dobrze i zwraca artykuł tak, jakby był tablicą. Jednakże, jeśli spróbuję i zwrócę ArrayOfArticleType (skomentowana linia w TestArrayReturn()) i zarejestruj funkcję jako typ zwracany tns: ArrayOfArticleType, to kończy się niepowodzeniem z Error: HTTP Error: no data present after HTTP nagłówków.
Jeśli jednak utworzyć tablicy tablic ręcznie, tak jak poniżej:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
to działa !? Co jest nie tak z moim opisem WSDL ArrayOfArticleType, który nie pozwala mu poprawnie serializować obiektów ArticleType, ale poprawnie serializuje tablicę asocjacyjną o tych samych właściwościach ("articleId", "heading", "text")?
Przepraszam za cały kod, ale uważam, że konieczne jest wskazanie błędu, który przeoczyłem. Każda pomoc doceniona, miałem problemy z ustawieniem WSDL dla tej usługi na kilka dni.
Bit o ustawienie wartości zwracanej do „xsd: Array” niezależnie od tego zwyczaju zdefiniowany ComplexType mnie uratował! Po około tygodniu ścigania tego * nieudokumentowanego * błędu w NuSOAP. – Kingsolmn
Nie jestem w PHP. Gdzie umieścisz ten kod? –