Salve gente.
qualcuno di voi ha familgiarità con webservice e soap:fault?
ora, abbiamo generato un wsdl che contiene il nostro errore. dal wsdl si generano le classi, ci si mette l'implementazione con i vari fault:
codice:
throw new faultType("Questo è l'errore");
ovviamente faultType è il nostro errore che è definito nel wsdl così:
codice:
<wsdl:message name="faultType">
<wsdl:part name="faultInfo" type="xsd:string" />
</wsdl:message>
ora, quando si richiama il servizio, se c'è un fault viene restituito questo:
codice:
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring/>
<detail>
<faultInfo >Questo è l'errore</faultInfo>
<ns1:exceptionName xmlns:ns1="http://xml.apache.org/axis/">_1._0._0._127.axis.services.Profile.faultType</ns1:exceptionName>
<ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">pc-stefano</ns2:hostname>
</detail>
</soapenv:Fault>
e per averlo nella classe java si deve fare
codice:
try {
//codice
} catch (org.apache.axis.AxisFault e) {
//QUESTA VARIABILE CONTIENE LA STRINGA
e.getFaultDetails()[0].getTextContent();
}
Il problema è che il servizio non da un FaultType (cioè il nostro tipo) ma un AxisFault che all'interno di details contiene il campo di FaultType (che è faultInfo).
ora, come si sistema? eventualmente si può utilizzare sempre l'AxisFault senza definirsi un tipo degli errori? se si, come si crea il WSDL?