Mailinglisten-Archive |
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