PHP SoapClient: problemi con il file WSDL distribuito

Ho un problema nell'usare un file WSDL distribuito (schema / altre definizioni sono dichiarate al di fuori del WSDL effettivo) con PHP's SoapClient.

Questo è il messaggio di errore che ho ricevuto:

SOAP-ERROR: Parsing WSDL: 'getSomeInfo' already defined. 

Dopo aver fatto qualche ricerca su google, sembra che ci sia un bug in PHP perché qualcun altro ha scoperto esattamente lo stesso problema: http://bugs.php.net/bug.php?id=45282

Ci sono state correzioni di bug? Qualche soluzione per aggirare questo bug?

Penso che pubblicare un frammento di codice sia privo di senso, poiché l'invocazione del gestore di SoapClient che utilizza solo il WSDL è l'unica che non riesce.

Ho avuto lo stesso problema. Il problema era in wsdl e importzioni, ho salvato wsdl dal sito e ho indicato soapclient per usare il file locale, ma tutti i riferimenti erano originali. Soap client each volta riceve file dall'host remoto, passa a parti e da loro di nuovo nello stesso file ma su un'unità remota. Ciò ha causato lo stesso file da caricare due volte. La soluzione è utilizzare solo file remoti o riscrivere i routes in locale (tutti). SoapUI lo fa quando si preme "export definition" sul progetto wsdl. Spero che aiuti gli altri.

Il codice sorgente PHP ( svn ) che si prende cura dei nodes di import contiene il commento /* TODO: namespace ??? */ /* TODO: namespace ??? */ . Gli spazi dei nomi vengono ignorati e ciò consente il verificarsi delle collisioni del metodo.

Vengono proposte tre soluzioni:

  1. Correggere il codice sorgente per soddisfare gli spazi dei nomi (che sarebbe molto gradito)
  2. Manipolare i file WSDL per evitare che tali methods si sovrappongano (questa opzione probabilmente non è affatto un'opzione)
  3. Invece di utilizzare il file WSDL originale, call singolarmente quelli importti (o quelli di gruppo che non hanno conflitti di nome del metodo) con istanze di SoapClient separate.

Mi dispiace di non poter essere più di aiuto.

Scarica una copia locale del file WSDL. Rimuovi i nomi dei methods duplicati. Aggiorna il tuo soap client per utilizzare il file WSDL locale. Questo ha funzionato bene per me in passato.

Ho avuto lo stesso problema durante l'accesso a un servizio WCF che fornisce più endpoint tramite PHP. Nel mio caso, si è scoperto che il WSDL principale import i WSDL secondari per ciascun endpoint, mentre i WSDL secondari includono a loro volta il WSDL principale. Questo è apparentemente il motivo per cui PHP legge il WSDL principale due volte e arriva con l'errore "già definito". Potrei evitare questo comportmento creando il client con l'URL WSDL secondario dell'endpoint desiderato invece dell'URL WSDL principale.