|
|
Axis 2 example source code file (ServiceSkeleton.xsl)
This example Axis 2 source code file (ServiceSkeleton.xsl) is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.
The Axis 2 ServiceSkeleton.xsl source code
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!--Template for in out message receiver -->
<xsl:template match="/interface">
<xsl:variable name="skeletonname">
<xsl:variable name="qname">
<xsl:variable name="method-prefix">
<xsl:variable name="svcop-prefix">
<xsl:variable name="svcname">
<xsl:variable name="soapVersion">
/**
* <xsl:value-of select="@name"/>.c
*
* This file was auto-generated from WSDL for "<xsl:value-of select="$qname"/>" service
* by the Apache Axis2 version: #axisVersion# #today#
* <xsl:value-of select="$skeletonname"/>
*/
#include "<xsl:value-of select="$svcop-prefix"/>.h"
#include <axis2_svc_skeleton.h>
#include <axutil_array_list.h>
#include <stdio.h>
/**
* functions prototypes
*/
/* On fault, handle the fault */
axiom_node_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_on_fault(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env, axiom_node_t *node);
/* Free the service */
int AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_free(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env);
/* This method invokes the right service method */
axiom_node_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_invoke(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env,
axiom_node_t *node,
axis2_msg_ctx_t *msg_ctx);
/* Initializing the environment */
int AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_init(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env);
/* Create the service */
axis2_svc_skeleton_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_create(const axutil_env_t *env);
static const axis2_svc_skeleton_ops_t <xsl:value-of select="$skeletonname"/>_svc_skeleton_ops_var = {
<xsl:value-of select="$method-prefix"/>_init,
<xsl:value-of select="$method-prefix"/>_invoke,
<xsl:value-of select="$method-prefix"/>_on_fault,
<xsl:value-of select="$method-prefix"/>_free
};
/**
* Implementations for the functions
*/
axis2_svc_skeleton_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_create(const axutil_env_t *env)
{
axis2_svc_skeleton_t *svc_skeleton = NULL;
/* Allocate memory for the structs */
svc_skeleton = AXIS2_MALLOC(env->allocator,
sizeof(axis2_svc_skeleton_t));
svc_skeleton->ops = &<xsl:value-of select="$skeletonname"/>_svc_skeleton_ops_var;
svc_skeleton->func_array = NULL;
return svc_skeleton;
}
int AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_init(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env)
{
svc_skeleton->func_array = axutil_array_list_create(env, 10);
<xsl:for-each select="method">
axutil_array_list_add(svc_skeleton->func_array, env, axutil_strdup(env, "<xsl:value-of select="@localpart"/>"));
</xsl:for-each>
/* Any initialization stuff of <xsl:value-of select="$svcname"/> goes here */
return AXIS2_SUCCESS;
}
int AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_free(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env)
{
/* Free the function array */
if (svc_skeleton->func_array)
{
axutil_array_list_free(svc_skeleton->func_array, env);
svc_skeleton->func_array = NULL;
}
/* Free the service skeleton */
if (svc_skeleton)
{
AXIS2_FREE(env->allocator, svc_skeleton);
svc_skeleton = NULL;
}
return AXIS2_SUCCESS;
}
/*
* This method invokes the right service method
*/
axiom_node_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_invoke(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env,
axiom_node_t *content_node,
axis2_msg_ctx_t *msg_ctx)
{
/* depending on the function name invoke the
* corresponding method
*/
axis2_op_ctx_t *operation_ctx = NULL;
axis2_op_t *operation = NULL;
axutil_qname_t *op_qname = NULL;
axis2_char_t *op_name = NULL;
axiom_node_t *ret_node = NULL;
<xsl:for-each select="method">
<xsl:text>
</xsl:text>
<xsl:variable name="position">
<xsl:variable name="outputtype">
<xsl:choose>
<xsl:when test="output/param/@ours">adb__t*
<xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$outputtype"/> ret_val = NULL;
<xsl:for-each select="input/param[@type!='']">
<xsl:variable name="inputtype">
<xsl:if test="@ours">adb__t*
</xsl:variable>
<xsl:value-of select="$inputtype"/> input_val_ = NULL;
</xsl:for-each>
</xsl:for-each>
operation_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env);
operation = axis2_op_ctx_get_op(operation_ctx, env);
op_qname = (axutil_qname_t *)axis2_op_get_qname(operation, env);
op_name = axutil_qname_get_localpart(op_qname, env);
if (op_name)
{
<xsl:for-each select="method">
<xsl:variable name="position">
<xsl:variable name="name">
<xsl:variable name="method-name">
<xsl:variable name="method-ns">
<xsl:variable name="outputCapsType">
<xsl:variable name="outputtype">
if ( axutil_strcmp(op_name, "<xsl:value-of select="@localpart"/>") == 0 )
{
<xsl:for-each select="input/param[@type!='']">
input_val<xsl:value-of select="$position"/>_ =
<xsl:when test="@ours">
adb_<xsl:value-of select="@type"/>_create( env);
adb_<xsl:value-of select="@type"/>_deserialize(input_val_, env, content_node );
</xsl:when>
<xsl:otherwise>content_node;
</xsl:choose>
ret_val<xsl:value-of select="$position"/> = _(env,
input_val<xsl:value-of select="$position"/>_ );
if ( NULL == ret_val<xsl:value-of select="$position"/> )
{
AXIS2_LOG_ERROR( env->log, AXIS2_LOG_SI, "NULL returnted from the business logic from <xsl:value-of select="$method-name"/> "
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
return <xsl:value-of select="$method-prefix"/>_on_fault( svc_skeleton, env, NULL);
}
ret_node = <xsl:choose>
<xsl:when test="@ours">
adb_<xsl:value-of select="$outputtype"/>_serialize(ret_val, env, NULL, AXIS2_FALSE);
adb_<xsl:value-of select="$outputtype"/>_free(ret_val, env);
adb_<xsl:value-of select="@type"/>_free(input_val_, env);
</xsl:when>
<xsl:otherwise>ret_val;
</xsl:choose>
return ret_node;
</xsl:for-each>
<!-- below was prior to the databinding -->
<!--
<xsl:text>
<xsl:value-of select="$svcop-prefix"/>_(env ,
content_node </xsl:for-each>);
<xsl:if test="$outputtype=''">return NULL; -->
}
</xsl:for-each>
}
printf("<xsl:value-of select="$skeletonname"/> service ERROR: invalid OM parameters in request\n");
return content_node;
}
axiom_node_t* AXIS2_CALL
<xsl:value-of select="$method-prefix"/>_on_fault(axis2_svc_skeleton_t *svc_skeleton,
const axutil_env_t *env, axiom_node_t *node)
{
axiom_node_t *error_node = NULL;
axiom_element_t *error_ele = NULL;
error_ele = axiom_element_create(env, node, "fault", NULL,
&error_node);
axiom_element_set_text(error_ele, env, "<xsl:value-of select="$qname"/> failed",
error_node);
return error_node;
}
/**
* Following block distinguish the exposed part of the dll.
*/
AXIS2_EXTERN int
axis2_get_instance(struct axis2_svc_skeleton **inst,
const axutil_env_t *env)
{
*inst = <xsl:value-of select="$method-prefix"/>_create(env);
if(!(*inst))
{
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
}
AXIS2_EXTERN int
axis2_remove_instance(axis2_svc_skeleton_t *inst,
const axutil_env_t *env)
{
axis2_status_t status = AXIS2_FAILURE;
if (inst)
{
status = AXIS2_SVC_SKELETON_FREE(inst, env);
}
return status;
}
</xsl:template>
</xsl:stylesheet>
Other Axis 2 examples (source code examples)
Here is a short list of links related to this Axis 2 ServiceSkeleton.xsl source code file:
|