I'm running Axis 1.1 using SOAP 1.1. Sorry I didn't mention this earlier. Gary
> -----Original Message----- > From: Cory Wilkerson [mailto:[EMAIL PROTECTED] > Sent: Wednesday, August 27, 2003 9:52 AM > To: [EMAIL PROTECTED] > Subject: RE: Soap Fault Explanation > > > Gary -- what version of Axis are you running? > > -----Original Message----- > From: Gary L Peskin [mailto:[EMAIL PROTECTED] > Sent: Wednesday, August 27, 2003 11:44 AM > To: [EMAIL PROTECTED] > 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:[EMAIL PROTECTED] > > Sent: Wednesday, August 27, 2003 9:35 AM > > To: '[EMAIL PROTECTED]' > > 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:[EMAIL PROTECTED] > > > Sent: Wednesday, August 27, 2003 11:22 AM > > > To: [EMAIL PROTECTED] > > > 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:[EMAIL PROTECTED] > > > > Sent: Wednesday, August 27, 2003 8:02 AM > > > > To: [EMAIL PROTECTED] > > > > 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:[EMAIL PROTECTED] > > > > Sent: Wednesday, August 27, 2003 9:48 AM > > > > To: '[EMAIL PROTECTED]' > > > > 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:[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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >