PHP non SoapFault WSDL schema conforme a soapUI?
-
20-09-2019 - |
Domanda
mi sono imbattuto in uno strano oggi, va in questo modo:
Sono la creazione di suite di test per QA delle un servizio web di mio, che è scritto in PHP5 - facendo uso della classe SoapFault tra gli altri <. / p>
Io uso la classe di tornare messaggio di errore per i clienti. Esempio:
if (!$this->CheckHost(getenv('REMOTE_ADDR')))
{
return new SoapFault(S_CLIENT, S_STRING_IP, "", S_DETAIL_IP);
}
Restituzione di una SoapFault se il cliente non è autorizzato ...
Ora, se posso aggiungere un'affermazione di conformità dello schema in soapUI 3.0.1 Racconta me che il messaggio restituito non è conforme al suo file WSDL.
Il file WSDL è stato scritto da me e non con i fatti non contiene una descrizione della classe SoapFault vero e proprio. Vorrei che sia necessario? Non perché il pensiero SoapFault è spezified in SOAP 1.1 in ogni modo.
La risposta reale è simile al seguente:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>ERR_102</faultstring>
<faultactor/>
<detail>IP error message</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Il messaggio di errore soapUI è:
Elemento 'dettaglio' con elemento di sola tipo di contenuto non può avere contenuto del testo.
Qualcuno ha un suggerimento che cosa sto facendo male?
tia
K
Soluzione
Lo schema XML SOAP 1.1 ( http://schemas.xmlsoap.org/soap/envelope/ ) definisce l'elemento dettaglio il
<xs:complexType name="detail"><xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" />
</xs:complexType>
il che significa che non può contenere solo testo come nella colpa tua. Provare a cambiare la risposta a qualcosa di simile
...
<detail><msg>IP error message</msg></detail>
...
Spero che questo aiuti!
saluti,
/ Ole eviware.com