axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cory Wilkerson" <cwilker...@travelnow.com>
Subject RE: Soap Fault Explanation
Date Wed, 27 Aug 2003 16:52:19 GMT
Gary -- what version of Axis are you running?

-----Original Message-----
From: Gary L Peskin [mailto:garyp@firstech.com]
Sent: Wednesday, August 27, 2003 11:44 AM
To: axis-user@ws.apache.org
Subject: RE: Soap Fault Explanation


The client is java.  However, my Stub is called from a method that can
either call the Stub class or, in certain situations, call the endpoint
service class directly, not via Axis.  I want my service class to just throw
the exception, which the client will see.  If the client called the service
class directly, it should see the exception via the normal java exception
mechanism.  Therefor, I'd like the client to always see the same exception
and not have to worry if it's wrapped in an AxisFault or not.

I'm making good progress in my investigation.  Using tcpmon, it looks like
the exception is properly thrown and serialized back to the client.  At the
moment, I'm zeroing in on SOAPFaultBuilder.createFault() which does not seem
to be deserializing this properly.

Gary

> -----Original Message-----
> From: Hansen, Richard [mailto:richard.hansen@thomson.com] 
> Sent: Wednesday, August 27, 2003 9:35 AM
> To: 'axis-user@ws.apache.org'
> Subject: RE: Soap Fault Explanation
> 
> 
> I wonder if it depends on the client. Is it java or something 
> else. If not Java then AxisFault could be useful to get the 
> code and details the way you want. AxisFault has a 
> writeDetails() method that serializes your service specific fields.
> 
> > -----Original Message-----
> > From: Gary L Peskin [mailto:garyp@firstech.com]
> > Sent: Wednesday, August 27, 2003 11:22 AM
> > To: axis-user@ws.apache.org
> > Subject: RE: Soap Fault Explanation
> > 
> > 
> > Cory et al --
> > 
> > I'm looking into this code very carefully at the moment.  I'm
> > trying to
> > generate Service Specific Exceptions but having problems on 
> > the client side
> > where an AxisFault is thrown rather than my actual exception. 
> >  My Service
> > Specific Exceptions extend Exception but not AxisFault.
> > 
> > Do your Service Specific Exceptions contain a no-argument
> > constructor?  As I
> > read JAX-RPC, this shouldn't be necessary.
> > 
> > I'm currently heavily into investigating this code to see 
> if there's 
> > something wrong I'm doing on my end.
> > 
> > Thanks,
> > Gary
> > 
> > > -----Original Message-----
> > > From: Cory Wilkerson [mailto:cwilkerson@travelnow.com]
> > > Sent: Wednesday, August 27, 2003 8:02 AM
> > > To: axis-user@ws.apache.org
> > > Subject: RE: Soap Fault Explanation
> > > 
> > > 
> > > "I know that this question has been asked again and again but
> > > I can't find the answer." -- Sorry, didn't mean to sound 
> > > terse or harsh there, just implying that maybe the Axis folk 
> > > would like to crank out some decent documentation regarding 
> > > the matter.  I've been using Axis for 4 or 5 months and 
> > > didn't know you could specify all the parameters as you did 
> > > below -- that's all manner of interesting.  Where did you 
> > > find the documentation for *that*?
> > > 
> > > Richard -- I'd refute *some* of your points, though I'm
> > > certainly glad someone has some decent knowledge in this 
> > > realm.  The exception I'm successfully serializing does not 
> > > subclass Axis fault and the only config I did was in the wsdl 
> > > (which I didn't generate server side ties from) and in 
> > > server-config my providing a beanMapping entry for my service 
> > > specific exception.  I'm successfully catching my specific 
> > > exception on the client side with both Axis and .NET 
> > > platforms -- Axis manages to throw my exception type on the 
> > > client side whereas with the .NET platform, I parse it out of 
> > > the detail element returned in the fault.
> > > 
> > > All that said, I am using the nightly builds as opposed to
> > > the 1.0 release.
> > > 
> > > Cory
> > > 
> > > 
> > > -----Original Message-----
> > > From: Hansen, Richard [mailto:richard.hansen@thomson.com]
> > > Sent: Wednesday, August 27, 2003 9:48 AM
> > > To: 'axis-user@ws.apache.org'
> > > Subject: RE: Soap Fault Explanation
> > > 
> > > 
> > > 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:m.spinetti@pisa.iol.it]
> > > > Sent: Wednesday, August 27, 2003 9:37 AM
> > > > To: axis-user@ws.apache.org
> > > > 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:m.spinetti@pisa.iol.it]
> > > > > Sent: Wednesday, August 27, 2003 9:13 AM
> > > > > To: axis-user@ws.apache.org
> > > > > 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
> > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 


Mime
View raw message