You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by sa...@apache.org on 2006/07/12 11:51:58 UTC

svn commit: r421211 - in /webservices/sandesha/trunk/c: ./ include/sandesha2/ src/ src/msgprocessors/ src/workers/ src/wsrm/

Author: sahan
Date: Wed Jul 12 02:51:57 2006
New Revision: 421211

URL: http://svn.apache.org/viewvc?rev=421211&view=rev
Log:
Added Fault Manager
Changed sequence => seq; manager=>mgr

Added:
    webservices/sandesha/trunk/c/src/fault_manager.c
Modified:
    webservices/sandesha/trunk/c/configure.ac
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_fault_data.h
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_iom_rm_element.h
    webservices/sandesha/trunk/c/src/Makefile.am
    webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c
    webservices/sandesha/trunk/c/src/workers/in_order_invoker.c
    webservices/sandesha/trunk/c/src/wsrm/sequence.c

Modified: webservices/sandesha/trunk/c/configure.ac
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/configure.ac?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/configure.ac (original)
+++ webservices/sandesha/trunk/c/configure.ac Wed Jul 12 02:51:57 2006
@@ -20,7 +20,7 @@
 dnl Checks for libraries.
 AC_CHECK_LIB(dl, dlopen)
 
-CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE -Werror"
+CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
 if test "$GCC" = "yes"; then
     CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration"
 fi

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h Wed Jul 12 02:51:57 2006
@@ -89,6 +89,8 @@
         SANDESHA2_ERROR_SENDING_ACK,
         /* NULL to epr is specified */
         SANDESHA2_ERROR_NULL_TO,
+        /* Required msg part missing */
+        SANDESHA2_ERROR_REQD_MSG_PART_MISSING,
         /* NULL sequnce given for processing */
         SANDESHA2_ERROR_NULL_SEQ,
         /* Storage Map not present */

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_fault_data.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_fault_data.h?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_fault_data.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_fault_data.h Wed Jul 12 02:51:57 2006
@@ -140,37 +140,37 @@
     ((data)->ops->get_detail(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_DETAIL(data, env, detail) \
-    ((data)->ops->set_detail(data, env. detail))
+    ((data)->ops->set_detail(data, env, detail))
     
 #define SANDESHA2_FAULT_DATA_GET_REASON(data, env) \
     ((data)->ops->get_reason(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_REASON(data, env, reason) \
-    ((data)->ops->set_reason(data, env. reason))
+    ((data)->ops->set_reason(data, env, reason))
     
 #define SANDESHA2_FAULT_DATA_GET_SUB_CODE(data, env) \
     ((data)->ops->get_sub_code(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_SUB_CODE(data, env, sub_code) \
-    ((data)->ops->set_sub_code(data, env. sub_code))
+    ((data)->ops->set_sub_code(data, env, sub_code))
     
 #define SANDESHA2_FAULT_DATA_GET_CODE(data, env) \
     ((data)->ops->get_sub_code(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_CODE(data, env, code) \
-    ((data)->ops->set_code(data, env. code))
+    ((data)->ops->set_code(data, env, code))
     
 #define SANDESHA2_FAULT_DATA_GET_TYPE(data, env) \
     ((data)->ops->get_type(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_TYPE(data, env, type) \
-    ((data)->ops->set_type(data, env. type))
+    ((data)->ops->set_type(data, env, type))
 
 #define SANDESHA2_FAULT_DATA_GET_SEQ_ID(data, env) \
     ((data)->ops->get_seq_id(data, env))
     
 #define SANDESHA2_FAULT_DATA_SET_SEQ_ID(data, env, seq_id) \
-    ((data)->ops->set_seq_id(data, env. seq_id)
+    ((data)->ops->set_seq_id(data, env, seq_id)
 /************************** End of function macros ****************************/
 
 /** @} */

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_iom_rm_element.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_iom_rm_element.h?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_iom_rm_element.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_iom_rm_element.h Wed Jul 12 02:51:57 2006
@@ -77,15 +77,24 @@
 
 /************************** Start of function macros **************************/
 #define SANDESHA2_IOM_RM_ELEMENT_FREE(element, env) \
-    ((element)->ops->free (element, env))
+    (((sandesha2_iom_rm_element_t*)(element))->ops->free (\
+    (sandesha2_iom_rm_element_t*)element, env))
+    
 #define SANDESHA2_IOM_RM_ELEMENT_GET_NAMESPACE_VALUE(element, env) \
-    ((element)->ops->get_namespace_value (element, env))
+    (((sandesha2_iom_rm_element_t*)(element))->ops->get_namespace_value (\
+    (sandesha2_iom_rm_element_t*)element, env))
+    
 #define SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(element, env, om_node) \
-    ((element)->ops->from_om_node (element, env, om_node))
+    (((sandesha2_iom_rm_element_t*)(element))->ops->from_om_node (\
+    (sandesha2_iom_rm_element_t*)element, env, om_node))
+    
 #define SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(element, env, om_node) \
-    ((element)->ops->to_om_node(element, env, om_node))
+    (((sandesha2_iom_rm_element_t*)(element))->ops->to_om_node(\
+    (sandesha2_iom_rm_element_t*)element, env, om_node))
+    
 #define SANDESHA2_IOM_RM_ELEMENT_IS_NAMESPACE_SUPPORTED(element, env, ns) \
-    ((element)->ops->is_namespace_supported (element, env, ns))
+    (((sandesha2_iom_rm_element_t*)(element))->ops->is_namespace_supported (\
+    (sandesha2_iom_rm_element_t*)element, env, ns))
 /************************** End of function macros ****************************/    
  /** @} */
 #ifdef __cplusplus

Modified: webservices/sandesha/trunk/c/src/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/Makefile.am?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/Makefile.am Wed Jul 12 02:51:57 2006
@@ -1,7 +1,9 @@
-SUBDIRS = wsrm storage util client transport workers
+#SUBDIRS = wsrm storage util transport workers
+SUBDIRS = 
 noinst_LTLIBRARIES = libsandesha2.la
 
-libsandesha2_la_SOURCES = msg_ctx.c
+libsandesha2_la_SOURCES = msg_ctx.c\
+                          fault_manager.c
 
 INCLUDES = -I$(top_builddir)/include \
             @AXIS2INC@

Added: webservices/sandesha/trunk/c/src/fault_manager.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/fault_manager.c?rev=421211&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/fault_manager.c (added)
+++ webservices/sandesha/trunk/c/src/fault_manager.c Wed Jul 12 02:51:57 2006
@@ -0,0 +1,610 @@
+/*
+ * 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 <sandesha2_fault_mgr.h>
+#include <sandesha2/sandesha2_constants.h>
+#include <axis2_hash.h>
+#include <axiom_soap_const.h>
+#include <sandesha2/sandesha2_iom_rm_part.h>
+#include <sandesha2/sandesha2_create_seq.h>
+#include <sandesha2/sandesha2_seq_ack.h>
+#include <sandesha2/sandesha2_seq.h>
+#include <sandesha2/sandesha2_identifier.h>
+#include <sandesha2/sandesha2_msg_number.h>
+#include <sandesha2/sandesha2_utils.h>
+#include <stdio.h>
+
+
+/** 
+ * @brief Fault Manager struct impl
+ *	Sandesha2 Message Context
+ */
+typedef struct sandesha2_fault_mgr_impl sandesha2_fault_mgr_impl_t;  
+  
+struct sandesha2_fault_mgr_impl
+{
+    sandesha2_fault_mgr_t manager;
+};
+
+#define SANDESHA2_INTF_TO_IMPL(manager) \
+                        ((sandesha2_fault_mgr_impl_t *)(manager))
+
+/***************************** Function headers *******************************/
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_create_seq_refused 
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            axis2_msg_ctx_t *create_seq_msg,
+            sandesha2_storage_mgr_t *storage_man);
+            
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_last_msg_num_exceeded
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *app_rm_msg,
+            sandesha2_storage_mgr_t *storage_man);
+            
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_msg_num_rollover
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            sandesha2_storage_mgr_t *storage_man);
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_unknown_seq
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            axis2_char_t *seq_id,
+            sandesha2_storage_mgr_t *storage_man);
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_invalid_ack
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *ack_rm_msg,
+            sandesha2_storage_mgr_t *storage_man);
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_seq_closed
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            axis2_char_t *seq_id,
+            sandesha2_storage_mgr_t *storage_man);
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_get_fault
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            sandesha2_fault_data_t *fault_data,
+            axis2_char_t *addr_ns_uri,
+            sandesha2_storage_mgr_t *storage_man);
+
+axis2_status_t AXIS2_CALL 
+sandesha2_fault_mgr_free(sandesha2_fault_mgr_t *manager, 
+                        const axis2_env_t *env);								
+
+/***************************** End of function headers ************************/
+
+AXIS2_EXTERN sandesha2_fault_mgr_t* AXIS2_CALL
+sandesha2_fault_mgr_create(const axis2_env_t *env)
+{
+    sandesha2_fault_mgr_impl_t *fault_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    fault_mgr_impl =  (sandesha2_fault_mgr_impl_t *)AXIS2_MALLOC 
+                        (env->allocator, sizeof(sandesha2_fault_mgr_impl_t));
+	
+    if(NULL == fault_mgr_impl)
+	{
+		AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+    
+    fault_mgr_impl->manager.ops = AXIS2_MALLOC(env->allocator,
+                        sizeof(sandesha2_fault_mgr_ops_t));
+    if(NULL == fault_mgr_impl->manager.ops)
+	{
+		sandesha2_fault_mgr_free((sandesha2_fault_mgr_t*)fault_mgr_impl, 
+                        env);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+    
+    fault_mgr_impl->manager.ops->check_for_create_seq_refused = 
+                        sandesha2_fault_mgr_check_for_create_seq_refused;
+    fault_mgr_impl->manager.ops->check_for_last_msg_num_exceeded = 
+                        sandesha2_fault_mgr_check_for_last_msg_num_exceeded;
+    fault_mgr_impl->manager.ops->check_for_msg_num_rollover = 
+                        sandesha2_fault_mgr_check_for_msg_num_rollover;
+    fault_mgr_impl->manager.ops->check_for_unknown_seq = 
+                        sandesha2_fault_mgr_check_for_unknown_seq;
+    fault_mgr_impl->manager.ops->check_for_invalid_ack = 
+                        sandesha2_fault_mgr_check_for_invalid_ack;
+    fault_mgr_impl->manager.ops->check_for_seq_closed = 
+                        sandesha2_fault_mgr_check_for_seq_closed;
+    fault_mgr_impl->manager.ops->get_fault = 
+                        sandesha2_fault_mgr_get_fault;
+    fault_mgr_impl->manager.ops->free = sandesha2_fault_mgr_free;
+                        
+	return &(fault_mgr_impl->manager);
+}
+
+
+axis2_status_t AXIS2_CALL 
+sandesha2_fault_mgr_free(sandesha2_fault_mgr_t *manager, 
+                        const axis2_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    
+    if(NULL != manager->ops)
+    {
+        AXIS2_FREE(env->allocator, manager->ops);
+        manager->ops = NULL;
+    }
+	AXIS2_FREE(env->allocator, SANDESHA2_INTF_TO_IMPL(manager));
+	return AXIS2_SUCCESS;
+}
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_create_seq_refused 
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            axis2_msg_ctx_t *create_seq_msg,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    sandesha2_msg_ctx_t *rm_msg_ctx = NULL;
+    sandesha2_create_seq_t *create_seq = NULL;
+    axis2_bool_t refuse_seq = AXIS2_FALSE;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, create_seq_msg, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    
+    rm_msg_ctx = sandesha2_msg_initilizer_init_msg(env, create_seq_msg);
+    create_seq = (sandesha2_create_seq_t*)SANDESHA2_MSG_CTX_GET_MSG_PART(
+                        rm_msg_ctx, env, SANDESHA2_MSG_PART_CREATE_SEQ);
+    
+    if(NULL == create_seq)
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_REQD_MSG_PART_MISSING, 
+                        AXIS2_FAILURE);
+        return NULL;
+    }
+    if(AXIS2_TRUE == refuse_seq)
+    {
+        sandesha2_fault_data_t *fault_data = NULL;
+        fault_data = sandesha2_fault_data_create(env);
+        SANDESHA2_FAULT_DATA_SET_TYPE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_TYPE_CREATE_SEQ_REFUSED);
+        if(SANDESHA2_SOAP_VERSION_1_1 == sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(rm_msg_ctx, env)))
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP11_FAULT_CODE_SENDER);
+        else
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP12_FAULT_CODE_SENDER);
+        SANDESHA2_FAULT_DATA_SET_SUB_CODE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_SUBCODE_CREATE_SEQ_REFUSED);
+        SANDESHA2_FAULT_DATA_SET_REASON(fault_data, env, "");
+        return sandesha2_fault_mgr_get_fault(fault_mgr, env, rm_msg_ctx,
+                        fault_data, SANDESHA2_MSG_CTX_GET_ADDR_NS_VAL(rm_msg_ctx,
+                        env), storage_man);
+    }
+    return NULL;
+}
+            
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_last_msg_num_exceeded
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *app_rm_msg,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    sandesha2_seq_t *sequence = NULL;
+    long msg_num = -1;
+    axis2_char_t *seq_id = NULL;
+    sandesha2_seq_property_bean_manager_t *seq_prop_mgr = NULL;
+    sandesha2_seq_property_bean_t *last_msg_bean = NULL;
+    axis2_bool_t exceeded = AXIS2_FALSE;
+    axis2_char_t reason[256];
+        
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, app_rm_msg, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    
+    sequence = (sandesha2_seq_t*)SANDESHA2_MSG_CTX_GET_MSG_PART(
+                        app_rm_msg, env, SANDESHA2_MSG_PART_SEQ);
+    msg_num = SANDESHSA2_MSG_NUMBER_GET_MSG_NUM(SANDESHA2_SEQUENCE_GET_MSG_NUM(
+                        sequence, env), env);
+    seq_id = SANDESHA2_IDENTIFIER_GET_IDENTIFIER(
+                        SANDESHA2_SEQUENCE_GET_IDENTIFIER(sequence, env), env);
+                        
+    seq_prop_mgr = SANDESHA2_STORAGE_MANAGER_GET_SEQ_PROPERTY_BEAN_MANAGER(
+                        storage_man, env);
+    last_msg_bean = SANDESHA2_SEQ_PROPERTY_BEAN_MANAGER_RETRIEVE(seq_prop_mgr,
+                        env, seq_id, SANDESHA2_SEQ_PROP_LAST_OUT_MESSAGE_NO);
+    if(NULL != last_msg_bean)
+    {
+        long last_msg_no = -1;
+        last_msg_no = atol(SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(last_msg_bean,
+                        env));
+        if(msg_num > last_msg_no)
+        {
+            exceeded = AXIS2_TRUE;
+            sprintf(reason, "The message number of the message %ld exceeded the"
+                        " last message number %ld which was mentioned as last"
+                        " message in a previosly received application message",
+                        msg_num, last_msg_no);
+        }
+    }
+    if(AXIS2_TRUE == exceeded)
+    {
+        sandesha2_fault_data_t *fault_data = NULL;
+        fault_data = sandesha2_fault_data_create(env);
+        SANDESHA2_FAULT_DATA_SET_TYPE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_TYPE_LAST_MESSAGE_NO_EXCEEDED);
+        if(SANDESHA2_SOAP_VERSION_1_1 == sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(app_rm_msg, env)))
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP11_FAULT_CODE_SENDER);
+        else
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP12_FAULT_CODE_SENDER);
+        SANDESHA2_FAULT_DATA_SET_SUB_CODE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_SUBCODE_LAST_MESSAGE_NO_EXCEEDED);
+        SANDESHA2_FAULT_DATA_SET_REASON(fault_data, env, reason);
+        return sandesha2_fault_mgr_get_fault(fault_mgr, env, app_rm_msg,
+                        fault_data, SANDESHA2_MSG_CTX_GET_ADDR_NS_VAL(app_rm_msg,
+                        env), storage_man);
+    }
+    return NULL;    
+}
+            
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_msg_num_rollover
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    
+    return NULL;
+}
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_unknown_seq
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            axis2_char_t *seq_id,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    sandesha2_create_seq_bean_manager_t *create_seq_mgr = NULL;
+    int type = -1;
+    axis2_bool_t valid_seq = AXIS2_TRUE;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    AXIS2_PARAM_CHECK(env->error, seq_id, NULL);
+    
+    create_seq_mgr = SANDESHA2_STORAGE_MANAGER_GET_CREATE_SEQ_BEAN_MANAGER(
+                        storage_man, env);
+    type = SANDESHA2_MSG_CTX_GET_MSG_TYPE(rm_msg_ctx, env);
+    if(SANDESHA2_MSG_TYPE_ACK == type || 
+        SANDESHA2_MSG_TYPE_CREATE_SEQ_RESPONSE == type ||
+        SANDESHA2_MSG_TYPE_TERMINATE_SEQ_RESPONSE == type ||
+        SANDESHA2_MSG_TYPE_CLOSE_SEQ_RESPONSE == type)
+    {
+        sandesha2_create_seq_bean_t *find_bean = NULL;
+        axis2_array_list_t *list = NULL;
+        
+        find_bean = sandesha2_create_seq_bean_create(env);
+        SANDESHA2_CREATE_SEQ_BEAN_SET_SEQ_ID(find_bean, env, seq_id);
+        list = SANDESHA2_CREATE_SEQ_BEAN_MANAGER_FIND(create_seq_mgr, env, 
+                        find_bean);
+        if(NULL != list)
+        {
+            if(0 == AXIS2_ARRAY_LIST_SIZE(list, env))
+                valid_seq = AXIS2_FALSE;
+        }
+        else
+            valid_seq = AXIS2_FALSE;        
+    }
+    else
+    {
+        sandesha2_next_msg_bean_manager_t *next_msg_mgr = NULL;
+        axis2_array_list_t *list = NULL;
+        axis2_bool_t contains = AXIS2_FALSE;
+        
+        next_msg_mgr = SANDESHA2_STORAGE_MANAGER_GET_NEXT_MSG_BEAN_MANAGER(
+                        storage_man, env);
+        list = SANDESHA2_NEXT_MSG_BEAN_MANAGER_RETRIEVE_ALL(next_msg_mgr, env);
+        if(NULL != list)
+        {
+            int i = 0;
+            for(i = 0; i < AXIS2_ARRAY_LIST_SIZE(list, env); i++)
+            {
+                sandesha2_next_msg_bean_t *next_bean = NULL;
+                axis2_char_t *tmp_id = NULL;
+                
+                next_bean = AXIS2_ARRAY_LIST_GET(list, env, i);
+                tmp_id = SANDESHA2_NEXT_MSG_BEAN_GET_SEQUENCE_ID(next_bean, env);
+                if(0 == AXIS2_STRCMP(seq_id, tmp_id))
+                {
+                    contains = AXIS2_TRUE;
+                    break;
+                }
+            }
+        }
+        if(AXIS2_TRUE == contains)
+            valid_seq = AXIS2_TRUE;
+        else
+            valid_seq = AXIS2_FALSE;
+    }
+    if(AXIS2_FALSE == valid_seq)
+    {
+        sandesha2_fault_data_t *fault_data = NULL;
+        axis2_char_t *rm_ns_val = NULL;
+        axiom_element_t *detail_ele = NULL;
+        axiom_node_t *detail_node = NULL;
+        axis2_qname_t *qname = NULL;
+        
+        fault_data = sandesha2_fault_data_create(env);
+        rm_ns_val = SANDESHA2_MSG_CTX_GET_RM_NS_VAL(rm_msg_ctx, env);
+        if(SANDESHA2_SOAP_VERSION_1_1 == sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(rm_msg_ctx, env)))
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP11_FAULT_CODE_SENDER);
+        else
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP12_FAULT_CODE_SENDER);
+        SANDESHA2_FAULT_DATA_SET_SUB_CODE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_SUBCODE_UNKNOWN_SEQ);
+        qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_IDENTIFIER,
+                        rm_ns_val, SANDESHA2_WSRM_COMMON_NS_PREFIX_RM);
+        detail_ele = axiom_element_create_with_qname(env, NULL, qname, 
+                        &detail_node);
+        SANDESHA2_FAULT_DATA_SET_DETAIL(fault_data, env, detail_node);
+        SANDESHA2_FAULT_DATA_SET_REASON(fault_data, env, "A sequence with the"
+                        " given sequenceID has NOT been established");
+        return sandesha2_fault_mgr_get_fault(fault_mgr, env, rm_msg_ctx,
+                        fault_data, SANDESHA2_MSG_CTX_GET_ADDR_NS_VAL(rm_msg_ctx,
+                        env), storage_man);
+    }
+    return NULL;
+}
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_invalid_ack
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *ack_rm_msg,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    axis2_bool_t invalid_ack = AXIS2_FALSE;
+    axis2_char_t reason[256];
+    sandesha2_seq_ack_t *seq_ack = NULL;
+    axis2_array_list_t *ack_range_list = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, ack_rm_msg, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    
+    if(SANDESHA2_MSG_TYPE_ACK != SANDESHA2_MSG_CTX_GET_MSG_TYPE(ack_rm_msg, env))
+        return NULL;
+    seq_ack = (sandesha2_seq_ack_t*)SANDESHA2_MSG_CTX_GET_MSG_PART(ack_rm_msg, 
+                        env, SANDESHA2_MSG_PART_SEQ_ACKNOWLEDGEMENT);
+    ack_range_list = SANDESHA2_SEQ_ACK_GET_ACK_RANGE_LIST(seq_ack, env);
+    if(NULL != ack_range_list)
+    {
+        int i = 0;
+        for(i = 0; i < AXIS2_ARRAY_LIST_SIZE(ack_range_list, env); i++)
+        {
+            sandesha2_ack_range_t *ack_range = NULL;
+            long upper = -1;
+            long lower = -1;
+            ack_range = AXIS2_ARRAY_LIST_GET(ack_range_list, env, i);
+            lower = SANDESHA2_ACK_RANGE_GET_LOWER_VALUE(ack_range, env);
+            upper = SANDESHA2_ACK_RANGE_GET_UPPER_VALUE(ack_range, env);
+            if(lower > upper)
+            {
+                invalid_ack = AXIS2_TRUE;
+                sprintf(reason, "The SequenceAcknowledgement is invalid. "
+                        "Lower value is larger than upper value");
+            }            
+        }
+    }
+    if(AXIS2_TRUE == invalid_ack)
+    {
+        sandesha2_fault_data_t *fault_data = NULL;
+        axis2_char_t *rm_ns_val = NULL;
+        axiom_element_t *detail_ele = NULL;
+        axiom_node_t *detail_node = NULL;
+        axiom_element_t *dummy_ele = NULL;
+        axiom_node_t *dummy_node = NULL;
+        axis2_qname_t *qname = NULL;
+                
+        fault_data = sandesha2_fault_data_create(env);
+        rm_ns_val = SANDESHA2_MSG_CTX_GET_RM_NS_VAL(ack_rm_msg, env);
+        if(SANDESHA2_SOAP_VERSION_1_1 == sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(ack_rm_msg, env)))
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP11_FAULT_CODE_SENDER);
+        else
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP12_FAULT_CODE_SENDER);
+        SANDESHA2_FAULT_DATA_SET_SUB_CODE(fault_data, env, 
+                        SANDESHA2_SOAP_FAULT_SUBCODE_INVALID_ACKNOWLEDGEMENT);
+        dummy_ele = axiom_element_create(env, NULL, "dummy_ele", NULL, 
+                        &dummy_node);
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(seq_ack, env, dummy_node);
+        qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_SEQ_ACK, 
+                        NULL, NULL);
+        detail_ele = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(dummy_ele, env,
+                        qname, dummy_node, &detail_node);
+        SANDESHA2_FAULT_DATA_SET_DETAIL(fault_data, env, detail_node);
+        SANDESHA2_FAULT_DATA_SET_REASON(fault_data, env, reason);
+        return sandesha2_fault_mgr_get_fault(fault_mgr, env, ack_rm_msg,
+                        fault_data, SANDESHA2_MSG_CTX_GET_ADDR_NS_VAL(ack_rm_msg,
+                        env), storage_man);
+    }
+    return NULL;
+}
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_check_for_seq_closed
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            axis2_char_t *seq_id,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    sandesha2_seq_property_bean_manager_t *seq_prop_mgr = NULL;
+    sandesha2_seq_property_bean_t *closed_bean = NULL;
+    axis2_bool_t seq_closed = AXIS2_FALSE;
+    axis2_char_t reason[256];
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    AXIS2_PARAM_CHECK(env->error, seq_id, NULL);
+    
+    seq_prop_mgr = SANDESHA2_STORAGE_MANAGER_GET_SEQ_PROPERTY_BEAN_MANAGER(
+                        storage_man, env);
+    closed_bean = SANDESHA2_SEQ_PROPERTY_BEAN_MANAGER_RETRIEVE(seq_prop_mgr, env,
+                        seq_id, SANDESHA2_SEQ_PROP_SEQ_CLOSED);
+    if(NULL != closed_bean && 0 == AXIS2_STRCMP(SANDESHA2_VALUE_TRUE,
+                        SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(closed_bean, env)))
+    {
+        seq_closed = AXIS2_TRUE;
+        sprintf(reason, "The sequence with the id %s was closed previously."
+                        " Cannot accept this message", seq_id);
+    }
+    if(AXIS2_TRUE == seq_closed)
+    {
+        sandesha2_fault_data_t *fault_data = NULL;
+        
+        fault_data = sandesha2_fault_data_create(env);
+        if(SANDESHA2_SOAP_VERSION_1_1 == sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(rm_msg_ctx, env)))
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP11_FAULT_CODE_SENDER);
+        else
+            SANDESHA2_FAULT_DATA_SET_CODE(fault_data, env, 
+                        AXIOM_SOAP12_FAULT_CODE_SENDER);
+        
+        SANDESHA2_FAULT_DATA_SET_REASON(fault_data, env, reason);
+        return sandesha2_fault_mgr_get_fault(fault_mgr, env, rm_msg_ctx,
+                        fault_data, SANDESHA2_MSG_CTX_GET_ADDR_NS_VAL(rm_msg_ctx,
+                        env), storage_man);
+    }
+    return NULL;
+}
+
+sandesha2_msg_ctx_t* AXIS2_CALL 
+sandesha2_fault_mgr_get_fault
+            (sandesha2_fault_mgr_t *fault_mgr,
+            const axis2_env_t *env,
+            sandesha2_msg_ctx_t *rm_msg_ctx,
+            sandesha2_fault_data_t *fault_data,
+            axis2_char_t *addr_ns_uri,
+            sandesha2_storage_mgr_t *storage_man)
+{
+    axis2_msg_ctx_t *fault_msg_ctx = NULL;
+    axis2_msg_ctx_t *ref_msg = NULL;
+    axis2_op_t *op = NULL;
+    axis2_op_ctx_t *op_ctx = NULL;
+    axis2_char_t *acks_to_str = NULL;
+    axis2_char_t *anon_uri = NULL;
+    int soap_ver = -1;
+    sandesha2_msg_ctx_t *fault_rm_msg = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, NULL);
+    AXIS2_PARAM_CHECK(env->error, storage_man, NULL);
+    AXIS2_PARAM_CHECK(env->error, addr_ns_uri, NULL);
+    AXIS2_PARAM_CHECK(env->error, fault_data, NULL);
+    
+    ref_msg = SANDESHA2_MSG_CTX_GET_MSG_CTX(rm_msg_ctx, env);
+    fault_msg_ctx = sandesha2_utils_create_out_msg_ctx(env, ref_msg);
+    
+    /* Setting context hierachy - be caereful about freeing
+     */
+    AXIS2_MSG_CTX_SET_SVC_GRP(fault_msg_ctx, env, AXIS2_MSG_CTX_GET_SVC_GRP(
+                        ref_msg, env));
+    AXIS2_MSG_CTX_SET_SVC(fault_msg_ctx, env, AXIS2_MSG_CTX_GET_SVC(ref_msg, 
+                        env));
+    AXIS2_MSG_CTX_SET_SVC_GRP_CTX(fault_msg_ctx, env, 
+                        AXIS2_MSG_CTX_GET_SVC_GRP_CTX(ref_msg, env));
+    AXIS2_MSG_CTX_SET_SVC_CTX(fault_msg_ctx, env, AXIS2_MSG_CTX_GET_SVC_CTX(
+                        ref_msg, env));
+    AXIS2_MSG_CTX_SET_SVC_GRP_CTX_ID(fault_msg_ctx, env, 
+                        AXIS2_MSG_CTX_GET_SVC_GRP_CTX_ID(ref_msg, env));
+    AXIS2_MSG_CTX_SET_SVC_CTX_ID(fault_msg_ctx, env, 
+                        AXIS2_MSG_CTX_GET_SVC_CTX_ID(ref_msg, env));
+    op = axis2_op_create(env);
+    AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_ONLY);
+    op_ctx = axis2_op_ctx_create(env, op, NULL);
+    AXIS2_MSG_CTX_SET_OP(fault_msg_ctx, env, op);
+    AXIS2_MSG_CTX_SET_OP_CTX(fault_msg_ctx, env, op_ctx);
+    
+    if(SANDESHA2_MSG_TYPE_CREATE_SEQ == SANDESHA2_MSG_CTX_GET_TYPE(rm_msg_ctx, 
+                        env))
+    {
+        sandesha2_create_seq_t *create_seq = NULL;
+        axis2_endpoint_ref_t *epr = NULL;
+        
+        create_seq = (sandesha2_create_seq_t *)SANDESHA2_MSG_CTX_GET_MSG_PART(
+                        rm_msg_ctx, env, SANDESHA2_MSG_PART_CREATE_SEQ);
+        epr =  SANDESHA2_ADDRESS_GET_EPR(SANDESHA2_ACKS_TO_GET_ADDRESS(
+                        SANDESHA2_CREATE_SEQ_GET_ACKS_TO(create_seq, env), 
+                        env), env);
+        acks_to_str = AXIS2_ENDPOINT_REF_GET_ADDRESS(epr, env);
+    }
+    else
+    {
+        sandesha2_seq_property_bean_manager_t *seq_prop_mgr = NULL;
+        sandesha2_seq_property_bean_t *acks_to_bean = NULL;
+        axis2_char_t *seq_id = NULL;
+        
+        seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_BEAN_MGR(
+                        storage_man, env);
+        seq_id = SANDESHA2_FAULT_DATA_GET_SEQ_ID(fault_data, env);
+        acks_to_bean = SANDESHA2_SEQ_PROPERTY_BEAN_MANAGER_RETRIEVE(seq_prop_mgr,
+                        env, seq_id, SANDESHA2_SEQ_PROP_ACKS_TO_EPR);
+        if(NULL != acks_to_bean)
+            acks_to_str = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(acks_to_bean, 
+                        env);
+    }
+    anon_uri = sandesha2_spec_specific_consts_get_addr_anon_uri(env, addr_ns_uri);
+    if(NULL!= acks_to_str && 0 != AXIS2_STRCMP(acks_to_str, anon_uri))
+        AXIS2_MSG_CTX_SET_TO(fault_msg_ctx, env, axis2_endpoint_ref_create(env,
+                        acks_to_str));
+    soap_ver = sandesha2_utils_get_soap_version(env, 
+                        SANDESHA2_MSG_CTX_GET_SOAP_ENVELOPE(rm_msg_ctx, env));
+    sandesha2_soap_env_creator_add_soap_env(env, fault_msg_ctx, soap_ver, 
+                        fault_data, SANDESHA2_MSG_CTX_GET_RM_NS_VAL(rm_msg_ctx,
+                        env));
+    fault_rm_msg = sandesha2_msg_initilizer_init_msg(env, fault_msg_ctx);
+    return fault_rm_msg;
+}

Modified: webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c (original)
+++ webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c Wed Jul 12 02:51:57 2006
@@ -544,7 +544,7 @@
         
         req_msg_ctx = AXIS2_OP_CTX_GET_MSG_CTX(AXIS2_MSG_CTX_GET_OP_CTX(
                         msg_ctx1, env), env, AXIS2_WSDL_MESSAGE_LABEL_IN_VALUE);
-        req_rm_msg_ctx = sandesha2_msg_initilizer_initilize_msg(env, req_msg_ctx);
+        req_rm_msg_ctx = sandesha2_msg_initilizer_init_msg(env, req_msg_ctx);
         req_seq = SANDESHA2_MSG_CTX_GET_MSG_PART(req_rm_msg_ctx, env,
                         SANDESHA2_MSG_PART_SEQ);
         if(NULL == req_seq)
@@ -697,7 +697,7 @@
                         AXIS2_FAILURE);
             return AXIS2_FAILURE;
         }
-        req_rm_msg_ctx = sandesha2_msg_initilizer_initilize_msg(env, req_msg_ctx);
+        req_rm_msg_ctx = sandesha2_msg_initilizer_init_msg(env, req_msg_ctx);
         seq = SANDESHA2_MSG_CTX_GET_MSG_PART(req_rm_msg_ctx, env, 
                         SANDESHA2_MSG_PART_SEQ);
         req_seq_id = SANDESHA2_IDENTIFIER_GET_IDENTIFIER(
@@ -1180,7 +1180,7 @@
     
     if(AXIS2_TRUE == AXIS2_MSG_CTX_IS_SERVER_SIDE(msg, env))
     {
-        req_rm_msg = sandesha2_msg_initilizer_initilize_msg(env, req_msg);
+        req_rm_msg = sandesha2_msg_initilizer_init_msg(env, req_msg);
         req_seq = SANDESHA2_MSG_CTX_GET_MSG_PART(req_rm_msg, env, 
                             SANDESHA2_MSG_PART_SEQ);
         if(NULL == seq)

Modified: webservices/sandesha/trunk/c/src/workers/in_order_invoker.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/workers/in_order_invoker.c?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/workers/in_order_invoker.c (original)
+++ webservices/sandesha/trunk/c/src/workers/in_order_invoker.c Wed Jul 12 02:51:57 2006
@@ -411,7 +411,7 @@
                         env);
                 msg_to_invoke = SANDESHA2_STORAGE_MGR_RETRIEVE_MSG_CTX(
                         storage_mgr, env, key, invoker_impl->conf_ctx);
-                rm_msg_ctx = sandesha2_msg_initilizer_initilize_msg(env, 
+                rm_msg_ctx = sandesha2_msg_initilizer_init_msg(env, 
                         msg_to_invoke);
                 /* have to commit the transaction before invoking. This may get 
                  * changed when WS-AT is available.

Modified: webservices/sandesha/trunk/c/src/wsrm/sequence.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/wsrm/sequence.c?rev=421211&r1=421210&r2=421211&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/wsrm/sequence.c (original)
+++ webservices/sandesha/trunk/c/src/wsrm/sequence.c Wed Jul 12 02:51:57 2006
@@ -269,15 +269,15 @@
     {
         return NULL;
     }
-    SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(sequence_impl->identifier, env, 
+    SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(seq_impl->identifier, env, 
                         seq_node);
-    sequence_impl->msg_num= sandesha2_msg_number_create(env, 
-                        sequence_impl->ns_val);
-    if(NULL == sequence_impl->msg_num)
+    seq_impl->msg_num= sandesha2_msg_number_create(env, 
+                        seq_impl->ns_val);
+    if(NULL == seq_impl->msg_num)
     {
         return NULL;
     }
-    SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(sequence_impl->msg_num, env, seq_node);
+    SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(seq_impl->msg_num, env, seq_node);
     lm_qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_LAST_MSG,
                         seq_impl->ns_val, NULL);
     if(NULL == lm_qname)
@@ -294,7 +294,7 @@
         {
             return NULL;
         }
-        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(sequence_impl->last_msg, env, 
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(seq_impl->last_msg, env, 
                         lm_node);
     }
     return seq;
@@ -337,12 +337,11 @@
     AXIOM_SOAP_HEADER_BLOCK_SET_MUST_UNDERSTAND_WITH_BOOL(seq_block, env, 
                         seq_impl->must_understand);
     seq_node = AXIOM_SOAP_HEADER_BLOCK_GET_BASE_NODE(seq_block, env);
-    SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(sequence_impl->identifier, env, seq_node);
-    SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(sequence_impl->msg_num, env, seq_node);
-    if(NULL != sequence_impl->last_msg)
-        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(sequence_impl->last_msg, env, 
+    SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(seq_impl->identifier, env, seq_node);
+    SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(seq_impl->msg_num, env, seq_node);
+    if(NULL != seq_impl->last_msg)
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(seq_impl->last_msg, env, 
                         seq_node);
-    }
     return seq_node;
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org