Adding publisher abstration functionality
diff --git a/include/savan_publisher_mod.h b/include/savan_publisher_mod.h
new file mode 100644
index 0000000..c697a7d
--- /dev/null
+++ b/include/savan_publisher_mod.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SAVAN_PUBLISHER_MOD_H
+#define SAVAN_PUBLISHER_MOD_H
+
+/**
+ * @file savan_publisher_mod.h
+ * @brief
+ */
+#include <platforms/axutil_platform_auto_sense.h>
+#include <axutil_utils_defines.h>
+#include <axutil_env.h>
+#include <axis2_conf.h>
+#include <axis2_msg_ctx.h>
+#include <axiom_node.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * @ingroup savan_publisher_mod
+ * @{
+ */
+
+typedef struct savan_publisher_mod savan_publisher_mod_t;
+typedef struct savan_publisher_mod_ops savan_publisher_mod_ops_t;
+
+ /**
+ * @brief Publisher ops struct
+ * Encapsulator struct for ops of savan_publisher_mod
+ */
+AXIS2_DECLARE_DATA struct savan_publisher_mod_ops
+{
+ void (AXIS2_CALL *
+ free)(
+ savan_publisher_mod_t *publisher,
+ const axutil_env_t *env);
+
+ void (AXIS2_CALL *
+ publish)(
+ savan_publisher_mod_t *publisher,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx);
+
+};
+
+AXIS2_DECLARE_DATA struct savan_publisher_mod
+{
+ const savan_publisher_mod_ops_t *ops;
+};
+
+
+/**
+ * Create the savan publisher.
+ * @param env environment object
+ * @param conf axis2 configuration
+ * @return status of the operation
+ */
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+ const axutil_env_t *env,
+ axis2_conf_t *conf);
+
+/**
+ * Deallocate the publisher.
+ * @param publisher
+ * @param env environment object
+ */
+void AXIS2_CALL
+savan_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *envv);
+
+/**
+ * Apply publisher to payload.
+ * @param publisher
+ * @param env environment object
+ * @param msg_ctx Message context of the incoming event message.
+ */
+AXIS2_EXTERN void AXIS2_CALL
+savan_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx);
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*SAVAN_PUBLISHER_MOD_H*/
diff --git a/src/publisher/Makefile.am b/src/publisher/Makefile.am
new file mode 100644
index 0000000..a9af8b7
--- /dev/null
+++ b/src/publisher/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = common @SAVAN_PUBLISHER@
diff --git a/src/publisher/common/Makefile.am b/src/publisher/common/Makefile.am
new file mode 100644
index 0000000..1ae6a70
--- /dev/null
+++ b/src/publisher/common/Makefile.am
@@ -0,0 +1,9 @@
+noinst_LTLIBRARIES = libsavan_common_publisher_mod.la
+
+libsavan_common_publisher_mod_la_SOURCES = publisher_mod.c
+
+INCLUDES = -I$(top_builddir)/include \
+ @AXIS2INC@ \
+ @AXIOMINC@ \
+ @NEETHIINC@ \
+ @UTILINC@
diff --git a/src/publisher/common/publisher_mod.c b/src/publisher/common/publisher_mod.c
new file mode 100644
index 0000000..cb75489
--- /dev/null
+++ b/src/publisher/common/publisher_mod.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <savan_publisher_mod.h>
+#include <savan_constants.h>
+#include <savan_error.h>
+#include <savan_util.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_property.h>
+#include <axutil_uuid_gen.h>
+#include <axis2_conf_ctx.h>
+#include <axis2_msg_ctx.h>
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env)
+{
+ return publishermod->ops->free(publishermod, env);
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ publishermod->ops->publish(publishermod, env, msg_ctx);
+}
+
diff --git a/src/publisher/default/Makefile.am b/src/publisher/default/Makefile.am
new file mode 100644
index 0000000..6707d99
--- /dev/null
+++ b/src/publisher/default/Makefile.am
@@ -0,0 +1,19 @@
+noinst_LTLIBRARIES = libsavan_publisher_mod.la
+libsavan_publisher_mod_la_SOURCES = publisher_mod.c
+data_DATA=
+libsavan_publisher_mod_la_LIBADD = $(top_builddir)/src/subscribers/libsavan_subscribers.la \
+ $(top_builddir)/src/util/libsavan_util.la \
+ ../../storage/@SAVAN_STORAGE@/libsavan_storage.la \
+ ../../filters/@SAVAN_FILTER_LIB@ \
+ ../common/libsavan_common_publisher_mod.la
+
+INCLUDES = -I$(top_builddir)/include \
+ -I$(top_builddir)/include/savan \
+ -I. \
+ @AXIS2INC@ \
+ @AXIOMINC@ \
+ @NEETHIINC@ \
+ @XPATHINC@ \
+ @UTILINC@
+
+EXTRA_DIST=
diff --git a/src/publisher/default/publisher_mod.c b/src/publisher/default/publisher_mod.c
new file mode 100644
index 0000000..393f33b
--- /dev/null
+++ b/src/publisher/default/publisher_mod.c
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <savan_publisher_mod.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+#include <axutil_file_handler.h>
+#include <platforms/axutil_platform_auto_sense.h>
+#include <axis2_svc_client.h>
+#include <axis2_conf.h>
+#include <axis2_options.h>
+#include <axutil_array_list.h>
+#include <savan_constants.h>
+#include <savan_util.h>
+#include <savan_subscriber.h>
+#include <savan_storage_mgr.h>
+#include <savan_error.h>
+#include <libxslt/xsltutils.h>
+#include <axiom_soap.h>
+#include <axiom_soap_const.h>
+#include <axiom_soap_envelope.h>
+#include <axiom_element.h>
+#include <axiom_node.h>
+
+/**
+ *
+ */
+/**
+ * @brief Savan Default Publisher Struct Impl
+ * Savan Default Publisher
+ */
+typedef struct savan_default_publisher_mod
+{
+ savan_publisher_mod_t publishermod;
+ axis2_conf_t *conf;
+} savan_default_publisher_mod_t;
+
+#define SAVAN_INTF_TO_IMPL(publishermod) ((savan_default_publisher_mod_t *) publishermod)
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_default_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env);
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_default_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx);
+
+static axis2_status_t
+savan_default_publisher_mod_publish_to_subscriber(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_svc_client_t *svc_client,
+ savan_subscriber_t *subscriber,
+ savan_filter_mod_t *filtermod,
+ axiom_node_t *payload);
+
+static const savan_publisher_mod_ops_t savan_publisher_mod_ops =
+{
+ savan_default_publisher_mod_free,
+ savan_default_publisher_mod_publish
+};
+
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+ const axutil_env_t *env,
+ axis2_conf_t *conf)
+{
+ savan_default_publisher_mod_t *publishermodimpl = NULL;
+
+ publishermodimpl = AXIS2_MALLOC(env->allocator, sizeof(savan_default_publisher_mod_t));
+ if (!publishermodimpl)
+ {
+ AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_CREATION_FAILED, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ memset ((void *) publishermodimpl, 0, sizeof(savan_default_publisher_mod_t));
+
+ publishermodimpl->conf = conf;
+ publishermodimpl->publishermod.ops = &savan_publisher_mod_ops;
+
+ return (savan_publisher_mod_t *) publishermodimpl;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_default_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env)
+{
+ savan_default_publisher_mod_t *publishermodimpl = NULL;
+ publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_default_publisher_mod_free");
+
+ publishermodimpl->conf = NULL;
+
+ if(publishermodimpl)
+ {
+ AXIS2_FREE(env->allocator, publishermodimpl);
+ publishermodimpl = NULL;
+ }
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_default_publisher_mod_free");
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_default_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ savan_default_publisher_mod_t *publishermodimpl = NULL;
+ axutil_array_list_t *subs_store = NULL;
+ int i = 0, size = 0;
+ savan_storage_mgr_t *storage_mgr = NULL;
+ savan_filter_mod_t *filtermod = NULL;
+ axis2_char_t *path = NULL;
+ axis2_conf_ctx_t *client_conf_ctx = NULL;
+ axis2_svc_t *client_svc = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_soap_envelope_t *envelope = NULL;
+ axiom_soap_body_t *body = NULL;
+ axiom_node_t *body_node = NULL;
+ axis2_char_t *filter = NULL;
+
+ publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_default_publisher_mod_publish");
+
+ storage_mgr = savan_util_get_storage_mgr(env, NULL, publishermodimpl->conf);
+ axutil_allocator_switch_to_global_pool(env->allocator);
+ if(storage_mgr)
+ {
+ subs_store = savan_storage_mgr_retrieve_all_subscribers(storage_mgr, env, filter);
+ }
+
+ if (!subs_store)
+ {
+ axutil_allocator_switch_to_local_pool(env->allocator);
+ AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "[savan] Subscriber store is NULL");
+ }
+
+ path = AXIS2_GETENV("AXIS2C_HOME");
+ svc_client = axis2_svc_client_create(env, path);
+
+ if(!svc_client)
+ {
+ axutil_allocator_switch_to_local_pool(env->allocator);
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI,
+ "[savan]svc_client creation failed, unable to continue");
+ }
+
+ client_conf_ctx = axis2_svc_client_get_conf_ctx(svc_client, env);
+ client_svc = axis2_svc_client_get_svc(svc_client, env);
+
+ envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
+ if (!envelope)
+ {
+ axutil_allocator_switch_to_local_pool(env->allocator);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap envelop");
+ }
+
+ body = axiom_soap_envelope_get_body(envelope, env);
+ if (!body)
+ {
+ axutil_allocator_switch_to_local_pool(env->allocator);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap body");
+ }
+
+ body_node = axiom_soap_body_get_base_node(body, env);
+
+ payload = axiom_node_get_first_child(body_node, env);
+
+ size = axutil_array_list_size(subs_store, env);
+ for(i = 0; i < size; i++)
+ {
+ axis2_svc_client_t *svc_client = NULL;
+ savan_subscriber_t *sub = NULL;
+
+ sub = (savan_subscriber_t *)axutil_array_list_get(subs_store, env, i);
+ if (sub)
+ {
+ axis2_char_t *id = savan_subscriber_get_id(sub, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Publishing to:%s", id);
+
+ svc_client = axis2_svc_client_create_with_conf_ctx_and_svc(env, path, client_conf_ctx,
+ client_svc);
+ filtermod = savan_util_get_filter_module(env, publishermodimpl->conf);
+ /* Ideally publishing to each subscriber should happen within a thread for each
+ * subscriber. However until Axis2/C provide a good thread pool to handle
+ * such tasks I use this sequential publishing to subscribers.
+ */
+ if(!savan_default_publisher_mod_publish_to_subscriber(publishermod, env, svc_client, sub,
+ filtermod, payload))
+ {
+ axis2_endpoint_ref_t *notifyto = savan_subscriber_get_notify_to(sub, env);
+ const axis2_char_t *address = NULL;
+
+ if(notifyto)
+ {
+ address = axis2_endpoint_ref_get_address(notifyto, env);
+ }
+
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Publishing to the Data Sink:%s proviced by subscriber:%s Failed. Check "\
+ "whether the Data Sink url is correct", address, id);
+ }
+ if(svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ }
+ }
+ }
+
+ if(svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ }
+ axutil_allocator_switch_to_local_pool(env->allocator);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_default_publisher_mod_publish");
+}
+
+static axis2_status_t
+savan_default_publisher_mod_publish_to_subscriber(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_svc_client_t *svc_client,
+ savan_subscriber_t *subscriber,
+ savan_filter_mod_t *filtermod,
+ axiom_node_t *payload)
+{
+ axis2_options_t *options = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+ axis2_endpoint_ref_t *to = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_bool_t filter_apply = AXIS2_TRUE;
+ axis2_endpoint_ref_t *notifyto = NULL;
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_default_publisher_mod_publish_to_subscriber");
+
+ options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, env);
+ if(!options)
+ {
+ options = axis2_options_create(env);
+ axis2_svc_client_set_options(svc_client, env, options);
+ }
+
+ notifyto = savan_subscriber_get_notify_to(subscriber, env);
+ if(notifyto)
+ {
+ address = axis2_endpoint_ref_get_address(notifyto, env);
+ if(address)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Publishing to:%s", address);
+ to = axis2_endpoint_ref_create(env, address);
+ axis2_options_set_to(options, env, to);
+ }
+ }
+ axis2_options_set_xml_parser_reset(options, env, AXIS2_FALSE);
+
+ /* If this is a filtering request and we cannot find any filter module to filter then error */
+ if(savan_subscriber_get_filter(subscriber, env) && !filtermod)
+ {
+ AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_MODULE_COULD_NOT_BE_RETRIEVED, AXIS2_FAILURE);
+ return AXIS2_FAILURE;
+ }
+
+#ifdef SAVAN_FILTERING
+ /* If this is a filtering request and filter module is defined then filter the request.
+ */
+ if(filtermod && savan_subscriber_get_filter(subscriber, env))
+ {
+ /* Apply the filter, and check whether it evaluates to success */
+ filter_apply = savan_filter_mod_apply(filtermod ,env, subscriber, payload);
+ if(!filter_apply)
+ {
+ status = axutil_error_get_status_code(env->error);
+ if(AXIS2_SUCCESS != status)
+ {
+ axiom_node_detach(payload, env);
+ return status;
+ }
+ }
+ }
+#endif
+
+ if(filter_apply)
+ {
+ axis2_svc_client_fire_and_forget(svc_client, env, payload);
+ }
+
+ axiom_node_detach(payload, env); /*insert this to prevent payload corruption in subsequent
+ "publish" calls with some payload.*/
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_default_publisher_mod_publish_to_subscriber");
+
+ return status;
+}
+
+
diff --git a/src/publisher/esb/Makefile.am b/src/publisher/esb/Makefile.am
new file mode 100644
index 0000000..a427892
--- /dev/null
+++ b/src/publisher/esb/Makefile.am
@@ -0,0 +1,17 @@
+noinst_LTLIBRARIES = libsavan_publisher_mod.la
+
+libsavan_publisher_mod_la_SOURCES = publisher_mod.c
+libsavan_publisher_mod_la_LIBADD = ../common/libsavan_common_publisher_mod.la -lxml2
+
+data_DATA=
+
+INCLUDES = -I$(top_builddir)/include \
+ -I$(top_builddir)/include/savan \
+ -I. \
+ @AXIS2INC@ \
+ @AXIOMINC@ \
+ @NEETHIINC@ \
+ @XPATHINC@ \
+ @UTILINC@
+
+EXTRA_DIST=
diff --git a/src/publisher/esb/publisher_mod.c b/src/publisher/esb/publisher_mod.c
new file mode 100644
index 0000000..3eb4b1f
--- /dev/null
+++ b/src/publisher/esb/publisher_mod.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <savan_publisher_mod.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+#include <axutil_file_handler.h>
+#include <platforms/axutil_platform_auto_sense.h>
+#include <savan_constants.h>
+#include <savan_util.h>
+#include <savan_error.h>
+#include <libxslt/xsltutils.h>
+#include <axiom_soap.h>
+#include <axiom_soap_const.h>
+#include <axiom_soap_envelope.h>
+#include <axiom_element.h>
+#include <axiom_node.h>
+
+/**
+ *
+ */
+/**
+ * @brief Savan XPath Publisher Struct Impl
+ * Savan XPath Publisher
+ */
+typedef struct savan_esb_publisher_mod
+{
+ savan_publisher_mod_t publishermod;
+ axis2_conf_t *conf;
+} savan_esb_publisher_mod_t;
+
+#define SAVAN_INTF_TO_IMPL(publishermod) ((savan_esb_publisher_mod_t *) publishermod)
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_esb_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env);
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_esb_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx);
+
+static const savan_publisher_mod_ops_t savan_publisher_mod_ops =
+{
+ savan_esb_publisher_mod_free,
+ savan_esb_publisher_mod_publish
+};
+
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+ const axutil_env_t *env,
+ axis2_conf_t *conf)
+{
+ savan_esb_publisher_mod_t *publishermodimpl = NULL;
+ axis2_char_t *publisher_template_path = NULL;
+
+ publishermodimpl = AXIS2_MALLOC(env->allocator, sizeof(savan_esb_publisher_mod_t));
+ if (!publishermodimpl)
+ {
+ AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_CREATION_FAILED, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ memset ((void *) publishermodimpl, 0, sizeof(savan_esb_publisher_mod_t));
+
+ publisher_template_path = savan_util_get_module_param(env, conf, SAVAN_FILTER_TEMPLATE_PATH);
+ if(!publisher_template_path)
+ {
+ savan_esb_publisher_mod_free((savan_publisher_mod_t *) publishermodimpl, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Publisher template path not set");
+ return NULL;
+ }
+
+ publishermodimpl->publisher_template_path = publisher_template_path;
+
+ publishermodimpl->dialect = NULL;
+ publishermodimpl->conf = conf;
+ publishermodimpl->publishermod.ops = &savan_publisher_mod_ops;
+
+ return (savan_publisher_mod_t *) publishermodimpl;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_esb_publisher_mod_free(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env)
+{
+ savan_esb_publisher_mod_t *publishermodimpl = NULL;
+ publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_esb_publisher_mod_free");
+
+ if(publishermodimpl->dialect)
+ {
+ AXIS2_FREE(env->allocator, publishermodimpl->dialect);
+ publishermodimpl->dialect = NULL;
+ }
+
+ publishermodimpl->conf = NULL;
+
+ if(publishermodimpl)
+ {
+ AXIS2_FREE(env->allocator, publishermodimpl);
+ publishermodimpl = NULL;
+ }
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_esb_publisher_mod_free");
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_esb_publisher_mod_publish(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ savan_esb_publisher_mod_t *publishermodimpl = NULL;
+
+ publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_esb_publisher_mod_publish");
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_esb_publisher_mod_publish");
+ return AXIS2_FALSE;
+}
+