You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Dimuthu Gamage (JIRA)" <ji...@apache.org> on 2009/02/07 15:40:59 UTC
[jira] Updated: (AXIS2C-1344) Support Custom Fault in ADB generated
code
[ https://issues.apache.org/jira/browse/AXIS2C-1344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dimuthu Gamage updated AXIS2C-1344:
-----------------------------------
Attachment: case45.zip
Fixed (in commit 741901). attached a test case. The idea is taken from the discussion http://www.biglist.com/lists/xsl-list/archives/200311/msg00604.html
API Explanation,
Server Side:
If faults are associated with a method, the faults are put in a union and users are expected to set one in a fault case, in the last parameter of the function.
typedef union
{
adb_MyFirstException_t* MyFirstException;
adb_MySecondException_t* MySecondException;
} axis2_skel_MyService_myNextOperation_fault;
adb_myNextOperationResponse_t* axis2_skel_MyService_myNextOperation(const axutil_env_t *env,
adb_myNextOperation_t* _myNextOperation,
axis2_skel_MyService_myNextOperation_fault *fault);
And constants corrosponding to the faults are also generated,
#define AXIS2_SKEL_MYSERVICE_ERROR_CODES_START (AXIS2_ERROR_LAST + 2000)
typedef enum
{
AXIS2_SKEL_MYSERVICE_ERROR_NONE = AXIS2_SKEL_MYSERVICE_ERROR_CODES_START,
AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYFIRSTEXCEPTION,
AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYSECONDEXCEPTION,
AXIS2_SKEL_MYSERVICE_MYOPERATION_FAULT_MYFIRSTEXCEPTION,
AXIS2_SKEL_MYSERVICE_MYOPERATION_FAULT_MYSECONDEXCEPTION,
AXIS2_SKEL_MYSERVICE_ERROR_LAST
} axis2_skel_MyService_error_codes;
So in a fault case, user can write a code similar to the following to throw the custom soap fault (note that they have to set both the adb fault object and the error constant)
adb_MyFirstException_t *exp = NULL;
exp = adb_MyFirstException_create(env);
adb_MyFirstException_set_text(exp, env, "this is the exception 3");
/* here we are setting the exception, the fault is the last parameter of the method definition */
fault->MyFirstException = exp;
AXIS2_ERROR_SET(env->error,
AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYFIRSTEXCEPTION,
AXIS2_FAILURE);
axutil_error_set_error_message(env->error, "Test exception3");
return NULL;
client side:
Similar to the server side, both the unions and enum of constants are generated. Here is how user should handle the soap faults,
/* doing the request */
op_response = axis2_stub_op_MyService_myOperation(stub, env, op, &fault);
if(op_response == NULL)
{
/* fault is received */
error_code = env->error->error_number;
if(error_code == AXIS2_STUB_MYSERVICE_MYOPERATION_FAULT_MYFIRSTEXCEPTION) {
printf("My First Exception called: with param %s\n",
adb_MyFirstException_get_text(fault.MyFirstException, env));
adb_MyFirstException_free(fault.MyFirstException, env);
fault.MyFirstException = NULL;
}
else if(error_code == AXIS2_STUB_MYSERVICE_MYOPERATION_FAULT_MYSECONDEXCEPTION) {
printf("My Second Exception called: with param %d\n",
adb_MySecondException_get_number(fault.MySecondException, env));
adb_MySecondException_free(fault.MySecondException, env);
fault.MySecondException = NULL;
}
}
> Support Custom Fault in ADB generated code
> ------------------------------------------
>
> Key: AXIS2C-1344
> URL: https://issues.apache.org/jira/browse/AXIS2C-1344
> Project: Axis2-C
> Issue Type: Improvement
> Components: code generation
> Environment: Linux + windows
> Reporter: Dimuthu Gamage
> Assignee: Dimuthu Gamage
> Attachments: case45.zip
>
>
> Support Custom Fault in ADB generated code
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.