Author: damitha
Date: Thu Oct 30 19:46:32 2008
New Revision: 709329
URL: http://svn.apache.org/viewvc?rev=709329&view=rev
Log:
Code refactoring Savan/C. There were lot of code duplicates. Fixed them
Modified:
webservices/savan/trunk/c/include/savan_util.h
webservices/savan/trunk/c/src/client/savan_client.c
webservices/savan/trunk/c/src/core/savan_sub_processor.c
webservices/savan/trunk/c/src/subs_mgr/services.xml
webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
webservices/savan/trunk/c/src/util/savan_util.c
Modified: webservices/savan/trunk/c/include/savan_util.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Thu Oct 30 19:46:32 2008
@@ -29,6 +29,8 @@
#include <savan_constants.h>
#include <savan_subscriber.h>
#include <savan_sub_processor.h>
+#include <axiom_node.h>
+#include <axiom_element.h>
#ifdef __cplusplus
extern "C"
@@ -314,6 +316,20 @@
savan_util_get_svc_client(
const axutil_env_t *env);
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ savan_util_process_subscriber_node(
+ const axutil_env_t *env,
+ axiom_node_t *sub_node,
+ axiom_element_t *sub_elem,
+ savan_subscriber_t *subscriber,
+ axis2_conf_t *conf);
+
+ AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+ savan_util_create_subscriber_node(
+ const axutil_env_t *env,
+ savan_subscriber_t *subscriber,
+ axiom_node_t *parent_node);
+
/** @} */
#ifdef __cplusplus
}
Modified: webservices/savan/trunk/c/src/client/savan_client.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/savan_client.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_client.c Thu Oct 30 19:46:32 2008
@@ -21,7 +21,9 @@
#include <axis2_addr.h>
#include <savan_client.h>
+#include <savan_util.h>
#include <savan_constants.h>
+#include <savan_subscriber.h>
struct savan_client_t
{
@@ -49,8 +51,6 @@
axiom_node_t *response_node,
const axutil_env_t *env);
-/******************************************************************************/
-
AXIS2_EXTERN savan_client_t * AXIS2_CALL
savan_client_create(
const axutil_env_t *env)
@@ -72,8 +72,6 @@
return client;
}
-/******************************************************************************/
-
AXIS2_EXTERN axis2_status_t AXIS2_CALL
savan_client_subscribe(
savan_client_t *client,
@@ -83,33 +81,22 @@
{
axis2_options_t *wsa_options = NULL;
const axis2_char_t *old_action = NULL;
- axiom_namespace_t *ns = NULL;
axiom_node_t *reply = NULL;
axiom_node_t *sub_node = NULL;
- axiom_node_t *endto_node = NULL;
- axiom_node_t *delivery_node = NULL;
- axiom_node_t *notify_node = NULL;
- axiom_node_t *filter_node = NULL;
- axiom_node_t *expires_node = NULL;
- axiom_element_t* sub_elem = NULL;
- axiom_element_t* endto_elem = NULL;
- axiom_element_t* delivery_elem = NULL;
- axiom_element_t* notify_elem = NULL;
- axiom_element_t* filter_elem = NULL;
- axiom_element_t* expires_elem = NULL;
+ axiom_element_t *body_elem = NULL;
+ axis2_char_t *sub_id = NULL;
+ axis2_char_t *sub_url = NULL;
+ axis2_char_t *sub_elem_local_name = NULL;
+ savan_subscriber_t *subscriber = NULL;
axis2_char_t *endto = NULL;
axis2_char_t *notify = NULL;
axis2_char_t *filter = NULL;
axis2_char_t *filter_dialect = NULL;
axis2_char_t *expires = NULL;
- axiom_element_t *body_elem = NULL;
- axis2_char_t *sub_id = NULL;
- axis2_char_t *sub_url = NULL;
- axis2_char_t *sub_elem_local_name = NULL;
- axiom_attribute_t *dialect = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "[savan] Start:savan_client_subscribe");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_client_subscribe");
/* set wsa action as Subscribe. remember the old action */
wsa_options = (axis2_options_t*)axis2_svc_client_get_options(svc_client,
env);
@@ -122,46 +109,25 @@
filter = axutil_hash_get(options, SAVAN_OP_KEY_FILTER,
AXIS2_HASH_KEY_STRING);
filter_dialect = axutil_hash_get(options, SAVAN_OP_KEY_FILTER_DIALECT,
AXIS2_HASH_KEY_STRING);
expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES,
AXIS2_HASH_KEY_STRING);
-
- /* create the body of the Subscribe request */
- ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
- sub_elem = axiom_element_create(env, NULL, ELEM_NAME_SUBSCRIBE, ns,
&sub_node);
-
- /* EndTo element */
- endto_elem = axiom_element_create(env, sub_node, ELEM_NAME_ENDTO, ns,
- &endto_node);
- axiom_element_set_text(endto_elem, env, endto, endto_node);
-
- /* Delivery element */
- delivery_elem = axiom_element_create(env, sub_node, ELEM_NAME_DELIVERY, ns,
- &delivery_node);
-
- notify_elem = axiom_element_create(env, delivery_node, ELEM_NAME_NOTIFYTO,
ns,
- ¬ify_node);
- axiom_element_set_text(notify_elem, env, notify, notify_node);
-
- /* Expires element */
- expires_elem = axiom_element_create(env, sub_node, ELEM_NAME_EXPIRES, ns,
- &expires_node);
- axiom_element_set_text(expires_elem, env, expires, expires_node);
- /* Filter element */
- filter_elem = axiom_element_create(env, sub_node, ELEM_NAME_FILTER, ns,
- &filter_node);
- axiom_element_set_text(filter_elem, env, filter, filter_node);
-
- if(filter_dialect == NULL)
- {
- dialect = axiom_attribute_create(env,
- "Dialect", DEFAULT_FILTER_DIALECT, NULL);
- }
- else
- {
- dialect = axiom_attribute_create(env,
- "Dialect", filter_dialect, NULL);
- }
- axiom_element_add_attribute(filter_elem, env, dialect ,filter_node);
-
+ subscriber = savan_subscriber_create(env);
+ endpoint_ref = axis2_endpoint_ref_create(env, endto);
+ savan_subscriber_set_end_to(subscriber, env, endpoint_ref);
+ endpoint_ref = axis2_endpoint_ref_create(env, notify);
+ savan_subscriber_set_notify_to(subscriber, env, endpoint_ref);
+ savan_subscriber_set_filter(subscriber, env, filter);
+ savan_subscriber_set_filter_dialect(subscriber, env, filter_dialect);
+ savan_subscriber_set_expires(subscriber, env, expires);
+ /* Create the Subscriber node */
+ sub_node = savan_util_create_subscriber_node(env, subscriber, NULL);
+ if(!sub_node)
+ {
+ status = axutil_error_get_status_code(env->error);
+ savan_subscriber_free(subscriber, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the
subscriber node");
+ return status;
+ }
+
/* send the Subscription and wait for the response */
reply = axis2_svc_client_send_receive(svc_client, env, sub_node);
@@ -170,9 +136,10 @@
if (!reply)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to send
subscription "
- "request. Error: %d Reason: %s", env->error->error_number,
- AXIS2_ERROR_GET_MESSAGE(env->error));
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to send subscription request. Error: %d
Reason: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
@@ -185,7 +152,7 @@
/* Check whether we have received a SubscribeResponse */
sub_elem_local_name = axiom_element_get_localname(body_elem, env);
- if (axutil_strcmp(ELEM_NAME_SUB_RESPONSE, sub_elem_local_name) != 0)
+ if (axutil_strcmp(ELEM_NAME_SUB_RESPONSE, sub_elem_local_name))
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscription failed");
return AXIS2_FAILURE;
@@ -197,14 +164,10 @@
sub_url = savan_client_get_sub_url_from_response(body_elem, reply, env);
client->sub_url = axutil_strdup(env, sub_url);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "[savan] End:savan_client_subscribe");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_client_subscribe");
return AXIS2_SUCCESS;
}
-
-/******************************************************************************/
-
AXIS2_EXTERN axis2_status_t AXIS2_CALL
savan_client_renew(
savan_client_t *client,
@@ -263,8 +226,6 @@
return status;
}
-/******************************************************************************/
-
AXIS2_EXTERN axis2_status_t AXIS2_CALL
savan_client_unsubscribe(
savan_client_t *client,
@@ -313,8 +274,6 @@
return status;
}
-/******************************************************************************/
-
AXIS2_EXTERN axis2_char_t * AXIS2_CALL
savan_client_get_status(
savan_client_t *client,
@@ -388,7 +347,6 @@
return expires;
}
-/*****************************************************************************/
AXIS2_EXTERN axis2_char_t * AXIS2_CALL
savan_client_get_sub_id(
savan_client_t *client)
@@ -403,8 +361,6 @@
return client->sub_url;
}
-/*****************************************************************************/
-
axis2_status_t AXIS2_CALL
savan_client_add_sub_id_to_soap_header(
savan_client_t *client,
@@ -415,8 +371,6 @@
axiom_node_t *id_node = NULL;
axiom_element_t *id_elem = NULL;
- AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
/* Create a node with the subscription id and attach it as a soap header
* to the service client */
@@ -438,8 +392,6 @@
}
-/******************************************************************************/
-
axis2_char_t * AXIS2_CALL
savan_client_get_sub_id_from_response(
axiom_element_t *response_elem,
Modified: webservices/savan/trunk/c/src/core/savan_sub_processor.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/savan_sub_processor.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Thu Oct 30
19:46:32 2008
@@ -89,6 +89,7 @@
savan_subscriber_t *subscriber = NULL;
axis2_char_t *expires = NULL;
axis2_char_t *id = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_sub_processor_subscribe");
@@ -98,7 +99,8 @@
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a
subscriber");
AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER,
AXIS2_FAILURE);
- return AXIS2_FAILURE;
+ status = axutil_error_get_status_code(env->error);
+ return status;
}
/* Set the expiry time on the subscription */
/* TODO : For now we are ignoring the Expiry sent by the client. Add
support
@@ -118,17 +120,19 @@
* the list.
*/
- if (savan_sub_processor_validate_subscription(subscriber, env, msg_ctx)
- == AXIS2_FAILURE)
- {
+ if (AXIS2_SUCCESS != (status =
savan_sub_processor_validate_subscription(subscriber, env,
+ msg_ctx)))
+ {
+ savan_subscriber_free(subscriber, env);
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
"[savan] Encountered a subscription validation fault.");
- return AXIS2_FAILURE;
+ return status;
}
- if(savan_util_add_subscriber(env, msg_ctx, subscriber) == AXIS2_FAILURE)
+ if(AXIS2_SUCCESS != (status = savan_util_add_subscriber(env, msg_ctx,
subscriber)))
{
- return AXIS2_FAILURE;
+ savan_subscriber_free(subscriber, env);
+ return status;
}
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_sub_processor_subscribe");
@@ -256,46 +260,31 @@
const axutil_env_t *env,
axis2_msg_ctx_t *msg_ctx)
{
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
savan_subscriber_t *subscriber = NULL;
axis2_char_t *sub_id = NULL;
axiom_soap_envelope_t *envelope = NULL;
axiom_soap_body_t *body = NULL;
axutil_qname_t *qname = NULL;
-
axiom_node_t *body_node = NULL;
axiom_node_t *sub_node = NULL;
- axiom_node_t *endto_node = NULL;
- axiom_node_t *delivery_node = NULL;
- axiom_node_t *notify_node = NULL;
- axiom_node_t *filter_node = NULL;
- axiom_node_t *expires_node = NULL;
-
axiom_element_t *body_elem = NULL;
axiom_element_t *sub_elem = NULL;
- axiom_element_t *endto_elem = NULL;
- axiom_element_t *delivery_elem = NULL;
- axiom_element_t *notify_elem = NULL;
- axiom_element_t *expires_elem = NULL;
- axiom_element_t *filter_elem = NULL;
-
- axis2_char_t *endto = NULL;
- axis2_char_t *notify = NULL;
- axis2_char_t *expires = NULL;
- axis2_char_t *filter = NULL;
- axis2_char_t *filter_dialect = NULL;
axis2_char_t *topic = NULL;
-
- axis2_endpoint_ref_t *endto_epr = NULL;
- axis2_endpoint_ref_t *notify_epr = NULL;
axis2_endpoint_ref_t *topic_epr = NULL;
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,
"[savan] Entry:savan_sub_processor_create_subscriber_from_msg");
-
+
+ conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+ conf = axis2_conf_ctx_get_conf(conf_ctx, env);
subscriber = savan_subscriber_create(env);
if (!subscriber)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a
subscriber instance");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a
subscriber instance");
+ axutil_error_set_status_code(env->error, AXIS2_FAILURE);
return NULL;
}
@@ -313,6 +302,7 @@
if (!envelope)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the
soap envelop");
+ axutil_error_set_status_code(env->error, AXIS2_FAILURE);
return NULL;
}
@@ -320,6 +310,7 @@
if (!body)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the
soap body");
+ axutil_error_set_status_code(env->error, AXIS2_FAILURE);
return NULL;
}
@@ -334,98 +325,29 @@
axutil_qname_free(qname, env);
/* Now read each sub element of Subscribe element */
- if(sub_elem)
+ status = savan_util_process_subscriber_node(env, sub_node, sub_elem,
subscriber, conf);
+ if(AXIS2_SUCCESS != status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Parsing subscriber
node failed");
+ axutil_error_set_status_code(env->error, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ if(topic_epr)
+ {
+ topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr,
+ env);
+ }
+
+ if(topic)
{
- /* EndTo */
- qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE,
NULL);
- endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
qname,
- sub_node,
&endto_node);
- axutil_qname_free(qname, env);
-
- if(endto_elem)
- {
- endto = axiom_element_get_text(endto_elem, env, endto_node);
- if(endto)
- {
- endto_epr = axis2_endpoint_ref_create(env, endto);
- savan_subscriber_set_end_to(subscriber, env, endto_epr);
- }
- }
-
- /* Get Delivery element and read NotifyTo */
- qname = axutil_qname_create(env, ELEM_NAME_DELIVERY,
EVENTING_NAMESPACE, NULL);
- delivery_elem = axiom_element_get_first_child_with_qname(sub_elem,
env, qname,
- sub_node,
&delivery_node);
- axutil_qname_free(qname, env);
- if(delivery_elem)
- {
- qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO,
EVENTING_NAMESPACE, NULL);
- notify_elem =
axiom_element_get_first_child_with_qname(delivery_elem, env, qname,
-
delivery_node, ¬ify_node);
- axutil_qname_free(qname, env);
- if(notify_elem)
- {
- notify = axiom_element_get_text(notify_elem, env, notify_node);
- if(notify)
- {
- notify_epr = axis2_endpoint_ref_create(env, notify);
- savan_subscriber_set_notify_to(subscriber, env,
notify_epr);
- }
- }
- }
- /* Expires */
- qname = axutil_qname_create(env, ELEM_NAME_EXPIRES,
EVENTING_NAMESPACE, NULL);
- expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
qname,
- sub_node,
&expires_node);
- axutil_qname_free(qname, env);
- if(expires_elem)
- {
- expires = axiom_element_get_text(expires_elem, env, expires_node);
- if(expires)
- savan_subscriber_set_expires(subscriber, env, expires);
- }
-
- /* Filter */
- qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE,
NULL);
- filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
- qname,
- sub_node,
- &filter_node);
- axutil_qname_free(qname, env);
- if(filter_elem)
- {
- qname = axutil_qname_create(env, SAVAN_FILTER_DIALECT, NULL, NULL);
- filter = axiom_element_get_text(filter_elem, env, filter_node);
- filter_dialect = axiom_element_get_attribute_value(filter_elem,
- env, qname);
- axutil_qname_free(qname, env);
- if(filter_dialect)
- {
- savan_subscriber_set_filter_dialect(subscriber, env,
- filter_dialect);
- }
-
- if(filter)
- {
- savan_subscriber_set_filter(subscriber, env, filter);
- }
- }
-
- topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
- if(topic_epr)
- {
- topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr,
- env);
- }
-
- if(topic)
- {
- savan_subscriber_set_topic(subscriber, env, topic);
- }
+ savan_subscriber_set_topic(subscriber, env, topic);
}
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,
"[savan] Exit:savan_sub_processor_create_subscriber_from_msg");
+ axutil_error_set_status_code(env->error, AXIS2_SUCCESS);
return subscriber;
}
Modified: webservices/savan/trunk/c/src/subs_mgr/services.xml
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/services.xml?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/services.xml (original)
+++ webservices/savan/trunk/c/src/subs_mgr/services.xml Thu Oct 30 19:46:32 2008
@@ -23,11 +23,6 @@
</operation>
<operation name="get_topic_list">
<parameter name="wsamapping"
>http://ws.apache.org/axis2/c/subscription/get_topic_list</parameter>
- <parameter name="ganglia_heartbeat"
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_heartbeat</parameter>
- <parameter name="ganglia_discovery"
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_discovery</parameter>
- <parameter name="ganglia_power"
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_power</parameter>
- <parameter name="ganglia_load"
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_load</parameter>
- <parameter name="syslog"
locked="xsd:false">http://localhost:9090/axis2/services/syslog</parameter>
<parameter name="publisher"
locked="xsd:false">http://localhost:9090/axis2/services/publisher</parameter>
</operation>
Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Thu Oct 30 19:46:32 2008
@@ -66,15 +66,16 @@
axis2_char_t *expires = NULL;
axis2_char_t *filter = NULL;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "[savan] Start:savan_subs_mgr_add_subscriber");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan]
Start:savan_subs_mgr_add_subscriber");
+
conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
conf = axis2_conf_ctx_get_conf(conf_ctx, env);
subscriber = savan_subscriber_create(env);
if(add_sub_node)
- add_sub_elem = (axiom_element_t*)axiom_node_get_data_element(
- add_sub_node, env);
-
+ {
+ add_sub_elem =
(axiom_element_t*)axiom_node_get_data_element(add_sub_node, env);
+ }
+
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] node:%s", axiom_node_to_string(add_sub_node, env));
/*Get topic element from node */
@@ -443,8 +444,7 @@
axis2_char_t sql_retrieve[256];
int i = 0, size = 0;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "Start:savan_subs_mgr_get_subscriber_list");
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_subs_mgr_get_subscriber_list");
/* Expected request format is :-
* <ns1:get_subscriber_list xmlns:ns1="http://ws.apache.org/savan">
* <Topic>topic_url</Topic>
@@ -460,10 +460,8 @@
conf = axis2_conf_ctx_get_conf(conf_ctx, env);
if (!node) /* 'get_subscriber_list' node */
{
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
- AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "[savan]axiom node is null, unable to continue");
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Axiom node is null,
unable to continue");
return NULL;
}
@@ -473,7 +471,7 @@
AXIS2_ERROR_SET(env->error,
AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "[savan]topic parent node is null, unable to
continue");
+ "[savan] topic parent node is null, unable to
continue");
return NULL;
}
@@ -482,7 +480,7 @@
{
AXIS2_ERROR_SET(env->error,
AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan]invalid XML in
request");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Invalid XML in
request");
return NULL;
}
@@ -494,7 +492,7 @@
{
topic_url = (axis2_char_t *)axiom_text_get_value(topic_text, env);
topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan]Requested
Topic:%s", topic);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Requested
Topic:%s", topic);
}
}
else
@@ -526,103 +524,24 @@
{
for(i = 0; i < size; i++)
{
- savan_subscriber_t * subscriber =
axutil_array_list_get(subs_store,
- env, i);
+ axiom_node_t *sub_node = NULL;
+ savan_subscriber_t * subscriber =
axutil_array_list_get(subs_store, env, i);
if (subscriber)
{
- axiom_node_t *topic_node = NULL;
- axiom_node_t *sub_node = NULL;
- axiom_node_t *endto_node = NULL;
- axiom_node_t *id_node = NULL;
- axiom_node_t *delivery_node = NULL;
- axiom_node_t *notify_node = NULL;
- axiom_node_t *filter_node = NULL;
- axiom_node_t *expires_node = NULL;
- axiom_element_t* sub_elem = NULL;
- axiom_element_t* id_elem = NULL;
- axiom_element_t* topic_elem = NULL;
- axiom_element_t* endto_elem = NULL;
- axiom_element_t* delivery_elem = NULL;
- axiom_element_t* notify_elem = NULL;
- axiom_element_t* filter_elem = NULL;
- axiom_element_t* expires_elem = NULL;
- const axis2_char_t *endto = NULL;
- const axis2_char_t *notify = NULL;
- const axis2_char_t *filter = NULL;
- const axis2_char_t *expires = NULL;
- axis2_char_t *id = NULL;
- axis2_char_t *topic_url_l = NULL;
- axis2_char_t *topic_l = NULL;
- axis2_endpoint_ref_t *endto_ref = NULL;
- axis2_endpoint_ref_t *notify_ref = NULL;
-
- /* Check whether the subscriber has subscribed for the
topic.
- * If so create the topic element */
- topic_elem = axiom_element_create(env, subs_list_node,
- ELEM_NAME_TOPIC, ns1, &topic_node);
- topic_url_l = savan_subscriber_get_topic(subscriber, env);
- if(topic_url_l)
+ sub_node = savan_util_create_subscriber_node(env,
subscriber, subs_list_node);
+ if(!sub_node)
{
- topic_l =
savan_util_get_topic_name_from_topic_url(env,
- topic_url_l);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Creating subscriber node failed");
+ return NULL;
}
-
- if(0 == axutil_strcmp(topic, topic_l))
- {
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "[savan]Subscribers not empty for topic :%s",
topic_url);
- axiom_element_set_text(topic_elem, env, topic_url_l,
topic_node);
- }
- else
- continue;
- endto_ref = savan_subscriber_get_end_to(subscriber, env);
- endto = axis2_endpoint_ref_get_address(endto_ref, env);
- notify_ref = savan_subscriber_get_notify_to(subscriber,
env);
- notify = axis2_endpoint_ref_get_address(notify_ref, env);
- filter = savan_subscriber_get_filter(subscriber, env);
- expires = savan_subscriber_get_expires(subscriber, env);
- id = savan_subscriber_get_id(subscriber, env);
-
-
- /* create the subscriber element */
-
- sub_elem = axiom_element_create(env, subs_list_node,
- ELEM_NAME_SUBSCRIBE, ns, &sub_node);
-
- /* Id element */
- id_elem = axiom_element_create(env, sub_node,
ELEM_NAME_ID, ns1,
- &id_node);
- axiom_element_set_text(id_elem, env, id, id_node);
-
- /* EndTo element */
- endto_elem = axiom_element_create(env, sub_node,
ELEM_NAME_ENDTO, ns,
- &endto_node);
- axiom_element_set_text(endto_elem, env, endto, endto_node);
-
- /* Delivery element */
- delivery_elem = axiom_element_create(env, sub_node,
- ELEM_NAME_DELIVERY, ns, &delivery_node);
-
- notify_elem = axiom_element_create(env, delivery_node,
- ELEM_NAME_NOTIFYTO, ns, ¬ify_node);
- axiom_element_set_text(notify_elem, env, notify,
notify_node);
-
- /* Expires element */
- expires_elem = axiom_element_create(env, sub_node,
- ELEM_NAME_EXPIRES, ns, &expires_node);
- axiom_element_set_text(expires_elem, env, expires,
expires_node);
- /* Filter element */
- filter_elem = axiom_element_create(env, sub_node,
ELEM_NAME_FILTER,
- ns, &endto_node);
- axiom_element_set_text(filter_elem, env, filter,
filter_node);
}
}
}
}
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "End:savan_subs_mgr_get_subscriber_list");
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_subs_mgr_get_subscriber_list");
return subs_list_node;
}
Modified: webservices/savan/trunk/c/src/util/savan_util.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/savan_util.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Thu Oct 30 19:46:32 2008
@@ -24,6 +24,8 @@
#include <axiom_soap.h>
#include <axiom_soap_const.h>
#include <axiom_soap_envelope.h>
+#include <axiom_element.h>
+#include <axiom_node.h>
#include <savan_util.h>
#include <savan_msg_recv.h>
@@ -1431,3 +1433,219 @@
return value;
}
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_util_process_subscriber_node(
+ const axutil_env_t *env,
+ axiom_node_t *sub_node,
+ axiom_element_t *sub_elem,
+ savan_subscriber_t *subscriber,
+ axis2_conf_t *conf)
+{
+ axutil_qname_t *qname = NULL;
+ axiom_node_t *endto_node = NULL;
+ axiom_node_t *delivery_node = NULL;
+ axiom_node_t *notify_node = NULL;
+ axiom_node_t *filter_node = NULL;
+ axiom_node_t *expires_node = NULL;
+
+ axiom_element_t *endto_elem = NULL;
+ axiom_element_t *delivery_elem = NULL;
+ axiom_element_t *notify_elem = NULL;
+ axiom_element_t *expires_elem = NULL;
+ axiom_element_t *filter_elem = NULL;
+
+ axis2_char_t *endto = NULL;
+ axis2_char_t *notify = NULL;
+ axis2_char_t *expires = NULL;
+ axis2_char_t *filter = NULL;
+ axis2_char_t *filter_dialect = NULL;
+
+ axis2_endpoint_ref_t *endto_epr = NULL;
+ axis2_endpoint_ref_t *topic_epr = NULL;
+ axis2_endpoint_ref_t *notify_epr = NULL;
+
+ axis2_status_t status = AXIS2_SUCCESS;
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_util_process_subscriber_node");
+
+ if(sub_elem)
+ {
+ /* EndTo */
+ qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE,
NULL);
+ endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
qname, sub_node,
+ &endto_node);
+ axutil_qname_free(qname, env);
+
+ if(endto_elem)
+ {
+ endto = axiom_element_get_text(endto_elem, env, endto_node);
+ if(endto)
+ {
+ endto_epr = axis2_endpoint_ref_create(env, endto);
+ savan_subscriber_set_end_to(subscriber, env, endto_epr);
+ }
+ }
+
+ /* Get Delivery element and read NotifyTo */
+ qname = axutil_qname_create(env, ELEM_NAME_DELIVERY,
EVENTING_NAMESPACE, NULL);
+ delivery_elem = axiom_element_get_first_child_with_qname(sub_elem,
env, qname, sub_node,
+ &delivery_node);
+
+ axutil_qname_free(qname, env);
+ if(delivery_elem)
+ {
+ qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO,
EVENTING_NAMESPACE, NULL);
+ notify_elem =
axiom_element_get_first_child_with_qname(delivery_elem, env, qname,
+
delivery_node, ¬ify_node);
+ axutil_qname_free(qname, env);
+ if(notify_elem)
+ {
+ notify = axiom_element_get_text(notify_elem, env, notify_node);
+ if(notify)
+ {
+ notify_epr = axis2_endpoint_ref_create(env, notify);
+ savan_subscriber_set_notify_to(subscriber, env,
notify_epr);
+ }
+ }
+ }
+
+ /* Expires */
+ qname = axutil_qname_create(env, ELEM_NAME_EXPIRES,
EVENTING_NAMESPACE, NULL);
+ expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
qname,
+ sub_node,
&expires_node);
+ axutil_qname_free(qname, env);
+ if(expires_elem)
+ {
+ expires = axiom_element_get_text(expires_elem, env, expires_node);
+ if(expires)
+ {
+ savan_subscriber_set_expires(subscriber, env, expires);
+ }
+ }
+
+ /* Filter */
+ qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE,
NULL);
+ filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env,
+ qname,
+ sub_node,
+ &filter_node);
+ axutil_qname_free(qname, env);
+ if(filter_elem)
+ {
+ qname = axutil_qname_create(env, SAVAN_FILTER_DIALECT, NULL, NULL);
+ filter = axiom_element_get_text(filter_elem, env, filter_node);
+ filter_dialect = axiom_element_get_attribute_value(filter_elem,
+ env, qname);
+ axutil_qname_free(qname, env);
+ if(filter_dialect)
+ {
+ savan_subscriber_set_filter_dialect(subscriber, env,
+ filter_dialect);
+ }
+
+ if(filter)
+ {
+ savan_subscriber_set_filter(subscriber, env, filter);
+ }
+ }
+
+ if(endto)
+ {
+ topic_epr = axis2_endpoint_ref_create(env, endto);
+ }
+
+ if(topic_epr)
+ {
+ axis2_char_t *topic = NULL;
+ topic = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr,
env);
+ printf("topic:%s\n", topic);
+ if(topic)
+ {
+ savan_subscriber_set_topic(subscriber, env, topic);
+ }
+ }
+ }
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_util_process_subscriber_node");
+ return status;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+savan_util_create_subscriber_node(
+ const axutil_env_t *env,
+ savan_subscriber_t *subscriber,
+ axiom_node_t *parent_node)
+{
+ axiom_attribute_t *dialect = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_node_t *sub_node = NULL;
+ axiom_node_t *endto_node = NULL;
+ axiom_node_t *delivery_node = NULL;
+ axiom_node_t *notify_node = NULL;
+ axiom_node_t *filter_node = NULL;
+ axiom_node_t *expires_node = NULL;
+ axiom_element_t* sub_elem = NULL;
+ axiom_element_t* endto_elem = NULL;
+ axiom_element_t* delivery_elem = NULL;
+ axiom_element_t* notify_elem = NULL;
+ axiom_element_t* filter_elem = NULL;
+ axiom_element_t* expires_elem = NULL;
+ axis2_char_t *endto = NULL;
+ axis2_char_t *notify = NULL;
+ axis2_char_t *filter = NULL;
+ axis2_char_t *filter_dialect = NULL;
+ axis2_char_t *expires = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_util_create_subscriber_node");
+ if(!subscriber)
+ {
+ axutil_error_set_status_code(env->error, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber structure
passed is NULL");
+ return NULL;
+ }
+
+ endpoint_ref = savan_subscriber_get_end_to(subscriber, env);
+ endto = (axis2_char_t *) axis2_endpoint_ref_get_address(endpoint_ref, env);
+ endpoint_ref = savan_subscriber_get_notify_to(subscriber, env);
+ notify = (axis2_char_t *) axis2_endpoint_ref_get_address(endpoint_ref,
env);
+ filter = savan_subscriber_get_filter(subscriber, env);
+ filter_dialect = savan_subscriber_get_filter_dialect(subscriber, env);
+ expires = savan_subscriber_get_expires(subscriber, env);
+
+ /* create the body of the Subscribe request */
+ ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
+ sub_elem = axiom_element_create(env, parent_node, ELEM_NAME_SUBSCRIBE, ns,
&sub_node);
+
+ /* EndTo element */
+ endto_elem = axiom_element_create(env, sub_node, ELEM_NAME_ENDTO, ns,
&endto_node);
+ axiom_element_set_text(endto_elem, env, endto, endto_node);
+
+ /* Delivery element */
+ delivery_elem = axiom_element_create(env, sub_node, ELEM_NAME_DELIVERY,
ns, &delivery_node);
+
+ notify_elem = axiom_element_create(env, delivery_node, ELEM_NAME_NOTIFYTO,
ns, ¬ify_node);
+ axiom_element_set_text(notify_elem, env, notify, notify_node);
+
+ /* Expires element */
+ expires_elem = axiom_element_create(env, sub_node, ELEM_NAME_EXPIRES, ns,
&expires_node);
+ axiom_element_set_text(expires_elem, env, expires, expires_node);
+ /* Filter element */
+ filter_elem = axiom_element_create(env, sub_node, ELEM_NAME_FILTER, ns,
&filter_node);
+ axiom_element_set_text(filter_elem, env, filter, filter_node);
+
+ if(!filter_dialect)
+ {
+ dialect = axiom_attribute_create(env, "Dialect",
DEFAULT_FILTER_DIALECT, NULL);
+ }
+ else
+ {
+ dialect = axiom_attribute_create(env, "Dialect",
filter_dialect, NULL);
+ }
+
+ axiom_element_add_attribute(filter_elem, env, dialect ,filter_node);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_util_create_subscriber_node");
+ return sub_node;
+}
+