Domanda

Sto usando PHP 5.2.10 e sto cercando di consumare un webservice che restituisce tipi dati complessi con il estensione SOAP standard di .

Il problema è che SoapClient non popolato oggetti nidificati in altri oggetti / matrice di oggetti. Un esempio semplificato di ciò che ho quando chiamo il metodo getUtente, specificando "my_unique_id" come parametro è:

stdClass Object
(
    [getUtenteReturn] => stdClass Object
        (
            [userName] => my_unique_id
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La parte rilevante della descrizione WDSL è:

<element name="getUtenteResponse">
  <complexType>
    <sequence>
      <element name="getUtenteReturn" type="tns1:Cliente"/>
    </sequence>
  </complexType>
</element>
...
<complexType name="Utilizzatore">
  <sequence>
    <element name="userName" nillable="true" type="xsd:string"/>
  </sequence>
</complexType>
...
<complexType name="Cliente">
  <complexContent>
    <extension base="tns1:Utilizzatore">
      <sequence> 
        <element name="fieldOne" nillable="true" type="xsd:string"/>
        <element name="fieldTwo" nillable="true" type="xsd:string"/>
        <element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Quello che ho trovato io non sono l'unico che si verifica questo problema. In particolare ho trovato questo commento nella documentazione ufficiale di PHP e quest'altra Iscrizione Forum per dare due idee diverse su come affrontare il problema, ma non sono stato in grado di trasformare qualsiasi di questi due idee in un soluzione di lavoro :. mi sembra di non capire del tutto la logica dietro gli esempi riportati

Le sarei grato se qualcuno mi potesse guidare in questo: un codice che lavora su un altro webservice sarebbe il benvenuto, ma quello che sto soprattutto dopo è in realtà la comprensione del problema e la logica delle soluzioni proposte (la corsia di pesce, non il pesce!). :)

È stato utile?

Soluzione

Old domanda, nessuna risposta. Recentemente mi sono imbattuto in questo post, che spiega il problema e dà una soluzione: Il consumo di webservice SOAP complexType con PHP .

Altri suggerimenti

Qui sono i miei pensieri immediati, mi dispiace questa non è una risposta adeguata, solo alcune idee ...

In primo luogo, avete provato la visualizzazione della richiesta SOAP (la busta) inviata al server di sapone? Fa apparire come dovrebbe funzionare? Riesci a vedere dove sta andando male? Sei solo ottenendo un errore di nuovo, un SoapFault, o dei dati errati, o niente del tutto?

In secondo luogo, hai provato utilizzando la classe SoapParam?

Infine, sono sicuro che si sta facendo questo diritto, ma ho notato che l'oggetto si sta costruendo ha username e FieldOne e fieldTwo tutti fianco a fianco, ma la vostra WSDL dimostra che FieldOne e fieldTwo sono parte della classe Cliente (che non si presenta nel tuo esempio), mentre il nome utente dovrebbe essere all'interno della matrice utilizzatore, quindi non dovrebbe essere più simile a:

stdClass Object
(
    [Cliente] => stdClass Object
        (
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La classe SoapClient è molto frustrante per me, quindi non prendere niente di tutto questo come una critica, perché spero solo per capire meglio io stesso, offrendo le idee che potrebbero aiutare.

Mac, grazie mille per le vostre risposte rapide. Guarda cosa ho caduto il .. non ho guardato in questa prima. Quindi voler condividere questo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top