SoapClient Request nillable Element kein Type gesetzt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SoapClient Request nillable Element kein Type gesetzt

    Hallo,

    ich habe folgendes Problem:

    Ich bediene einen externen Java-Webservice mit PHP (via PHP5 SoapClient). Die WSDL, welche ich konsumiere, beinhaltet mehrere XSDs. Als Beispiel ist ein Element lt. einer bestimmten XSD wie folgt beschrieben:
    PHP-Code:
    <element name="kilogramm" nillable="true" minOccurs="0" type="int" /> 
    Wenn ich das Feld "kilogramm" in meiner Klasse (Objekt) auf "null" setze, wird das Feld wie folgt gemappt (XML):
    PHP-Code:
    <kilogramm xsi:nil="true"/> 
    Jetzt zu meinem Problem

    Der Webservice Provider erwartet das gemappte Element im Request (XML) wie folgt:
    PHP-Code:
    <kilogramm xsi:type="xsd:int" xsi:nil="true"/> 
    Leider fehlt bei mir der "type".

    Hier stellen sich für mich zwei Fragen:
    1. Hält sich PHP an den Standard (mit Quellenangabe) - kann der Type einfach weggelassen werden?
    2. Wie kann ich den Type setzen (evt. mit SoapVar), denn er wird gewünscht?


    Danke für Eure Hilfe.

    Gruß
    Svenner.

  • #2
    Kann mir keiner helfen?

    Kommentar


    • #3
      Wie erzeugst und übergibst du das Feld an die entsprechende Funktion? Wenn du es mit new SOAPVar(...) machst, sollte es eigentlich korrekt (mit Typ) erzeugt werden.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Nichts Weltbewegendes - ich habe es der Übersicht halber extrem vereinfacht und gekürzt:
        PHP-Code:
        $person = new AntragPerson();
        $person->kilogramm null;
        ...

        try {
            ...
            
        // 1. Parameter ist die WSDL
            
        $this->_client = new SoapClient($this->_settings['webservices']['wsdls'][$interface], $this->_getSoapOptions());
            
        $this->_client->privatAntragAnlegen($person)
        }
        ... 

        Kommentar


        • #5
          Aha, dann kann es nicht gehen. Du musst den Wert (null) als SOAPVar-Instanz erzeugen und als neuen SOAPParam an die Funktion übergeben.

          Siehe Beispiel im Manual
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Danke für deine Hilfe!!!

            An SoapVar habe ich auch schon gedacht und jetzt einfach mal umgesetzt:
            PHP-Code:
            $person->kilogramm = new SoapVar(nullXSD_INT'xsd:int'); 
            Doch ich verstehe einfach nicht, warum das PHP (SOAP) nicht selbst erledigt. Es weiß aus der XSD (Person) doch, vom welchem "type" (int) "kilogramm" ist. Das klappt ja auch alles, wenn ich für "kilogramm" z. B. numerische Werte setze (72, 80 etc.). Doch bei "null" muss ich es jetzt über SoapVar machen

            Kann sich das jemand erklären - mir erklären?

            Vielen Dank!

            Kommentar

            Lädt...
            X