I believe that this is actually a bug in the SOAPMonitor tool, Axis is
correctly returning a soap fault but the tool is not showing it. Try
repeating your test with another monitoring tool e.g. tcpTrace[1],
soapscope[2] etc.

Cheers
Simon
www.pocketsoap.com
[1] www.pocketsoap.com/tcpTrace
[2] www.mindreef.com 

> -----Original Message-----
> From: Keast Ann [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, September 22, 2004 10:32 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Axis 1.1 samples.fault: No SOAP Fault response
> 
> I tried the modified samples fault code (in the samples.fault 
> package) from Richard Hanson at 
> http://www.mail-archive.com/[EMAIL PROTECTED]/msg03552.html. 
> This code includes a case where an AxisFault is thrown when the
> getEmployees() operation is called. I made no modifications 
> to the source, deployed the webservice with the AdminClient, 
> and invoked it from the EmployeeClient.
> 
> Again, when I request a valid employee "#001" - I get a SOAP 
> response for Bill Gates. (Viewable in SOAPMonitor)
> 
> When I call the getEmployees operation - I do not get a SOAP 
> Response. 
> The AxisFault is NOT returned in the form of SOAP. 
> 
> In my EmployeeClient I/O, I get:
> ===========================================================
> Get Employees -
> Fault =====================================================
> AxisFault
>  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.Client
>  faultSubcode: 
>  faultString: Operation is not yet implemented.
>  faultActor: 
>  faultNode: 
>  faultDetail: 
>         {}string:getEmployees()
>         {}string:Not Implemented
> ===========================================================
> 
> So am AxisFault is thrown and caught(as expected in the 
> code), but it isn't sent back as SOAP. 
> 
>     public Employee[] getEmployees() throws AxisFault {
>       AxisFault fault = new AxisFault();
>       fault.setFaultCode(new
> QName("http://schemas.xmlsoap.org/soap/envelope/";, "Server.Client"));
>       fault.setFaultString("Operation is not yet implemented.");
>       fault.addFaultDetailString("getEmployees()");
>       fault.addFaultDetailString("Not Implemented");
>       throw fault;
>     }
> 
> I don't understand ... very very confused. Since the AXIS API 
> states "An exception which maps cleanly to a SOAP fault. This 
> is a base class for exceptions which are mapped to faults."
> 
> Are there any configuration options that I need to turn on in Axis?
> Perhaps in the server-config.wsdd? 
> 
> Thank you,
> Ann
> 
> [EMAIL PROTECTED] wrote:
> > 
> > from memory the nosuchemployee extends remote exception (as 
> opposed to 
> > extending axis fault) hence you see an exception client side. the 
> > recommended way is to use faults as opposed to exceptions 
> for interop. 
> > the fault sample included in axis1.1 isnt especially good in my 
> > opinion -
> > 
> > Richard Hanson posted some useful notes at 
> > http://www.mail-archive.com/[EMAIL PROTECTED]/msg03552.html
> > 
> > also look at
> > http://www-106.ibm.com/developerworks/xml/library/ws-tip-jaxrpc.html
> > 
> > /t
> > 
> > > I tried the samples.fault web service included in Axis 
> 1.1 Release. 
> > > I made no modifications to the source, deployed the 
> webservice with 
> > > the AdminClient, and invoked it from the EmployeeClient.
> > >
> > > When I request a valid employee "#001" - I get a SOAP 
> response for 
> > > Bill Gates. When I request an invalid employee "1" - I do 
> not get a 
> > > SOAP Response. I get the stack dump in the EmployeeClient 
> I/O window 
> > > (see below).
> > >
> > > I have no idea why the NoSuchEmployee exception is NOT 
> returned in 
> > > the form of a SOAP Fault. I am using SOAP Monitor to view the 
> > > request/responses.
> > >
> > > Could you please tell me what I am doing wrong or if I am 
> taking the 
> > > wrong approach? This is my first experimentation with 
> SOAP Faults. I 
> > > am using Axis Final Version 1.1
> > >
> > > Thank you,
> > > Ann
> > >
> > > Stack Dump:
> > > samples.faults.NoSuchEmployeeFault
> > >         at 
> > > sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> > > Method)
> > >         at
> > > 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeCo
> nstructorAccessorImpl.java:39)
> > >         at
> > > 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Dele
> gatingConstructorAccessorImpl.java:27)
> > >         at
> > > java.lang.reflect.Constructor.newInstance(Constructor.java:274)
> > >         at java.lang.Class.newInstance0(Class.java:308)
> > >         at java.lang.Class.newInstance(Class.java:261)
> > >         at
> > > 
> org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeser
> ializer.java:125)
> > >         at
> > > 
> org.apache.axis.encoding.ser.BeanDeserializerFactory.getGenera
> lPurpose(BeanDeserializerFactory.java:127)
> > >         at
> > > 
> org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeseri
> alizerAs(BaseDeserializerFactory.java:125)
> > >         at
> > > 
> org.apache.axis.encoding.DeserializationContextImpl.getDeseria
> lizer(DeserializationContextImpl.java:481)
> > >         at
> > > 
> org.apache.axis.encoding.DeserializationContextImpl.getDeseria
> lizerForType(DeserializationContextImpl.java:554)
> > >         at
> > > 
> org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(S
> OAPFaultDetailsBuilder.java:177)
> > >         at
> > > 
> org.apache.axis.encoding.DeserializationContextImpl.startEleme
> nt(DeserializationContextImpl.java:1040)
> > >         at
> > > 
> org.apache.xerces.parsers.AbstractSAXParser.startElement(Unkno
> wn Source)
> > >         at
> > > 
> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unk
> > > nown
> > > Source)
> > >         at
> > > 
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentConten
> > > tDispatcher.dispatch(Unknown
> > > Source)
> > >         at
> > > 
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(U
> > > nknown
> > > Source)
> > >         at 
> > > org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> > > Source)
> > >         at 
> org.apache.xerces.parsers.DTDConfiguration.parse(Unknown
> > > Source)
> > >         at 
> org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> > >         at 
> org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> > > Source)
> > >         at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
> > >         at
> > > 
> org.apache.axis.encoding.DeserializationContextImpl.parse(Dese
> rializationContextImpl.java:257)
> > >         at 
> org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:582)
> > >         at 
> org.apache.axis.Message.getSOAPEnvelope(Message.java:447)
> > >         at 
> org.apache.axis.client.Call.invokeEngine(Call.java:2702)
> > >         at org.apache.axis.client.Call.invoke(Call.java:2665)
> > >         at org.apache.axis.client.Call.invoke(Call.java:2355)
> > >         at org.apache.axis.client.Call.invoke(Call.java:2278)
> > >         at org.apache.axis.client.Call.invoke(Call.java:1772)
> > >         at 
> > > samples.faults.EmployeeClient.main(EmployeeClient.java:48)
> > > Exception in thread "main"
> > >
> 

Reply via email to