PHP Array an Java SOAP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Array an Java SOAP

    Ich hab einen kleinen Webservice mittels SOAP realisiert (Java). Die WSDL sieht folgendermaßen aus:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://yo/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://yo/" name="MyWebserviceService">
    2. <types>
    3. <xsd:schema>
    4. <xsd:import schemaLocation="http://localhost:8080/services?xsd=1" namespace="http://jaxb.dev.java.net/array"></xsd:import>
    5. </xsd:schema>
    6. </types>
    7. <message name="hello">
    8. <part name="arg0" type="xsd:string"></part>
    9. <part xmlns:ns1="http://jaxb.dev.java.net/array" name="arg1" type="ns1:intArray"></part>
    10. </message>
    11. <message name="helloResponse"></message>
    12. <portType name="TestService">
    13. <operation name="hello" parameterOrder="arg0 arg1">
    14. <input message="tns:hello"></input>
    15. <output message="tns:helloResponse"></output>
    16. </operation>
    17. </portType>
    18. <binding name="TestServicePortBinding" type="tns:TestService">
    19. <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
    20. <operation name="hello">
    21. <soap:operation soapAction=""></soap:operation>
    22. <input>
    23. <soap:body use="literal" namespace="http://yo/"></soap:body>
    24. </input>
    25. <output>
    26. <soap:body use="literal" namespace="http://yo/"></soap:body>
    27. </output>
    28. </operation>
    29. </binding>
    30. <service name="MyWebserviceService">
    31. <port name="TestServicePort" binding="tns:TestServicePortBinding">
    32. <soap:address location="http://localhost:8080/services"></soap:address>
    33. </port>
    34. </service>
    35. </definitions>
    Alles anzeigen


    Ich möchte den Service via PHP nutzen:

    Quellcode

    1. $client = new soapclient('services.wsdl');
    2. $client->__soapCall('hello', array('arg0' => 'Hello', 'arg1' => array(1, 2, 3, 4)));


    Leider erhalte ich dann folgende Fehlermeldung:

    Fatal error: Uncaught SoapFault exception: [soapenv:Server] unexpected element name: expected=arg1, actual: param1 in D:\Development\PHP\xampplite\htdocs\SOAP_Test\soap.php:12 Stack trace: #0 D:\Development\PHP\xampplite\htdocs\SOAP_Test\soap.php(12): SoapClient->__soapCall('hello', Array) #1 {main} thrown in D:\Development\PHP\xampplite\htdocs\SOAP_Test\soap.php on line 12
  • Hier macht php leider ziemlich wenig automatisch.
    Du musst php den Typ ns1:intArray erstmal beibringen.

    Wie weiß ich auch nicht 100%ig

    Quellcode

    1. //vielleicht so?
    2. new SoapVar(array(1,2,3), SOAP_ENC_ARRAY);
    3. //oder so?
    4. new SoapVar($struct, SOAP_ENC_OBJECT, "intArray", "http://jaxb.dev.java.net/array");

    http://de.php.net/manual/en/function.soap-soapvar-construct.php
  • So auch wenn ich ein Verfechter von mehreren Threads hintereinander bin werde ich mal gegen meine eigenen Prinzipien verstoßen.

    Ich habe nun eine Lösung gefunden.

    Die PHP SOAP Implementierung hat wohl nen Problem mit ner Auflösung aus URLs bzw. gibt es beim Importieren des xsd-Schema einen Fehler. Wenn man aber nun manuell das xsd-Schema einfügt, dann geht das ganze.

    Naja hat nur 3 Tage gedauert das rauszufinden :roll: