phpbar.de logo

Mailinglisten-Archive

[php] PEAR::SOAP und Arrays ?

[php] PEAR::SOAP und Arrays ?

Johann-Peter Hartmann hartmann at mayflower.de
Son Aug 28 16:25:38 CEST 2005


Hi Markus,

Markus Jais schrieb:
> ich versuch einen in Java geschriebenen  Soap Service
> aufzurufen:
> 
> $wsdl = new SOAP_WSDL($url);
> $proxy = $wsdl->getProxy();
> $result = $proxy->getData("33", "44", array('1', '2',
> '4'));
> 
> 
> wenn ich das array leer lasse dann geht es aber sonst
> bekomme ich immer:
> Error: No deserializer for
> {http://www.w3.org/2001/XMLSchema}anyType
> 
> im WDSL schaut es so aus:
> <wsdl:message name="getDataRequest">
> <wsdl:part name="in0" type="xsd:string"/>
> <wsdl:part name="in1" type="xsd:string"/>
> <wsdl:part name="in2" type="soapenc:Array"/>
> </wsdl:message>
> 
> 
> ich schätze jetzt mal dass man das array irgendwie
> anders übergeben muss.
> leider finde ich dazu keine doku.
> 
> weiß jemand wie das geht ?

Leider kenn ich mich mit PEAR::SOAP nur soweit aus, dass es mir Angst 
macht, trotzdem 2-3 Cents von mir dazu:

Die WSDL-Definition von in2 ist etwas sehr sparsam, da zwar gesagt wird, 
dass es sich um ein array handelt, aber nicht, was da drin ist. In PHP 
geht das fabelhaft, denn wir sind ja nicht typfest, und in einem von 
unseren Arrays können auch - prinzipiell - Gurken vorkommen.

PEAR::SOAP nimmt dementsprechend richtig an, dass es sich um ein Array 
von unbestimmten Inhalts (=> daher anyType) handelt, und liefert ein 
solches zurück. Damit kann aber Java nichts anfangen, weil keine 
dynamischen Typen, keine Gurken.

Deine Einschätzung, dass man da Java beim demarshalling ein bischen 
unter die Arme greifen musst, ist völlig richtig, und genau dazu bietet 
PEAR::SOAP das Hilfsobjekt SOAP_Value an.

Also z.B.
$in2 = new SOAP_Value('in2', 'string[]', array(1,2,4) );
$proxy->getData("33", "44", $in2);
	
Bei dem (imho vorzuziehenden) Soap in PHP5 würde man es so darstellen:
$in2 = new SoapVar(array(1,2,4),SOAP_ENC_ARRAY);

Ich habe keine Ahnung, ob es so funktioniert, würde mich aber über 
kurzes Feedback an die Liste, welcher Weg jetzt (nicht) geklappt hat, 
freuen.


Liebe Grüße aus Buenos Aires,
Johann

php::bar PHP Wiki   -   Listenarchive