the client needs to disable setExceptionToBeThrownOnSOAPFault
ServiceClient.setExceptionToBeThrownOnSOAPFault
now the client is free to handle any exception..
you will need to configure the client method to throw your exception which you
can do at the phase level
ConfigurationContext ctx=UtilServer.getConfigurationContext();
List phases_list=ctx.getAxisConfiguration().getInFlowPhases();
Phase phaseOne=(Phase) phases_list.get(0); //acquire the first phase
phaseOne.addHandler(new FaultHandler());
Notice that the FaultHandler code has these 3 line which you can tweak to
override the
FaultHandler
invoke(MsgContext msgContext)
.....
org.apache.axiom.soap.SOAPFactory fac=msgContext.isSOAP11()?
OMAbstractFactory.getSOAP11Factory() : OMAbstractFactory().getSOAP12Factory();
org.apache.axiom.soap.SOAPFaultCode
PlaceNewLocalNameHere=fac.createSOAPFaultCode();
//override the value with whatever you need here assuming the new FaultCode
overrides SOAPFaultCode
msgContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME,PlaceNewLocalNameHere);
org.apache.axiom.soap.SOAPReasonName
PlaceNewReasonHere=fac.createSOAPFaultReason();
///override the reason with whatever you need here assuming the new ReasonName
overrides SOAPReasonName
msgContext.setProperty(SOAP12Constants.SOAP_FAULT_REASON_NAME,PlaceNewReasonHere);
org.apache.axiom.soap.SOAPFaultDetail
PlaceNewDetailHere=fac.createSOAPFaultDetail();
//override the PlaceNewDetailHere with whatever you need here assuming new
SOAPFaultDetail overrides SOAPFaultDetail
msgContext.setProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME,PlaceNewDetailHere);
throw new FaultThatOverridesAxisFault("FaultThatOverridesAxisFaultException has
occured);
Greetings ,
Martin Gainty
USCitizen(contractor)
Please do not alter or disrupt this transmission. Thank You
Date: Mon, 15 Feb 2010 09:04:08 -0500
Subject: Please help on Axis2 Exception handling
From: [email protected]
To: [email protected]
Dear All,
I ran into a very weird problem with Axis2 exception handling, which puzzled me
for long time. Any help from you Axis2 expert will be greately appreciated!
This is what I did:
1. Get my service POJO ready. All method throws a customized MyException which
is derived from java.lang.Exception2. Use Axis2 java2wsdl to convert this POJO
to WSDL,. I can see the wsdl:fault part of each service call has been created
successfully with name as MyException
3. Then use wsdl2java to generate client side API with ADB binding. Suddenly
Axis2 creates a bunch of exception related classes, such
as:MyExceptionExceptionMyExceptionExsd/MyException
The methods will throw MyExceptionException, which contains MyExceptionE, which
contains xsd/MyException. The xsd/MyException has all properties I defined at
server side. Method also throw AxisFault.
When I run the client code and throw MyException on server, at client side, I
could only catch AxisFault exception which reason string as return of
MyException.getMessage() defined on server. I could never catch MyException nor
MyExceptionException at client side. This is the bigest issue that troubled me.
If Axis2 has to wrap everything in AxisFault at client side, fine, but whey
wsdl2java still throws MyExceptionException in generated code and never throw
it?
Thanks a lot!
Li
_________________________________________________________________
Hotmail: Trusted email with powerful SPAM protection.
http://clk.atdmt.com/GBL/go/201469227/direct/01/