Announcement

Collapse
No announcement yet.

soap request Parameter

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • soap request Parameter

    Hallo Community,
    ich kämpfe momentan mit der PHP Soap Implementierung.
    Ich versuche auf ein von Spring zur Verfügung gestelltes Webservice zuzugreifen, wobei die parameter manchmal über Attribute des XML-Tags übergeben werden.
    Ein gültiger Request würde wie folgt aussehen:
    Code:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="http://mynamespace">
       <soapenv:Header/>
       <soapenv:Body>
          <con:GetContainerRequest containerId="2">
             <!--Optional:-->
             <con:CustomFieldIds>
                <!--Zero or more repetitions:-->
                <con:CustomFieldId>1</con:CustomFieldId>
             </con:CustomFieldIds>
          </con:GetContainerRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    Einen Parameter in den CustomFieldIds Tag zu scrheiben ist nicht das Problem. Mein Problem beginnt dort wo es um die containerId geht, die als Attribut übergeben wird.
    Wenn ich jetzt sowas code:
    Code:
    $obj = new stdClass;
                            $obj->containerId['_'] = "containerId";
                            $obj->containerId['containerId'] = $containerId;
                            if($customFieldIds!= null) {
                                    $cfIds = new stdClass;
                                    foreach($customFieldIds as $cfId) {
                                            $contIds->CustomFieldId[] = new SoapVar($cfId, XSD_STRING, null, null, null, SoapApi::$containerServiceNs);
                                    }
                                    $obj->CustomFieldIds = new SoapVar($cfIds, SOAP_ENC_OBJECT);
                            }
                           
                            $soapstruct = new SoapVar($obj, SOAP_ENC_OBJECT);
    
                            return $this->clientForContainerService->GetContainer(new SoapParam($soapstruct, "inputStruct"));
    kommt als Resultat folgendes:
    Code:
    <SOAP-ENV:Body>
                    <ns1:GetContainerRequest>
                            <containerId>
                                    <item>
                                            <key>_</key>
                                            <value>containerId</value>
                                    </item>
                                    <item>
                                            <key>containerId</key>
                                            <value>104</value>
                                    </item>
                            </containerId>
                    </ns1:GetContainerRequest>
            </SOAP-ENV:Body>
    Ich hab viele Beispiele im Netz gefunden mit einer "_"-Notation, aber ich muss was im Code falsch machen denn das klappt ja offensichtlich nicht.
    Weiß jemand von euch wie das funktionert.
    Danke im Vorhinein
    Thomas

  • #2
    Problem gelöst.
    Über das Classmap Attribut vom SoapClient lassen sich solche Dinge abbilden.
    Nettes Konstrukt dass sich die PHP-Devs da einfallen haben lassen.

    Comment

    Working...
    X