axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary L Peskin" <ga...@firstech.com>
Subject RE: Soap Fault Explanation
Date Wed, 27 Aug 2003 16:57:53 GMT
I'm running Axis 1.1 using SOAP 1.1.  Sorry I didn't mention this earlier.

Gary

> -----Original Message-----
> From: Cory Wilkerson [mailto:cwilkerson@travelnow.com] 
> Sent: Wednesday, August 27, 2003 9:52 AM
> To: axis-user@ws.apache.org
> Subject: RE: Soap Fault Explanation
> 
> 
> 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