Newsgroup: it.comp.java
Titolo: WebService e le Exception

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
nel wsdl le cose che riguardano la mia eccezione sono
<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="greetResponse">
    <wsdl:part name="return" type="xsd:string">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="greet">
    <wsdl:part name="arg0" 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
@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);
	}
}
e il suo uso
public String login(String name, String password) throws MyException {
		throw new MyException("Messsaggeeeeee");
}
Il problema è che lato client ottengo sempre
javax.xml.rpc.soap.SOAPFaultException e non la mia eccezione (come
desidero).
Ora mi chiedo, in cosa sbaglio?
Inoltre è possibile definire un'eccezione personalizzata che arrivi al
client? Ho letto di no perché, dovrei comunque modificare il container
(cosa che non mi va di fare).

 ha scritto nel messaggio 
news:fc84cd16-d5e7-4a5c...@z28g2000yqh.googlegroups.com...


intanto grazie per la risposta, a quanto vedo sono in pochi a lavorare
su queste cose.
Purtroppo non posso usare axis (ragioni aziendali su cui non posso
disquisire), per cui se esistesse il modo per creare l'eccezione well
formed (come la chiama lui checked) sarebbe cosa buona e giusta.
Altrimenti abbiamo risolto con SOAPFaultException personalizzando il
messaggio (che arriva al client) e in quel caso andando a parsare la
soluzione.
Ma è una soluzione che non mi piace (e nemmeno sfrutta le potenzialità
del linguaggio ad oggetti).
Mi rendo anche conto che il container pone limiti visto che a priori
non sa la natura del client (e se è in grado di gestire l'eccezione).
Vabbé nel tempo libero faccio qualche altra ricerca.
Grazie ancora e buona giornata