Salve a tutti
Domanda da newbie sui web service.
Dopo aver costruito il mio web service con JAXRPC(che funziona), dopo aver costruito l'applicazione client che lo interroga (funzionante anche quella) dovrei gestire in qualche modo una eccezione personalizzata.
So che da lato client arrivano 3 tipi di eccezioni
java.rmi.RemoteException
javax.xml.rpc.soap.SOAPFaultException
a checked, user-defined exception
e fin qui ci siamo. Ho creato la mia eccezione (e il wsdl risulta corretto, almeno ha le specifiche riguardo la mia eccezione) e riporto di seguito quanto fatto
Ci sono anche altri metodi (non legati all'eccezione) che ho tagliato.codice:<wsdl:definitions name="Hello" targetNamespace="com.webservice.Hello" xmlns:ns1="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="com.webservice.Hello" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="com.webservice.Hello" xmlns:tns="com.webservice.Hello" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="MyException" type="tns:MyException" /> <xsd:complexType name="MyException"> <xsd:sequence /> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="loginResponse"> <wsdl:part name="return" type="xsd:string"> </wsdl:part> </wsdl:message> <wsdl:message name="MyException"> <wsdl:part element="tns:MyException" name="MyException"> </wsdl:part> </wsdl:message> <wsdl:portType name="HelloPortType"> <wsdl:operation name="login"> <wsdl:input message="tns:login" name="login"> </wsdl:input> <wsdl:output message="tns:loginResponse" name="loginResponse"> </wsdl:output> <wsdl:fault message="tns:MyException" name="MyException"> </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="login"> <soap:operation soapAction="" style="rpc" /> <wsdl:input name="login"> <soap:body namespace="com.webservice.Hello" use="literal" /> </wsdl:input> <wsdl:output name="loginResponse"> <soap:body namespace="com.webservice.Hello" use="literal" /> </wsdl:output> <wsdl:fault name="MyException"> <soap:fault name="MyException" use="literal" /> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="Hello"> <wsdl:port binding="tns:HelloSoapBinding" name="HelloPort"> <soap:address location="http://localhost:8080/AnotherTest/Hello" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
Qui c'è la mia dichiarazione di eccezione
e il suo usocodice:@WebFault(faultBean="com.webservice.exception.MyException", name="MyException", targetNamespace="com.webservice.Hello") @SOAPBinding(style=Style.RPC) public class MyException extends SOAPFaultException{ private static final long serialVersionUID = 1L; protected String message; public MyException(String message) { super(new QName("http://schemas.xmlsoap.org/ws/2004/08/eventing", message,"wse"), "mess" ,message, null); } }
Il problema è che lato client ottengo semprecodice:public String login(String name, String password) throws MyException { throw new MyException("Messsaggeeeeee"); }
e non la mia eccezione (come desidero).codice:javax.xml.rpc.soap.SOAPFaultException at com.sun.xml.rpc.client.StreamingSender._raiseFault(StreamingSender.java:508) at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:324) at com.sun.xml.rpc.client.dii.CallInvokerImpl.doInvoke(CallInvokerImpl.java:120) at com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:503) at com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandler.java:138) at com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandler.java:102) at $Proxy0.login(Unknown Source) at dynamicproxy.DynamicProxyHello.main(DynamicProxyHello.java:42)
Ora mi chiedo, in cosa sbaglio?
Inoltre è possibile definire un'eccezione personalizzata che arrivi al client? Ho letto di no o che devo modificare il container (che gestisce la richiesta inviandomi la risposta).
Spero che qualcuno che ne sappia più di me sappia darmi una risposta

Rispondi quotando