axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Damitha Kumarage <damith...@gmail.com>
Subject Re: [Axis2] New changes to environment
Date Thu, 03 Nov 2005 05:41:45 GMT
Samisa Abeysinghe wrote:

> Damitha Kumarage wrote:
>
>> Hi all,
>>
>> I have done some changes to axis2_enviroment_t. Please read and give 
>> your
>> comments.
>>
>> Currently we are facing following problems with the environment
>>
>>   1.  Currently some functions return axis2_status_t (status code)  
>> and some other return types.
>>        We need a conventions as to which functions return status 
>> codes and which return types
>>        Following convention is adapted
>>        * Functions which are getters , creaters, makers should always 
>> return what they are supposed to give and create
>>        * All the other functions should return the status 
>> code.(AXIS2_SUCCESS or error_number other wise
>
>
> All other functions return a status code (AXIS2_SUCCESS, AXIS2_FAILURE 
> or AXIS2_CRTICAL_FAILURE)
> AXIS2_CRTICAL_FAILURE is returned when an unrecoverable error like env 
> NULL happens.
>
>>
>>    2. In case of returning types we again face the problem of return 
>> NULL. Returning NULL from a function
>>        could happen in two instances.
>>            1 error situation
>>            2 as a flag (for example to indicate that a iteration is 
>> over)
>>              When the person who call the application receives null 
>> he should know whether NULL indicate a flag or error.
>>         To facilitate that inside the function, if error situation
>>                 env->error_number is set
>>                env->status_code is set to AXIS2_FAILURE
>>                and return NULL
>>          if NULL is returned as flag set env->status_code to 
>> AXIS2_SUCCESS
>
>
> This, when a user calls a function that returns a pointer, to get to 
> know if the operation is successfull, he/she must check
> if (env->status_code == AXIS2_SUCCESS) before using the return value
>
>>
>>    3. if env passed to a function is null, application  does not 
>> handle it  and crash.
>>        solution:
>>                We need to handle two cases.
>>                if function return status code then
>>
>>                            return AXIS2_ERROR_ENVIRONMENT_IS_NULL;
>
>
> It shoud return AXIS2_CRTICAL_FAILURE staus code.
> Also, should create a temp environment as in the case of returning a 
> pointer. This way we will have consistancy in dealing with env related 
> errors.
>
>>                              else if function return type
>
>
> is a pointer
>
>>                We make the environment as an out parameter so that if 
>> the environment
>>                 received in a function is null then a default 
>> environment is created and set
>>
>>                     env->error_number = AXIS2_ERROR_ENVIRONMENT_IS_NULL;
>>                     env->status_code = AXIS2_FAILURE
>
>
> env->status_code = AXIS2_CRTICAL_FAILURE ;
>
>>                         Then we return NULL from the application. 
>> Note that although we created a
>>                default environment structure it is not used to 
>> proceed the application normally.
>>                it is just used to handle the error situation (that 
>> env is null)
>>
>>                 Then the user who call the application should handle 
>> it as following
>>                            axis2_env_t *env;
>>                            /* Suppose user did properly initialized 
>> env here */
>>                           ........................
>>                           .........................
>>                            /* But here he  mistakenly make env to n 
>> ull */
>>                            env = NULL;
>>                            /*Now he call an axis2 mock function called
>>                             * test_function
>>                             */
>>                            char *msg = test_function(&env);
>>                            int status = 
>> axis2_environment_check_status(env);
>>                            if(AXIS2_SUCCESS == status)
>>                                     /* Proceed normally */
>>                            else if(AXIS2_FAILURE == status)
>
>
>                           else
>
>>                                    char* msg = 
>> env->get_error_message(env->error_number);
>>
>>
>>  4.  Currenly environment can be created as following
>>         axis2_environment_create (allocator,  error, stream, log);
>>         if user use this as following
>>          axis2_environment_create (allocator, NULL, NULL, NULL);
>>          then  default error, stream and log are creatd and used 
>> through out the Axis2.
>>          This behaviour is changed now. Axis2 need allocator error 
>> and stream for its
>>          correct functionlity. but log may be null. But still Axis2 
>> should not create the
>>          default error and stream. if allocator, stream or error is 
>> null, axis2 should
>>         set status_code to AXIS2_FAILURE and set some error_number.
>>                 So now  user of axis2 can use two create functions
>>          axis2_environment_create (allocator, error, stream)
>>          axis2_environment_create_with_log(allocator, error, stream, 
>> log)
>
I'll further added
                 axis2_environment_create (allocator)
       which is not supposed to be used by Axis2 users. This is used 
only to create the default environment


>>
>>         if log is set env->enable_log = AXIS2_TRUE is set. Axis 2 
>> will check this
>>         flag when writing log.
>
>
> This is cool.
>
> Samisa...
>
>>
>> cheers
>> damitha
>>
>>              
>
>
>
>


Mime
View raw message