Thanks for your reply Kishanthan.  Unfortunately, setting that parameter
before calling a web service from the client stub doesn't change anything.
The same web service-specific exception is still matched/generated and sent
back from the stub. The AxisFault received by the client stub is the
correct error - however the stub matches the detail with the exceptions
provided for by the WSDL and sends back the match. I don't think there is
any way around this behaviour besides modifying the stub.

Please le me know if I have misunderstood your response.

Thanks
Matt



On 17 June 2012 17:43, Kishanthan Thangarajah <kshanth2...@gmail.com> wrote:

>
>
> On Thu, May 10, 2012 at 1:13 PM, <mfle...@gmail.com> wrote:
>
>> 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?
>>
>
> There is a parameter in axis2.xml namely
> "DrillDownToRootCauseForFaultReason", which is set to false by default. You
> can set that to true to get the fault reason.
>
> Thanks,
> Kishanthan.
>
>>
>> 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
>>
>
>

Reply via email to