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
> > 
> > 
> > 
> > 
> 

Reply via email to