# phase resolver

## Modules
| phase holder
## Files
file | axis2_phase_resolver.h
## Typedefs
typedef struct axis2_phase_resolver | axis2_phase_resolver_t
## Functions
AXIS2_EXTERN void | axis2_phase_resolver_free (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_engage_module_globally (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_module_desc *module)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_engage_module_to_svc (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_svc *svc, struct axis2_module_desc *module_desc)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_engage_module_to_op (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_op *axis_op, struct axis2_module_desc *module_desc)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_build_execution_chains_for_svc (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_build_execution_chains_for_module_op (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_op *op)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_disengage_module_from_svc (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_svc *svc, struct axis2_module_desc *module_desc)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_disengage_module_from_op (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env, struct axis2_op *axis_op, struct axis2_module_desc *module_desc)
AXIS2_EXTERN axis2_status_t | axis2_phase_resolver_build_transport_chains (axis2_phase_resolver_t *phase_resolver, const axutil_env_t *env)
AXIS2_EXTERN axis2_phase_resolver_t * | axis2_phase_resolver_create (const axutil_env_t *env)
AXIS2_EXTERN axis2_phase_resolver_t * | axis2_phase_resolver_create_with_config (const axutil_env_t *env, struct axis2_conf *axis2_config)
AXIS2_EXTERN axis2_phase_resolver_t * | axis2_phase_resolver_create_with_config_and_svc (const axutil_env_t *env, struct axis2_conf *axis2_config, struct axis2_svc *svc)

## Detailed Description

Engaging modules into axis2 configuration, services and operations are done here. This is accomplished mainly by following operations respectively. axis2_phase_resolver_engage_module_globally(). axis2_phase_resolver_engage_module_to_svc(). axis2_phase_resolver_engage_module_to_op(). The user normally engage a module programmatically or using configuration files. When an application client engage a module programmatically he can use axis2_op_client_engage_module() function, or axis2_svc_client_engage_module() function. Engaging using configuration files means adding a module_ref parameter into services.xml or axis2.xml. In whatever way engaging a module finally sums upto addding module handlers into each operations flows in the order defined in module.xml. Here flows in operations are actually array lists of user defined phases (See op.c).

Above functions in phase resolver add module handlers into operation flows as mentioned above as well as add module handlers into system defined phases. User defined phases are added into each operation at deployment time before handlers are added into them by phase resolver. System define phases are added into axis2_conf_t structure and predefined handlers are added to them before module handlers are added to them by phase resolver.

Modules defined in axis2.xml are engaged by call to axis2_conf_engage_module() function. Modules defined in services xml are engaged by call to axis2_svc_enage_module() or axis2_svc_grp_engage_module(). Modules define in operation tag under services.xml are engaged by call to axis2_op_engage_module() function. These function in tern call one of axis2_phase_resolver_engage_module_globally() or axis2_phase_resolver_engage_module_to_svc() or axis2_phase_resolver_engage_module_to_op.

Also when you add a service programmaticaly into axis2_conf_t you need to build execution chains for that services operations. axis2_phase_resolver_build_execution_chains_for_svc() is the function to be called for that purpose. This will extract the already engaged modules for the configuration and service and add handlers from them into operation phases.

## Typedef Documentation

typedef struct axis2_phase_resolver axis2_phase_resolver_t

Type name for axis2_phase_resolver

## Function Documentation

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_build_execution_chains_for_module_op | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_op * | op |
| ) |  |  |

Builds execution chains for given module operation.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | op | pointer to operation

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_build_execution_chains_for_svc | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env |
| ) |  |  |

Builds the execution chains for service. Execution chains are collection of phases that are invoked in the execution path. Execution chains for system defined phases are created when call to engage_module_globally() function. Here it is created for service operations.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_build_transport_chains | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env |
| ) |  |  |

Builds transport chains. This function is no longer used in Axis2/C and hence marked as deprecated.

Deprecated:

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_phase_resolver_t* axis2_phase_resolver_create | ( | const axutil_env_t * | env | ) |

Creates phase resolver struct.

Parameters:

  | env | pointer to environment struct

Returns:
  pointer to newly created phase resolver

AXIS2_EXTERN axis2_phase_resolver_t* axis2_phase_resolver_create_with_config | ( | const axutil_env_t * | env,
|  | struct axis2_conf * | axis2_config |
| ) |  |  |

Creates phase resolver struct with given configuration.

Parameters:

  | env | pointer to environment struct
  | axis2_config | pointer to aixs2 configuration, phase resolver created would not assume ownership of configuration

Returns:
  pointer to newly created phase resolver

AXIS2_EXTERN axis2_phase_resolver_t* axis2_phase_resolver_create_with_config_and_svc | ( | const axutil_env_t * | env,
|  | struct axis2_conf * | axis2_config,
|  | struct axis2_svc * | svc |
| ) |  |  |

Creates phase resolver struct with given configuration and service.

Parameters:

  | env | pointer to environment struct
  | aixs2_config | pointer to aixs2 configuration, phase resolver created would not assume ownership of configuration
  | svc | pointer to service, phase resolver created would not assume ownership of service

Returns:
  pointer to newly created phase resolver

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_disengage_module_from_op | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_op * | axis_op,
|  | struct axis2_module_desc * | module_desc |
| ) |  |  |

Disengages the given module from the given operation.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | axis_op | pointer to axis operation
  | pointer | to module description

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_disengage_module_from_svc | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_svc * | svc,
|  | struct axis2_module_desc * | module_desc |
| ) |  |  |

Disengages the given module from the given service. This means the given module would be disengaged from all operations of the given service.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | svc | pointer to service
  | module_desc | pointer to module description

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_engage_module_globally | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_module_desc * | module |
| ) |  |  |

Engages the given module globally. Engaging a module globally means that the given module would be engaged to all operations in all services.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | module | pointer to module

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_engage_module_to_op | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_op * | axis_op,
|  | struct axis2_module_desc * | module_desc |
| ) |  |  |

Engages the given module to the given operation.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | axis_op | pointer to axis operation
  | pointer | to module description

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN axis2_status_t axis2_phase_resolver_engage_module_to_svc | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env,
|  | struct axis2_svc * | svc,
|  | struct axis2_module_desc * | module_desc |
| ) |  |  |

Engages the given module to the given service. This means the given module would be engaged to all operations of the given service.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct
  | svc | pointer to service
  | module_desc | pointer to module description

Returns:
  AXIS2_SUCCESS on success, else AXIS2_FAILURE

AXIS2_EXTERN void axis2_phase_resolver_free | ( | axis2_phase_resolver_t * | phase_resolver,
|  | const axutil_env_t * | env |
| ) |  |  |

Frees phase resolver.

Parameters:

  | phase_resolver | pointer to phase resolver
  | env | pointer to environment struct

Returns:
  void