You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Nicholas Palm (JIRA)" <ji...@apache.org> on 2013/04/23 02:53:16 UTC
[jira] [Created] (AXIS2-5514) Fault message lost within fault
recreation of autogen stub class
Nicholas Palm created AXIS2-5514:
------------------------------------
Summary: Fault message lost within fault recreation of autogen stub class
Key: AXIS2-5514
URL: https://issues.apache.org/jira/browse/AXIS2-5514
Project: Axis2
Issue Type: Bug
Reporter: Nicholas Palm
If a fault is thrown and caught to be rethrown within an autogenerated stub class, the original message on the AxisFault is lost. The current implementation uses the default constructor which does not factor in the original message.
Example:
catch(org.apache.axis2.AxisFault f){
org.apache.axiom.om.OMElement faultElt = f.getDetail();
if (faultElt!=null){
if (faultExceptionNameMap.containsKey(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"SomeMethod"))){
//make the fault by reflection
try{
java.lang.String exceptionClassName = (java.lang.String)faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"SomeMethod"));
java.lang.Class exceptionClass = java.lang.Class.forName(exceptionClassName);
java.lang.Exception ex = (java.lang.Exception) exceptionClass.newInstance();
//message class
java.lang.String messageClassName = (java.lang.String)faultMessageMap.get(new org.apache.axis2.client.FaultMapKey(faultElt.getQName(),"SomeMethod"));
java.lang.Class messageClass = java.lang.Class.forName(messageClassName);
java.lang.Object messageObject = fromOM(faultElt,messageClass,null);
java.lang.reflect.Method m = exceptionClass.getMethod("someMethod",
new java.lang.Class[]{messageClass});
m.invoke(ex,new java.lang.Object[]{messageObject});
if (ex instanceof somePath.autogen.SomeFault1){
throw (somePath.autogen.SomeFault1)ex;
}
if (ex somePath.autogen.SomeFault2){
throw (somePath.autogen.SomeFault2)ex;
}
if (ex somePath.autogen.SomeFault3){
throw (somePath.autogen.SomeFault3)ex;
}
throw new java.rmi.RemoteException(ex.getMessage(), ex);
}catch(java.lang.ClassCastException e){
// we cannot intantiate the class - throw the original Axis fault
throw f;
} catch (java.lang.ClassNotFoundException e) {
// we cannot intantiate the class - throw the original Axis fault
throw f;
}catch (java.lang.NoSuchMethodException e) {
// we cannot intantiate the class - throw the original Axis fault
throw f;
} catch (java.lang.reflect.InvocationTargetException e) {
// we cannot intantiate the class - throw the original Axis fault
throw f;
} catch (java.lang.IllegalAccessException e) {
// we cannot intantiate the class - throw the original Axis fault
throw f;
} catch (java.lang.InstantiationException e) {
// we cannot intantiate the class - throw the original Axis fault
throw f;
}
}else{
throw f;
}
}else{
throw f;
}
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org