You are viewing a plain text version of this content. The canonical link for it is here.
Posted to savan-dev@ws.apache.org by da...@apache.org on 2007/09/07 08:04:56 UTC
svn commit: r573470 - in /webservices/savan/trunk/c:
include/savan_constants.h include/savan_util.h src/subs_mgr/services.xml
src/subs_mgr/subs_mgr.c src/util/savan_util.c
Author: damitha
Date: Thu Sep 6 23:04:55 2007
New Revision: 573470
URL: http://svn.apache.org/viewvc?rev=573470&view=rev
Log:
Improving Performance
Modified:
webservices/savan/trunk/c/include/savan_constants.h
webservices/savan/trunk/c/include/savan_util.h
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_constants.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_constants.h?rev=573470&r1=573469&r2=573470&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Thu Sep 6 23:04:55 2007
@@ -69,7 +69,10 @@
#define SAVAN_NAMESPACE "tcp://ws.apache.org/axis2/services/subscription"
#define SAVAN_NS_PREFIX "savan"
#define ELEM_NAME_SUBSCRIBERS "Subscribers"
+#define ELEM_NAME_SUBSCRIBER "Subscriber"
#define ELEM_NAME_GET_SUBSCRIBER_LIST "get_subscriber_list"
+#define ELEM_NAME_GET_SUBSCRIBER "get_subscriber"
+#define ELEM_NAME_SUBSCRIBER_ID "SubscriberId"
#define ELEM_NAME_ADD_SUBSCRIBER "AddSubscriber"
#define ELEM_NAME_REMOVE_SUBSCRIBER "RemoveSubscriber"
#define ELEM_NAME_TOPIC "Topic"
Modified: webservices/savan/trunk/c/include/savan_util.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?rev=573470&r1=573469&r2=573470&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Thu Sep 6 23:04:55 2007
@@ -212,6 +212,13 @@
axis2_char_t *subs_mgr_url,
void *s_client);
+ savan_subscriber_t *AXIS2_CALL
+ savan_util_get_subscriber_from_remote_subs_mgr(
+ const axutil_env_t *env,
+ axis2_char_t *subs_id,
+ axis2_char_t *subs_mgr_url,
+ void *s_client);
+
void *AXIS2_CALL
savan_util_get_svc_client(
const axutil_env_t *env);
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=573470&r1=573469&r2=573470&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/services.xml (original)
+++ webservices/savan/trunk/c/src/subs_mgr/services.xml Thu Sep 6 23:04:55 2007
@@ -2,6 +2,7 @@
<description>
This is a subscription manager service
</description>
+ <module ref="savan"/>
<parameter name="ServiceClass" locked="xsd:false">subscription</parameter>
<parameter name="loadServiceAtStartup" locked="xsd:false">true</parameter>
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=573470&r1=573469&r2=573470&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Thu Sep 6 23:04:55 2007
@@ -264,6 +264,181 @@
}
AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+savan_subs_mgr_get_subscriber(
+ const axutil_env_t *env,
+ axiom_node_t *node,
+ axis2_msg_ctx_t *msg_ctx)
+{
+
+ axis2_svc_t *subs_svc = NULL;
+ axutil_param_t *param = NULL;
+ axis2_char_t *topic_url = NULL;
+ axutil_hash_t *subs_store = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axiom_node_t *subs_id_parent_node = NULL;
+ axiom_node_t *subs_id_node = NULL;
+ savan_subscriber_t *subscriber = NULL;
+ axis2_char_t *subs_id = NULL;
+ axiom_node_t *subs_node = NULL;
+ axiom_element_t *subs_elem = NULL;
+
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "Start:savan_subs_mgr_get_subscriber");
+ subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ if (!param)
+ {
+ savan_util_set_store(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] Savan Subscriber List is empty");
+ }
+
+ subs_store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ if(!subs_store)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[ML] Failed to extract the subscriber store");
+ return NULL;
+ }
+
+ /* Expected request format is :-
+ * <ns1:get_subscriber xmlns:ns1="http://ws.apache.org/savan">
+ * <SubscriberId>subscriber id</SubscriberId>
+ * </ns1:get_subscriber>
+ */
+ if (!node) /* 'get_subscriber' node */
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
+ AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Echo client ERROR: input parameter NULL");
+ return NULL;
+ }
+
+ subs_id_parent_node = axiom_node_get_first_element(node, env);
+ if (!subs_id_parent_node)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Echo client ERROR 1: invalid XML in request");
+ return NULL;
+ }
+
+ subs_id_node = axiom_node_get_first_child(subs_id_parent_node, env);
+ if (!subs_id_node) /* actual subs_id text */
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "invalid XML in request");
+ return NULL;
+ }
+
+ if (axiom_node_get_node_type(subs_id_node, env) == AXIOM_TEXT)
+ {
+ axiom_text_t *subs_id_text =
+ (axiom_text_t *)axiom_node_get_data_element(subs_id_node, env);
+ if (subs_id_text && axiom_text_get_value(subs_id_text , env))
+ {
+ subs_id = (axis2_char_t *)axiom_text_get_value(subs_id_text, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "Requested Subscriber's id:%s", subs_id);
+ }
+ }
+ else
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid XML in request");
+ return NULL;
+ }
+
+ /* create the body of the subscribers element */
+ ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
+ ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+ subs_elem = axiom_element_create(env, NULL, ELEM_NAME_SUBSCRIBER, ns1,
+ &subs_node);
+ subscriber = axutil_hash_get(subs_store, subs_id, AXIS2_HASH_KEY_STRING);
+ 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;
+
+ topic_elem = axiom_element_create(env, subs_node,
+ ELEM_NAME_TOPIC, ns1, &topic_node);
+ topic_url = savan_subscriber_get_topic(subscriber, env);
+ if(topic_url)
+ {
+ axiom_element_set_text(topic_elem, env, topic_url, topic_node);
+ }
+ axis2_endpoint_ref_t *endto_ref = savan_subscriber_get_end_to(subscriber, env);
+ endto = axis2_endpoint_ref_get_address(endto_ref, env);
+ axis2_endpoint_ref_t *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_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");
+ return subs_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
savan_subs_mgr_get_subscriber_list(
const axutil_env_t *env,
axiom_node_t *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=573470&r1=573469&r2=573470&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Thu Sep 6 23:04:55 2007
@@ -61,6 +61,11 @@
savan_subscriber_t *subscriber);
static axiom_node_t *
+build_subscriber_request_om_payload(
+ const axutil_env_t *env,
+ axis2_char_t *subs_id);
+
+static axiom_node_t *
build_subscribers_request_om_payload(
const axutil_env_t *env,
axis2_char_t *topic);
@@ -69,6 +74,11 @@
build_topics_request_om_payload(
const axutil_env_t *env);
+static savan_subscriber_t *
+process_subscriber_node(
+ const axutil_env_t *env,
+ axiom_node_t *sub_node);
+
static axutil_hash_t *
process_subscriber_list_node(
const axutil_env_t *env,
@@ -319,8 +329,10 @@
axis2_msg_ctx_t *msg_ctx,
axis2_char_t *sub_id)
{
- axutil_hash_t *store = NULL;
+ axutil_hash_t *subs_store = NULL;
savan_subscriber_t *subscriber = NULL;
+ axutil_param_t *param = NULL;
+ axis2_svc_t *pubs_svc = NULL;
AXIS2_ENV_CHECK(env, NULL);
@@ -332,15 +344,88 @@
{
sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
}
-
- store = savan_util_get_subscriber_store(env, msg_ctx);
- if (!store)
+ pubs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+ if (!pubs_svc)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "[SAVAN] Subscriber store is null");
+ "[SAVAN] Failed to extract the service");
return NULL;
}
- subscriber = axutil_hash_get(store, sub_id, AXIS2_HASH_KEY_STRING);
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrName");
+ if(param)
+ {
+ axis2_svc_t *subs_svc = NULL;
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+ axutil_param_t *subs_store_param = NULL;
+ axis2_char_t *subs_svc_name = NULL;
+
+ subs_svc_name = axutil_param_get_value(param, env);
+ conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+ conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+ if(conf)
+ subs_svc = axis2_conf_get_svc(conf, env, subs_svc_name);
+ if(subs_svc)
+ {
+ subs_store_param = axis2_svc_get_param(subs_svc, env,
+ SAVAN_SUBSCRIBER_LIST);
+ if(!subs_store_param)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] No Topic found");
+ return NULL;
+ }
+ subs_store = axutil_param_get_value(subs_store_param, env);
+ subscriber = axutil_hash_get(subs_store, sub_id,
+ AXIS2_HASH_KEY_STRING);
+ }
+ else
+ {
+ axis2_char_t *subs_mgr_url = NULL;
+
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrURL");
+ if(param)
+ {
+ axis2_svc_client_t* svc_client = NULL;
+ axutil_param_t *svc_client_param = NULL;
+ axis2_endpoint_ref_t *topic_epr = NULL;
+ axis2_char_t *topic_url = NULL;
+
+ subs_mgr_url = axutil_param_get_value(param, env);
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ topic_url = (axis2_char_t *) axis2_endpoint_ref_get_address(
+ topic_epr, env);
+ svc_client_param = axis2_svc_get_param(pubs_svc, env, "svc_client");
+ if(svc_client_param)
+ svc_client = axutil_param_get_value(svc_client_param, env);
+ if(!svc_client)
+ {
+ svc_client =
+ (axis2_svc_client_t *) savan_util_get_svc_client(env);
+ svc_client_param = axutil_param_create(env, "svc_client",
+ svc_client);
+ axis2_svc_add_param(pubs_svc, env, svc_client_param);
+ }
+ subscriber = savan_util_get_subscriber_from_remote_subs_mgr(env,
+ sub_id, subs_mgr_url, svc_client);
+ }
+ }
+ }
+ else
+ {
+ param = axis2_svc_get_param(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ if (param)
+ {
+ subs_store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ }
+ if (!subs_store)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[SAVAN] Subscriber store is null");
+ return NULL;
+ }
+ subscriber = axutil_hash_get(subs_store, sub_id, AXIS2_HASH_KEY_STRING);
+ }
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[SAVAN] End:savan_util_get_subscriber_from_msg");
@@ -727,6 +812,186 @@
return AXIS2_SUCCESS;
}
+savan_subscriber_t *AXIS2_CALL
+savan_util_get_subscriber_from_remote_subs_mgr(
+ const axutil_env_t *env,
+ axis2_char_t *subs_id,
+ axis2_char_t *subs_mgr_url,
+ void *s_client)
+{
+ axis2_endpoint_ref_t* endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ axis2_svc_client_t* svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+ savan_subscriber_t *subscriber = NULL;
+
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] Start:savan_util_get_subscriber_from_remote_subs_mgr");
+ svc_client = (axis2_svc_client_t *) s_client;
+ options = (axis2_options_t *)axis2_svc_client_get_options(svc_client,
+ env);
+ endpoint_ref = axis2_endpoint_ref_create(env, subs_mgr_url);
+ axis2_options_set_to(options, env, endpoint_ref);
+
+ payload = build_subscriber_request_om_payload(env, subs_id);
+ ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+ if (ret_node)
+ {
+ subscriber = process_subscriber_node(env, ret_node);
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[SAVAN] Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ }
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] End:savan_util_get_subscriber_from_remote_subs_mgr");
+ return subscriber;
+}
+
+static axiom_node_t *
+build_subscriber_request_om_payload(
+ const axutil_env_t *env,
+ axis2_char_t *subs_id)
+{
+ axiom_node_t *om_node = NULL;
+ axiom_element_t* om_ele = NULL;
+ axiom_node_t* subs_id_om_node = NULL;
+ axiom_element_t * subs_id_om_ele = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+ om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_SUBSCRIBER, ns1, &om_node);
+ subs_id_om_ele = axiom_element_create(env, om_node, ELEM_NAME_SUBSCRIBER_ID, ns1,
+ &subs_id_om_node);
+ axiom_element_set_text(subs_id_om_ele, env, subs_id, subs_id_om_node);
+
+ om_str = axiom_node_to_string(om_node, env);
+ if (om_str)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Sending OM : %s", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ om_str = NULL;
+ }
+ return om_node;
+}
+
+static savan_subscriber_t *
+process_subscriber_node(
+ const axutil_env_t *env,
+ axiom_node_t *sub_node)
+{
+ axiom_element_t *sub_elem = NULL;
+ axutil_qname_t *qname = NULL;
+ axis2_char_t *topic_url = NULL;
+ savan_subscriber_t *subscriber = NULL;
+
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] Start:process_subscriber_node");
+ sub_elem = axiom_node_get_data_element(sub_node, env);
+
+ if(sub_node)
+ {
+ axiom_node_t *id_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 *id_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 *id = NULL;
+ axis2_char_t *endto = NULL;
+ axis2_char_t *notify = NULL;
+ axis2_char_t *expires = NULL;
+ axis2_char_t *filter = NULL;
+
+ axis2_endpoint_ref_t *endto_epr = NULL;
+ axis2_endpoint_ref_t *notify_epr = NULL;
+
+ subscriber = savan_subscriber_create(env);
+ if (!subscriber)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[SAVAN] Failed to create a"
+ "subscriber instance");
+ return NULL;
+ }
+ /* Now read each sub element of Subscribe element */
+
+ /* Topic */
+ savan_subscriber_set_topic(subscriber, env, topic_url);
+
+ /* Id */
+ qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
+ id_elem = axiom_element_get_first_child_with_qname(sub_elem, env, qname,
+ sub_node, &id_node);
+ axutil_qname_free(qname, env);
+ id = axiom_element_get_text(id_elem, env, id_node);
+ savan_subscriber_set_id(subscriber, env, id);
+
+ /* 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);
+
+ endto = axiom_element_get_text(endto_elem, env, endto_node);
+
+ 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);
+
+ 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);
+ notify = axiom_element_get_text(notify_elem, env, notify_node);
+
+ 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);
+
+ expires = axiom_element_get_text(expires_elem, env, expires_node);
+
+ 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);
+
+ filter = axiom_element_get_text(filter_elem, env, filter_node);
+
+ savan_subscriber_set_filter(subscriber, env, filter);
+ }
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[SAVAN] End:process_subscriber_node");
+ return subscriber;
+}
+
axutil_hash_t *AXIS2_CALL
savan_util_get_subscriber_list_from_remote_subs_mgr(
const axutil_env_t *env,
@@ -774,11 +1039,17 @@
{
axiom_node_t *om_node = NULL;
axiom_element_t* om_ele = NULL;
+ axiom_node_t* topic_om_node = NULL;
+ axiom_element_t * topic_om_ele = NULL;
axiom_namespace_t *ns1 = NULL;
axis2_char_t *om_str = NULL;
ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_SUBSCRIBER_LIST, ns1, &om_node);
+ topic_om_ele = axiom_element_create(env, om_node, ELEM_NAME_TOPIC, ns1,
+ &topic_om_node);
+ axiom_element_set_text(topic_om_ele, env, topic, topic_om_node);
+
om_str = axiom_node_to_string(om_node, env);
if (om_str)
{