Ankündigung

Einklappen
Keine Ankündigung bisher.

SOAP-Client wandelt Listen falsch um

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

  • SOAP-Client wandelt Listen falsch um

    Hallo allerseits,

    ich verwende den PHP-Soap-Client. Solange ich keine Sequenzen/Listen übergeben muss, gibt es keine Probleme. Die Anfragen werden alle richtig erzeugt und können dementsprechend auch verarbeitet werden.
    Sobald aber Listen übergeben werden müssen, wird es problematisch.

    Interessanterweise funktioniert der Serialisierer auf der obersten Ebene. Sprich, ein Array ['eintrag' => [1,2,3]] wird richtig umgewandelt. Aber mit verzweigten Arrays wird es schwierig.

    Als Array übergebe ich
    PHP-Code:
    array (
      
    'pVId' => 6,
      
    'ausgewaehltePVFIds' =>
      array (
        
    'pVFId' =>
        array (
          
    => 24,
          
    => 23,
        ),
      ),

    und bekomme
    HTML-Code:
    SOAP.body.Request:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http:/mein.dienst.de/v3_0/service">
    <SOAP-ENV:Body>
        <ns1:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest>
            <pVId>6</pVId>
            <ausgewaehltePVFIds>
                <pVFId>1</pVFId>
            </ausgewaehltePVFIds>
        </ns1:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Ich bräuchte aber folgende Antwort:

    HTML-Code:
    SOAP.body.Request:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mein.dienst.de/esb/pul/validierung/v3_0/service">
    <SOAP-ENV:Body>
        <ns1:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest>
            <pVId>6</pVId>
            <ausgewaehltePVFIds>
                <pVFId>24</pVFId>
                <pVFId>25</pVFId>
            </ausgewaehltePVFIds>
        </ns1:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Was mache ich falsch?

    Viele Grüße


  • #2
    Die WSDL wäre dazu interessant. Ich hatte sowas ähnliches auch mal. Das Problem war eine ungenaue Definition der WSDL. Du kannst (was ich aber nicht empfehlen würde, wenn es sich anders lösen lässt) die WSDL lokal verändern und so nutzen.

    Zitat von ichthys Beitrag anzeigen
    GetWeitereVoiceFlatUndMinutenkontingentOptionenOpe rationRequest
    ​​​

    Zitat von ichthys Beitrag anzeigen
    http:/mein.dienst.de/v3_0/service
    Ist das richtig so!?

    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Vielen Dank für Deine Antwort.
      Zur zweiten Frage: Ja, ich habe das ein bisschen angepasst, weil dort der Firmenname im Link hinterlegt war.

      Hier die WSDL
      HTML-Code:
      <wsdl:definitions targetNamespace="http://www.mein.dienst.de/esb/pul/validierung/v3_0/service">
          <wsdl:types>
              <xsd:schema targetNamespace="http://www.mein.dienst.de/esb/pul/validierung/v3_0/service">
                  <xsd:import namespace="http://www.mein.dienst.de/esb/pul/validierung/types/v3_0/internal" schemaLocation="http://vtnesbdev01.mein.dienst.local:8040/services/esb/pul/validierung?xsd=../xsd/validierung-type-internal.xsd"/>
                  <xsd:import namespace="http://www.mein.dienst.de/esb/pul/types/v3_0/common" schemaLocation="http://vtnesbdev01.mein.dienst.local:8040/services/esb/pul/validierung?xsd=../xsd/common-types.xsd"/>
                  <xsd:element name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest">
                      <xsd:complexType>
                          <xsd:sequence>
                              <xsd:element name="pVId" type="xsd:int"/>
                              <xsd:element minOccurs="0" name="ausgewaehltePVFIds" type="intern:pVFIdListeType"/>
                              <xsd:element minOccurs="0" name="ausgewaehltePMIds" type="intern:pMIdListeType"/>
                          </xsd:sequence>
                      </xsd:complexType>
                  </xsd:element>
                  <xsd:element name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationResponse">
                      <xsd:complexType>
                          <xsd:choice>
                              <xsd:sequence>
                                  <xsd:element name="status" type="common:StatusType"/>
                                  <xsd:element minOccurs="0" name="voiceFlatOptionen" type="intern:VoiceFlatOptionlisteType"/>
                                  <xsd:element minOccurs="0" name="minutenkontingentOptionen" type="intern:MinutenkontingentOptionlisteType"/>
                              </xsd:sequence>
                          </xsd:choice>
                      </xsd:complexType>
                  </xsd:element>
                  <xsd:element name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationFault">
                      <xsd:complexType>
                          <xsd:sequence>
                              <xsd:element name="status" type="common:StatusType">
                              </xsd:element>
                          </xsd:sequence>
                      </xsd:complexType>
                  </xsd:element>
              </xsd:schema>
          </wsdl:types>
          <wsdl:message name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationResponse">
              <wsdl:part element="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationResponse" name="parameters">
              </wsdl:part>
          </wsdl:message>
          <wsdl:message name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationFault">
              <wsdl:part element="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationFault" name="parameters">
              </wsdl:part>
          </wsdl:message>
          <wsdl:message name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest">
              <wsdl:part element="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest" name="parameters">
              </wsdl:part>
          </wsdl:message>
          <wsdl:portType name="validierungPortType">
              <wsdl:operation name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperation">
                  <wsdl:input message="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationRequest">
                  </wsdl:input>
                  <wsdl:output message="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationResponse">
                  </wsdl:output>
                  <wsdl:fault message="tns:GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationFault" name="fault">
                  </wsdl:fault>
              </wsdl:operation>
          </wsdl:portType>
          <wsdl:binding name="validierungBinding" type="tns:validierungPortType">
              <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
              <wsdl:operation name="GetWeitereVoiceFlatUndMinutenkontingentOptionenOperation">
                  <soap:operation soapAction="http://www.mein.dienst.de/esb/pul/validierung/v3_0/service/GetWeitereVoiceFlatUndMinutenkontingentOptionenOperationperation"/>
                  <wsdl:input>
                      <soap:body use="literal"/>
                  </wsdl:input>
                  <wsdl:output>
                      <soap:body use="literal"/>
                  </wsdl:output>
                  <wsdl:fault name="fault">
                      <soap:fault name="fault" use="literal"/>
                  </wsdl:fault>
              </wsdl:operation>
          </wsdl:binding>
          <wsdl:service name="validierung">
              <wsdl:port binding="tns:validierungBinding" name="validierungPort">
                  <soap:address location="http://vtnesbdev01.mein.dienst.local:8040/services/esb/pul/validierung"/>
              </wsdl:port>
          </wsdl:service>
      </wsdl:definitions>

      Kommentar


      • #4
        Versuch mal:

        PHP-Code:
        array(
            
        'pVId' => 6,
            
        'ausgewaehltePVFIds' => [2423]

        Kommentar

        Lädt...
        X