Hi all I have generated a client stub to call a 3rd party web service using Wsdl2Java. The provided WSDL (and XSDs imported it) includes a number of faults which are generated and returned by Axis2 as exceptions (all as per usual so far).
However, the actual Soap message returned by the web service when a fault is encountered also includes some handy information outside of the Detail element, namely in the Reason element. An example is below: <s:Body> <s:Fault> <s:Code> <s:Value>s:Sender</s:Value> </s:Code> <s:Reason> <s:Text xml:lang="en-AU">The RegistrationEndDateTime has an invalid datetime format. Check that it does not specify timezone information or have more than seconds precision.</s:Text> </s:Reason> <s:Detail> <InvalidDateTimeFormatFaultDetail xmlns="http://schemas.xyz/faults" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <ErrorNumber>50016</ErrorNumber> <ErrorReferenceId>7f2f1085-9c7e-44a8-b1b7-2a995d0a4e0f</ErrorReferenceId> <RequestProcessedByEnvironment>Discovery</RequestProcessedByEnvironment> <ElementName>RegistrationEndDateTime</ElementName> </InvalidDateTimeFormatFaultDetail> </s:Detail> </s:Fault> </s:Body> The InvalidDateTimeFormatFaultDetail is what is defined in the WSDL/XSD. Axis2 only generates this detail bit as the exception - the rest is abandoned. I therefore don't have access to the other soap fault fields, such as Code and Reason. I had a look at the stub, and can see where it catches an AxisFault, pulls out its Detail element, matches it up with one of the defined exceptions from the WSDL, and populates and throws an instance of the WSDL exception with the details from the Detail element. Is there any way to work-around this so I can get access to the Reason data? One thing I did try was generating the stub with a different exception base class (using -ebc) of org.apache.axis2.AxisFault. This actually ends up providing the info I need, mainly because in the stub it gets an instantiation exception when trying to instantiate the WSDL exception and cast it to java.lang.Exception. The stub then throws the original AxisFault. This provides me all the data I want, but it seems kind of wrong to do it this way (i.e. getting the data through the fact the stub can't process the exception properly :-) ). Thoughts anyone? Thanks heaps Matt