If you define the exceptions in your WSDL as "faults" in the appropriate pacles. Then wsdl2Java will generate your exception classes and create the required config setup in the stubs and skeletons it generates.
My notes of axis fault handling: Faults - For all practical purposes a client programmer can treat Axis as if it only throws org.apache.axis.AxisFault exceptions. - Axis does not throw javax.xml.rpc.soap.SOAPFaultException. Axis never creates a SOAPFaultException itself. However, since SOAPFaultException is unchecked, one could leak through if thrown by a handler or service implementation. - The invoke methods that are likely to be called by a client programmer (the ones inherited from javax.xml.rpc.Call) return either a service specific exception or org.apache.axis.AxisFault. - A service implementation can throw any type of exception. - Axis faults thrown by a service implementation are returned to the client just as thrown. - A non AxisFault thrown by a service implementation but not configured as a service specific exception will be wrapped in an AxisFault on the client. A faultCode of Server.userException and a local stack trace will be included in the Axisfault. This is not the most useful thing that could happen as it tends to hide the source/cuase of the exception. The fault string included represents the original exception. - Axis must be configured to handle service specific exceptions and recreate them on the client. - Service specific exceptions can can be configured using either parameters in the wsdd deployment file or using calls to org.apache.axis.description.OperationDesc in the service stubs and skeletons. - Service specific exceptions must subclass org.apache.axis.AxisFault. - The WSDL to Java tools will create service specific exceptions that are defined in a wsdl file and create the required configuration code in the stubs and skeletons generated. > -----Original Message----- > From: Marco Spinetti [mailto:[EMAIL PROTECTED] > Sent: Wednesday, August 27, 2003 9:37 AM > To: [EMAIL PROTECTED] > Subject: RE: Soap Fault Explanation > > > Thanks Cory: I know that this question has been asked again and again > but I can't find the answer. > > My steps have been: > > - create the wsdl > - use org.apache.axis.wsdl.WSDL2Java with --server-side > - implementing MySearchBindingImpl.java > - copy deploy.wsdd (service part) to server-config.wsdd > > All is ok except when an axception is generated. > > My service element in server-config.wsdd is: > > <service name="MySearchPort" provider="java:RPC" style="rpc" > use="encoded"> > <parameter name="wsdlTargetNamespace" > value="urn:AriannaSearch"/> > <parameter name="wsdlServiceElement" > value="AriannaSearchService"/> > <parameter name="wsdlServicePort" value="AriannaSearchPort"/> > <parameter name="className" > value="AriannaSearch.AriannaSearchBindingImpl"/> > <parameter name="wsdlPortType" value="AriannaSearchPort"/> > <operation name="doAriannaSearch" qname="operNS:doAriannaSearch" > xmlns:operNS="urn:AriannaSearch" returnQName="return" > returnType="rtns:AriannaSearchResult" > xmlns:rtns="urn:AriannaSearch" > > <parameter name="query" type="tns:string" > xmlns:tns="http://www.w3.org/2001/XMLSchema"/> > <parameter name="pagina" type="tns:int" > xmlns:tns="http://www.w3.org/2001/XMLSchema"/> > <parameter name="service" type="tns:string" > xmlns:tns="http://www.w3.org/2001/XMLSchema"/> > <parameter name="nameparam" type="tns:ArrayOfString" > xmlns:tns="urn:AriannaSearch"/> > <parameter name="valueparam" type="tns:ArrayOfString" > xmlns:tns="urn:AriannaSearch"/> > <fault name="doAriannaException" qname="fns:fault" > xmlns:fns="urn:AriannaSearch" class="AriannaSearch.DoAriannaExcep > tion" type="tns:doAriannaException" xmlns:tns="urn:AriannaSearch"/> > </operation> > <parameter name="allowedMethods" value="doAriannaSearch"/> > > <typeMapping > xmlns:ns="urn:AriannaSearch" > qname="ns:ResultElementArray" > type="java:AriannaSearch.ResultElement[]" > > serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" > > deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > /> > <typeMapping > xmlns:ns="urn:AriannaSearch" > qname="ns:AriannaSearchResult" > type="java:AriannaSearch.AriannaSearchResult" > > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" > > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > > > > > Il mer, 2003-08-27 alle 16:26, Cory Wilkerson ha scritto: > > This question has been asked time and again and I've yet to > see a real definitive answer come through. For starters, you > might want to try some of the Axis nightly drops, I've had > better luck with them serializing my exceptions. > > > > In the case where I have exceptions working, I've > subclassed exception and according to the jax-rpc > specification (I don't know if Axis pays any attention here > at all with exceptions): > > > > 1. Provided accessors for each parameter supplied to my > constructor (and conversely ensured that each accessor had a > parameter in the constructor). > > 2. Ensured that the parameter type in constructor was > identical to return type of accessor. > > 3. Ensured that there was only one accessor with a given > return type (I actually cheated here though I would expect > I'll see some crazy results because of it.) > > > > I also am not sure if Axis appropriately generates fault > elements in your WSDL based on your exception type. If you > don't see it in the WSDL you're generating stubs against, > you'll never see an "exception" in you client code. > > > > Good luck! > > Cory > > > > > > > > -----Original Message----- > > From: Marco Spinetti [mailto:[EMAIL PROTECTED] > > Sent: Wednesday, August 27, 2003 9:13 AM > > To: [EMAIL PROTECTED] > > Subject: Soap Fault Explanation > > > > > > Hi, > > > > I'm developing a soap web service with axis (my > configuration is apache > > + tomcat with axis). > > > > In some circumstances my web services has to create a SOAP > fault which > > has to be sent to the client. > > > > I'm a a bit confused with Axis management of SOAP fault > (I've tried to > > read email in mailing list but without success too). > > > > I've declared my Exception: > > > > public class DoMyException extends org.apache.axis.AxisFault > > implements java.io.Serializable { > > private int codice; > > private java.lang.String stringa; > > > > public DoMyException() { > > } > > > > public DoMyException( > > int codice, > > java.lang.String stringa) { > > this.codice = codice; > > this.stringa = stringa; > > } > > ....... > > } > > > > In my web services method, in some circumstances, I throw such > > exception: > > > > public MySearchResult doMySearch(java.lang.String query) throws > > java.rmi.RemoteException, DoMyException { > > > > ...... > > > > try { > > if (cond) { > > throw new DoMyException(1, "Description"); > > } > > } > > catch (DoMyException e) { > > ...... > > throw e; > > } > > ..... > > } > > > > > > When in my test client I try to generate a SOAP fault I > don't receive > > anything. With SOAPMonitor I see the request SOAP message > but not the > > response. > > > > My client: > > > > try { > > MySearchService service = new MySearchServiceLocator(); > > MySearchPort port = service.getMySearchPort(); > > > > ......... > > MySearchResult r = port.doMySearch(query); > > > > ..... > > } > > catch (DoMyException e) { > > System.err.println("Cod = " + e.getCodice()); > > System.err.println("String = " + e.getStringa()); > > System.exit(1); > > } > > > > > > Probably I'm making some mistakes but I don't see where. > > > > Any help would be very useful. > > > > Thanks > > > > > > Bye > > > > --Marco > > > > > > > > >