You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by da...@apache.org on 2006/05/15 11:29:19 UTC

svn commit: r406593 - in /webservices/axis2/trunk/c/modules/wsdl/woden: include/woden/axis2_woden.h include/woden/wsdl20/axis2_woden_binding.h include/woden/wsdl20/axis2_woden_interface.h src/wsdl20/Makefile.am src/wsdl20/binding.c

Author: damitha
Date: Mon May 15 02:29:18 2006
New Revision: 406593

URL: http://svn.apache.org/viewcvs?rev=406593&view=rev
Log:
Added new files

Added:
    webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_binding.h
Modified:
    webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/axis2_woden.h
    webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_interface.h
    webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/Makefile.am
    webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/binding.c

Modified: webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/axis2_woden.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/axis2_woden.h?rev=406593&r1=406592&r2=406593&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/axis2_woden.h (original)
+++ webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/axis2_woden.h Mon May 15 02:29:18 2006
@@ -68,7 +68,8 @@
         AXIS2_WODEN_INTERFACE_FAULT,
         AXIS2_WODEN_INTERFACE_FAULT_REF,
         AXIS2_WODEN_INTERFACE_MSG_REF,
-        AXIS2_WODEN_INTERFACE_OP
+        AXIS2_WODEN_INTERFACE_OP,
+        AXIS2_WODEN_BINDING
     } axis2_woden_obj_types_t;
 
 /** @} */

Added: webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_binding.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_binding.h?rev=406593&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_binding.h (added)
+++ webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_binding.h Mon May 15 02:29:18 2006
@@ -0,0 +1,236 @@
+/*
+ * 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 AXIS2_WODEN_BINDING_H
+#define AXIS2_WODEN_BINDING_H
+
+/**
+ * @file axis2_woden_binding.h
+ * @brief Axis2 Binding Interface
+ * Represents the Binding component from the WSDL 2.0 Component model.
+ * This component provides a read-only, abstract view of the WSDL 
+ * interface, including any interface information defined within
+ * imported or included WSDL documents. 
+ * 
+ */
+
+#include <woden/axis2_woden.h>
+#include <woden/wsdl20/xml/axis2_woden_binding_element.h>
+#include <woden/wsdl20/axis2_woden_configurable.h>
+
+/** @defgroup axis2_woden_binding Binding
+  * @ingroup axis2_wsdl
+  * @{
+  */
+
+typedef union axis2_woden_binding_base axis2_woden_binding_base_t;
+typedef struct axis2_woden_binding axis2_woden_binding_t;
+typedef struct axis2_woden_binding_ops axis2_woden_binding_ops_t;
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+struct axis2_woden_binding_ops
+{
+	/** 
+     * Deallocate memory
+     * @return status code
+     */
+    axis2_status_t (AXIS2_CALL *
+    free) (void *binding,
+            axis2_env_t **env);
+
+    axis2_status_t (AXIS2_CALL *
+    to_binding_free) (void *binding,
+            axis2_env_t **env);
+    
+    axis2_hash_t *(AXIS2_CALL *
+    super_objs) (void *binding,
+            axis2_env_t **env);
+
+    axis2_woden_obj_types_t (AXIS2_CALL *
+    type) (void *binding,
+            axis2_env_t **env);
+    /**
+     * @return the base implementation class
+     */
+    struct axis2_woden_configurable *(AXIS2_CALL *
+    get_base_impl) (
+            void *binding,
+            axis2_env_t **env);
+
+    axis2_qname_t *(AXIS2_CALL *
+    get_qname) (
+            void *binding,
+            axis2_env_t **env);
+
+    void *(AXIS2_CALL *
+    get_interface) (
+            void *binding,
+            axis2_env_t **env);
+
+    axis2_url_t *(AXIS2_CALL *
+    get_type) (
+            void *binding,
+            axis2_env_t **env);
+
+    axis2_array_list_t *(AXIS2_CALL *
+    get_binding_faults) (
+            void *binding,
+            axis2_env_t **env);
+
+    axis2_array_list_t *(AXIS2_CALL *
+    get_binding_ops) (
+            void *binding,
+            axis2_env_t **env);
+
+    void *(AXIS2_CALL *
+    to_element)  (
+            void *binding,
+            axis2_env_t **env);
+    /**************************************************************************
+     *                      Non-API implementation methods
+     **************************************************************************/
+    /* 
+     * Get the binding fault with the specified 'ref' attribute qname.
+     * 
+     * TODO decide if this type of qname-based accessor is needed, either internally or on API.
+     *  
+     * Note that for this type of key-based access, the choice of List rather than Map makes
+     * the implementation more complicated. However, the advantage of List is that it avoids the
+     * null key problem that arises when the binding fault is missing its 'ref' attribute qname.
+     */
+    void *(AXIS2_CALL *
+    get_binding_fault_element) (
+            void *binding,
+            axis2_env_t **env,
+            axis2_qname_t *qname);
+
+    /*
+     * Get the binding operation with the specified 'ref' attribute qname.
+     * 
+     * TODO decide if this type of qname-based accessor is needed, either internally or on API.
+     * 
+     * Note that for this type of key-based access, the choice of List rather than Map makes
+     * the implementation more complicated. However, the advantage of List is that it avoids the
+     * null key problem that arises when the binding operation is missing its 'ref' attribute qname.
+     */
+    void *(AXIS2_CALL *
+    get_binding_op_element) (
+            void *binding,
+            axis2_env_t **env,
+            axis2_qname_t *qname);
+
+    axis2_status_t (AXIS2_CALL *
+    set_interface_element) (
+            void *binding,
+            axis2_env_t **env,
+            void *interface);
+};
+
+union axis2_woden_binding_base
+{
+    axis2_woden_configurable_t configurable;
+    axis2_woden_binding_element_t binding_element;
+};
+
+struct axis2_woden_binding
+{
+    axis2_woden_binding_base_t base;
+    axis2_woden_binding_ops_t *ops;
+};
+
+AXIS2_DECLARE(axis2_woden_binding_t *)
+axis2_woden_binding_create(
+        axis2_env_t **env);
+
+
+/***************************Woden C Internal Methods***************************/
+AXIS2_DECLARE(axis2_woden_binding_t *)
+axis2_woden_binding_to_binding_element(
+        void *binding,
+        axis2_env_t **env);
+
+AXIS2_DECLARE(axis2_woden_binding_t *)
+axis2_woden_binding_to_configurable_element(
+        void *binding,
+        axis2_env_t **env);
+
+AXIS2_DECLARE(axis2_woden_binding_t *)
+axis2_woden_binding_to_documentable_element(
+        void *binding,
+        axis2_env_t **env);
+
+AXIS2_DECLARE(axis2_woden_binding_t *)
+axis2_woden_binding_to_configurable(
+        void *binding,
+        axis2_env_t **env);
+
+AXIS2_DECLARE(axis2_status_t)
+axis2_woden_binding_resolve_methods(
+        axis2_woden_binding_t *binding,
+        axis2_env_t **env,
+        axis2_woden_binding_t *binding_impl,
+        axis2_hash_t *methods);
+/************************End of Woden C Internal Methods***********************/
+
+#define AXIS2_WODEN_BINDING_FREE(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->free(binding, env))
+
+#define AXIS2_WODEN_BINDING_TO_BINDING_FREE(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->to_binding_free(binding, env))
+
+#define AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->super_objs(binding, env))
+
+#define AXIS2_WODEN_BINDING_TYPE(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->type(binding, env))
+
+#define AXIS2_WODEN_BINDING_GET_BASE_IMPL(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->get_base_impl(binding, env))
+
+#define AXIS2_WODEN_BINDING_GET_QNAME(binding, env) \
+		(((axis2_woden_binding_t *) binding)->\
+         get_qname(binding, env))
+
+#define AXIS2_WODEN_BINDING_GET_INTERFACE(binding, env) \
+		(((axis2_woden_binding_t *) binding)->\
+         get_interface(binding, env))
+
+#define AXIS2_WODEN_BINDING_GET_TYPE(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->\
+         get_type(binding, env))
+
+#define AXIS2_WODEN_BINDING_GET_BINDING_FAULTS(binding, env, qname) \
+		(((axis2_woden_binding_t *) binding)->ops->\
+         get_binding_faults(binding, env, qname))
+
+#define AXIS2_WODEN_BINDING_GET_BINDING_OPS(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->\
+         get_binding_ops(binding, env))
+
+#define AXIS2_WODEN_BINDING_TO_ELEMENT(binding, env) \
+		(((axis2_woden_binding_t *) binding)->ops->\
+         to_element(binding, env))
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+#endif /* AXIS2_WODEN_BINDING_H */

Modified: webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_interface.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_interface.h?rev=406593&r1=406592&r2=406593&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_interface.h (original)
+++ webservices/axis2/trunk/c/modules/wsdl/woden/include/woden/wsdl20/axis2_woden_interface.h Mon May 15 02:29:18 2006
@@ -177,15 +177,15 @@
 		(((axis2_woden_interface_t *) interface)->\
          get_extended_interfaces(interface, env))
 
-#define AXIS2_WODEN_INTERFACE_GET_GET_INTERFACE_FAULTS(interface, env) \
+#define AXIS2_WODEN_INTERFACE_GET_INTERFACE_FAULTS(interface, env) \
 		(((axis2_woden_interface_t *) interface)->ops->\
          get_interface_faults(interface, env))
 
-#define AXIS2_WODEN_INTERFACE_GET_GET_INTERFACE_FAULT(interface, env, qname) \
+#define AXIS2_WODEN_INTERFACE_GET_INTERFACE_FAULT(interface, env, qname) \
 		(((axis2_woden_interface_t *) interface)->ops->\
          get_interface_fault(interface, env, qname))
 
-#define AXIS2_WODEN_INTERFACE_GET_GET_INTERFACE_OPS(interface, env) \
+#define AXIS2_WODEN_INTERFACE_GET_INTERFACE_OPS(interface, env) \
 		(((axis2_woden_interface_t *) interface)->ops->\
          get_interface_ops(interface, env))
 

Modified: webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/Makefile.am?rev=406593&r1=406592&r2=406593&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/Makefile.am Mon May 15 02:29:18 2006
@@ -19,7 +19,8 @@
 							interface_fault.c \
 							interface_fault_ref.c \
 							interface_msg_ref.c \
-							interface_op.c
+							interface_op.c \
+							binding.c
 
 INCLUDES = -I$(top_builddir)/include \
             -I$(AXIS2C_HOME)/include

Modified: webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/binding.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/binding.c?rev=406593&r1=406592&r2=406593&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/binding.c (original)
+++ webservices/axis2/trunk/c/modules/wsdl/woden/src/wsdl20/binding.c Mon May 15 02:29:18 2006
@@ -20,7 +20,7 @@
 #include <woden/wsdl20/extensions/axis2_woden_component_exts.h>
 #include <woden/xml/axis2_woden_xml_attr.h>
 #include <woden/wsdl20/xml/axis2_woden_documentation_element.h>
-#include <woden/wsdl20/axis2_woden_binding_fault.h>
+/*#include <woden/wsdl20/axis2_woden_binding_fault.h>*/
 
 typedef struct axis2_woden_binding_impl axis2_woden_binding_impl_t;
 
@@ -37,10 +37,20 @@
     axis2_hash_t *methods;
     axis2_array_list_t *f_extended_bindings;
     axis2_qname_t *f_qname;
-    axis2_array_list_t *f_extends_qnames;
-    axis2_array_list_t *f_style_default;
-    axis2_array_list_t *f_binding_fault_elements;
-    axis2_array_list_t *f_binding_op_elements;
+    axis2_qname_t *f_interface_qname;
+    void *f_interface;
+    axis2_url_t *f_type;
+    /*
+     * Binding faults and operations may be referred to specifically by the qname represented by
+     * their 'ref' attribute. This typically suggests a Map implementation keyed by 'ref' qname. 
+     * However if the validation feature is disabled, it is possible that the 'ref' attribute may 
+     * be missing, which will cause a null key problem if a Map is used.
+     * To avoid this problem, binding faults and operations will be stored in Lists instead. 
+     * This will avoid any null key issues, however it will make the implementation of 'ref' based
+     * access more complicated. 
+     */
+    axis2_array_list_t *f_faults;
+    axis2_array_list_t *f_ops;
 };
 
 #define INTF_TO_IMPL(binding) ((axis2_woden_binding_impl_t *) binding)
@@ -66,28 +76,27 @@
         axis2_env_t **env);
 
 /* ************************************************************
- *  Binding binding methods (the WSDL Component model)
+ *  Binding interface methods (the WSDL Component model)
  * ************************************************************/
 axis2_qname_t *AXIS2_CALL
 axis2_woden_binding_get_qname(
         void *binding,
         axis2_env_t **env);
 
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_extended_bindings(
+void *AXIS2_CALL
+axis2_woden_binding_get_interface(
         void *binding,
         axis2_env_t **env);
 
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_binding_faults(
+axis2_url_t *AXIS2_CALL
+axis2_woden_binding_get_type(
         void *binding,
         axis2_env_t **env);
 
-void *AXIS2_CALL
-axis2_woden_binding_get_binding_fault(
+axis2_array_list_t *AXIS2_CALL
+axis2_woden_binding_get_binding_faults(
         void *binding,
-        axis2_env_t **env,
-        axis2_qname_t *qname);
+        axis2_env_t **env);
 
 axis2_array_list_t *AXIS2_CALL
 axis2_woden_binding_get_binding_ops(
@@ -100,7 +109,7 @@
         axis2_env_t **env);
 
 /* ************************************************************
- *  BindingElement binding methods (the XML Element model)
+ *  Binding Element interface methods (the XML Element model)
  * ************************************************************/
 axis2_status_t AXIS2_CALL
 axis2_woden_binding_set_qname(
@@ -109,26 +118,26 @@
         axis2_qname_t *qname);
 
 axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_style_default_uri(
+axis2_woden_binding_set_interface_qname(
         void *binding,
         axis2_env_t **env,
-        axis2_url_t *uri);
+        axis2_qname_t *qname);
+
+axis2_qname_t *AXIS2_CALL
+axis2_woden_binding_get_interface_qname(
+        void *binding,
+        axis2_env_t **env);
 
 void *AXIS2_CALL
-axis2_woden_binding_get_style_default(
+axis2_woden_binding_get_interface_element(
         void *binding,
         axis2_env_t **env);
 
 axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_extended_qname(
+axis2_woden_binding_set_type(
         void *binding,
         axis2_env_t **env,
-        axis2_woden_wsdl_element_t *qname);
-
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_extends_qnames(
-        void *binding,
-        axis2_env_t **env);
+        axis2_url_t *type);
 
 axis2_status_t AXIS2_CALL
 axis2_woden_binding_add_binding_fault_element(
@@ -152,12 +161,26 @@
         void *binding,
         axis2_env_t **env);
 
-axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_extended_binding(
+/* ************************************************************
+ *  Non-API implementation methods
+ * ************************************************************/
+void *AXIS2_CALL
+axis2_woden_binding_get_binding_fault_element(
         void *binding,
         axis2_env_t **env,
-        void *extended_binding);
+        axis2_qname_t *qname);
 
+void *AXIS2_CALL
+axis2_woden_binding_get_binding_op_element(
+        void *binding,
+        axis2_env_t **env,
+        axis2_qname_t *qname);
+
+axis2_status_t AXIS2_CALL
+axis2_woden_binding_set_interface_element(
+        void *binding,
+        axis2_env_t **env,
+        void *interface);
 
 static axis2_woden_binding_t *
 create(axis2_env_t **env);
@@ -349,11 +372,11 @@
     binding_impl->super = NULL;
     binding_impl->methods = NULL;
     binding_impl->f_qname = NULL;
-    binding_impl->f_extended_bindings = NULL;
-    binding_impl->f_extends_qnames = NULL;
-    binding_impl->f_style_default = NULL;
-    binding_impl->f_binding_fault_elements = NULL;
-    binding_impl->f_binding_op_elements = NULL;
+    binding_impl->f_interface_qname = NULL;
+    binding_impl->f_interface = NULL;
+    binding_impl->f_type = NULL;
+    binding_impl->f_faults = NULL;
+    binding_impl->f_ops = NULL;
     
     binding_impl->binding.base.binding_element.ops = NULL;
     binding_impl->binding.base.binding_element.base.documentable_element.ops = NULL;
@@ -369,16 +392,19 @@
     binding_impl->binding.ops->get_base_impl = axis2_woden_binding_get_base_impl;
     
     binding_impl->binding.ops->get_qname = axis2_woden_binding_get_qname;
-    binding_impl->binding.ops->get_extended_bindings = 
-        axis2_woden_binding_get_extended_bindings;
+    binding_impl->binding.ops->get_interface = axis2_woden_binding_get_interface;
+    binding_impl->binding.ops->get_type = axis2_woden_binding_get_type;
     binding_impl->binding.ops->get_binding_faults = 
         axis2_woden_binding_get_binding_faults;
-    binding_impl->binding.ops->get_binding_fault = 
-        axis2_woden_binding_get_binding_fault;
     binding_impl->binding.ops->get_binding_ops = 
         axis2_woden_binding_get_binding_ops;
-    binding_impl->binding.ops->to_element = 
-        axis2_woden_binding_to_element;
+    binding_impl->binding.ops->to_element = axis2_woden_binding_to_element;
+    binding_impl->binding.ops->get_binding_fault_element = 
+        axis2_woden_binding_get_binding_fault_element;
+    binding_impl->binding.ops->get_binding_op_element = 
+        axis2_woden_binding_get_binding_op_element;
+    binding_impl->binding.ops->set_interface_element = 
+        axis2_woden_binding_set_interface_element;
  
     binding_impl->methods = axis2_hash_make(env);
     if(!binding_impl->methods) 
@@ -408,15 +434,15 @@
     axis2_hash_set(binding_impl->methods, "get_qname", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_get_qname);
-    axis2_hash_set(binding_impl->methods, "get_extended_bindings", 
+    axis2_hash_set(binding_impl->methods, "get_interface", 
+            AXIS2_HASH_KEY_STRING, 
+            axis2_woden_binding_get_interface);
+    axis2_hash_set(binding_impl->methods, "get_type", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_get_extended_bindings);
+            axis2_woden_binding_get_type);
     axis2_hash_set(binding_impl->methods, "get_binding_faults", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_get_binding_faults);
-    axis2_hash_set(binding_impl->methods, "get_binding_fault", 
-            AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_get_binding_fault);
     axis2_hash_set(binding_impl->methods, "get_binding_ops", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_get_binding_ops);
@@ -426,18 +452,18 @@
     axis2_hash_set(binding_impl->methods, "set_qname", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_set_qname);
-    axis2_hash_set(binding_impl->methods, "add_style_default_uri", 
+    axis2_hash_set(binding_impl->methods, "set_interface_qname", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_add_style_default_uri);
-    axis2_hash_set(binding_impl->methods, "get_style_default", 
+            axis2_woden_binding_set_interface_qname);
+    axis2_hash_set(binding_impl->methods, "get_interface_qname", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_get_style_default);
-    axis2_hash_set(binding_impl->methods, "add_extends_qnames", 
+            axis2_woden_binding_get_interface_qname);
+    axis2_hash_set(binding_impl->methods, "get_interface_element", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_get_extends_qnames);
-    axis2_hash_set(binding_impl->methods, "get_extends_qnames", 
+            axis2_woden_binding_get_interface_element);
+    axis2_hash_set(binding_impl->methods, "set_type", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_get_extends_qnames);
+            axis2_woden_binding_set_type);
     axis2_hash_set(binding_impl->methods, "add_binding_fault_element", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_add_binding_fault_element);
@@ -450,9 +476,15 @@
     axis2_hash_set(binding_impl->methods, "get_binding_op_elements", 
             AXIS2_HASH_KEY_STRING, 
             axis2_woden_binding_get_binding_op_elements);
-    axis2_hash_set(binding_impl->methods, "add_extended_binding", 
+    axis2_hash_set(binding_impl->methods, "get_binding_fault_element", 
+            AXIS2_HASH_KEY_STRING, 
+            axis2_woden_binding_get_binding_fault_element);
+    axis2_hash_set(binding_impl->methods, "get_binding_op_element", 
+            AXIS2_HASH_KEY_STRING, 
+            axis2_woden_binding_get_binding_op_element);
+    axis2_hash_set(binding_impl->methods, "set_interface_element", 
             AXIS2_HASH_KEY_STRING, 
-            axis2_woden_binding_add_extended_binding);
+            axis2_woden_binding_set_interface_element);
 
     return &(binding_impl->binding);
 }
@@ -490,40 +522,40 @@
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     binding_impl = INTF_TO_IMPL(binding);
 
-    if(binding_impl->f_extended_bindings)
-    {
-        AXIS2_ARRAY_LIST_FREE(binding_impl->f_extended_bindings, env);
-        binding_impl->f_extended_bindings = NULL;
-    }
-
     if(binding_impl->f_qname)
     {
         AXIS2_QNAME_FREE(binding_impl->f_qname, env);
         binding_impl->f_qname = NULL;
     }
 
-    if(binding_impl->f_extends_qnames)
+    if(binding_impl->f_interface_qname)
     {
-        AXIS2_ARRAY_LIST_FREE(binding_impl->f_extends_qnames, env);
-        binding_impl->f_extends_qnames = NULL;
+        AXIS2_QNAME_FREE(binding_impl->f_interface_qname, env);
+        binding_impl->f_interface_qname = NULL;
     }
 
-    if(binding_impl->f_style_default)
+    if(binding_impl->f_interface)
     {
-        AXIS2_ARRAY_LIST_FREE(binding_impl->f_style_default, env);
-        binding_impl->f_style_default = NULL;
+        AXIS2_WODEN_INTERFACE_FREE(binding_impl->f_interface, env);
+        binding_impl->f_interface = NULL;
     }
 
-    if(binding_impl->f_binding_fault_elements)
+    if(binding_impl->f_type)
     {
-        AXIS2_ARRAY_LIST_FREE(binding_impl->f_binding_fault_elements, env);
-        binding_impl->f_binding_fault_elements = NULL;
+        AXIS2_URL_FREE(binding_impl->f_type, env);
+        binding_impl->f_type = NULL;
     }
 
-    if(binding_impl->f_binding_op_elements)
+    if(binding_impl->f_faults)
     {
-        AXIS2_ARRAY_LIST_FREE(binding_impl->f_binding_op_elements, env);
-        binding_impl->f_binding_op_elements = NULL;
+        AXIS2_ARRAY_LIST_FREE(binding_impl->f_faults, env);
+        binding_impl->f_faults = NULL;
+    }
+
+    if(binding_impl->f_ops)
+    {
+        AXIS2_ARRAY_LIST_FREE(binding_impl->f_ops, env);
+        binding_impl->f_ops = NULL;
     }
    
     if(binding_impl->super)
@@ -656,24 +688,24 @@
             binding->ops->get_qname = 
             binding_impl_l->binding.ops->get_qname;
     
-    binding->ops->get_extended_bindings = axis2_hash_get(methods, 
-            "get_extended_bindings", AXIS2_HASH_KEY_STRING);
-    if(!binding->ops->get_extended_bindings && binding_impl_l)
-            binding->ops->get_extended_bindings = 
-            binding_impl_l->binding.ops->get_extended_bindings;
+    binding->ops->get_interface = axis2_hash_get(methods, 
+            "get_interface", AXIS2_HASH_KEY_STRING);
+    if(!binding->ops->get_interface && binding_impl_l)
+            binding->ops->get_interface = 
+            binding_impl_l->binding.ops->get_interface;
     
+    binding->ops->get_type = axis2_hash_get(methods, 
+            "get_type", AXIS2_HASH_KEY_STRING);
+    if(!binding->ops->get_type && binding_impl_l)
+            binding->ops->get_type = 
+            binding_impl_l->binding.ops->get_type;
+
     binding->ops->get_binding_faults = axis2_hash_get(methods, 
             "get_binding_faults", AXIS2_HASH_KEY_STRING);
     if(!binding->ops->get_binding_faults && binding_impl_l)
             binding->ops->get_binding_faults = 
             binding_impl_l->binding.ops->get_binding_faults;
 
-    binding->ops->get_binding_fault = axis2_hash_get(methods, 
-            "get_binding_fault", AXIS2_HASH_KEY_STRING);
-    if(!binding->ops->get_binding_fault && binding_impl_l)
-            binding->ops->get_binding_fault = 
-            binding_impl_l->binding.ops->get_binding_fault;
-
     binding->ops->get_binding_ops = axis2_hash_get(methods, 
             "get_binding_ops", AXIS2_HASH_KEY_STRING);
     if(!binding->ops->get_binding_ops && binding_impl_l)
@@ -685,12 +717,31 @@
     if(!binding->ops->to_element && binding_impl_l)
             binding->ops->to_element = 
             binding_impl_l->binding.ops->to_element;
+ 
+    binding->ops->get_binding_fault_element = axis2_hash_get(methods, 
+            "get_binding_fault_element", AXIS2_HASH_KEY_STRING);
+    if(!binding->ops->get_binding_fault_element && binding_impl_l)
+            binding->ops->get_binding_fault_element = 
+            binding_impl_l->binding.ops->get_binding_fault_element;
+ 
+    binding->ops->get_binding_op_element = axis2_hash_get(methods, 
+            "get_binding_op_element", AXIS2_HASH_KEY_STRING);
+    if(!binding->ops->get_binding_op_element && binding_impl_l)
+            binding->ops->get_binding_op_element = 
+            binding_impl_l->binding.ops->get_binding_op_element;
+ 
+    binding->ops->set_interface_element = axis2_hash_get(methods, 
+            "set_interface_element", AXIS2_HASH_KEY_STRING);
+    if(!binding->ops->set_interface_element && binding_impl_l)
+            binding->ops->set_interface_element = 
+            binding_impl_l->binding.ops->set_interface_element;
    
+  
     return AXIS2_SUCCESS;
 }
 
 /* ************************************************************
- *  Binding binding methods (the WSDL Component model)
+ *  Binding interface methods (the WSDL Component model)
  * ************************************************************/
 axis2_qname_t *AXIS2_CALL
 axis2_woden_binding_get_qname(
@@ -708,72 +759,53 @@
     return binding_impl->f_qname;
 }
 
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_extended_bindings(
+void *AXIS2_CALL
+axis2_woden_binding_get_interface(
         void *binding,
         axis2_env_t **env)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
 
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_ENV_CHECK(env, NULL);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
-
-    return binding_impl->f_extended_bindings;
+    
+    return binding_impl->f_interface;
 }
 
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_binding_faults(
+axis2_url_t *AXIS2_CALL
+axis2_woden_binding_get_type(
         void *binding,
         axis2_env_t **env)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
 
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_ENV_CHECK(env, NULL);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
-
-    return binding_impl->f_binding_fault_elements;
+    
+    return binding_impl->f_type;
 }
 
-void *AXIS2_CALL
-axis2_woden_binding_get_binding_fault(
+
+axis2_array_list_t *AXIS2_CALL
+axis2_woden_binding_get_binding_faults(
         void *binding,
-        axis2_env_t **env,
-        axis2_qname_t *qname)
+        axis2_env_t **env)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
-    int i = 0, size = 0;
-    void *fault;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, qname, NULL);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    size = AXIS2_ARRAY_LIST_SIZE(binding_impl->f_binding_fault_elements, env);
-    for(i = 0; i < size; i++)
-    {
-        void *flt = NULL;
-        axis2_qname_t *qname_l = NULL;
-        
-        flt = AXIS2_ARRAY_LIST_GET(binding_impl->f_binding_fault_elements, 
-                env, i);
-        qname_l = (axis2_qname_t *) AXIS2_BINDING_FAULT_GET_QNAME(flt, env);
-        if(AXIS2_TRUE == AXIS2_QNAME_EQUALS(qname, env, qname_l))
-        {
-            fault = flt;
-            break;
-        }
-    }
-
-    return fault;
+    return binding_impl->f_faults;
 }
 
 axis2_array_list_t *AXIS2_CALL
@@ -789,7 +821,7 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    return binding_impl->f_binding_op_elements;
+    return binding_impl->f_ops;
 }
 
 void *AXIS2_CALL
@@ -809,7 +841,7 @@
 }
 
 /* ************************************************************
- *  BindingElement binding methods (the XML Element model)
+ *  Binding Element interface methods (the XML Element model)
  * ************************************************************/
 axis2_status_t AXIS2_CALL
 axis2_woden_binding_set_qname(
@@ -835,36 +867,31 @@
 }
 
 axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_style_default_uri(
+axis2_woden_binding_set_interface_qname(
         void *binding,
         axis2_env_t **env,
-        axis2_url_t *uri)
+        axis2_qname_t *qname)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, uri, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, qname, AXIS2_FAILURE);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    if(!binding_impl->f_style_default)
+    if(binding_impl->f_interface_qname)
     {
-        binding_impl->f_style_default = axis2_array_list_create(env, 0);
-        if(!binding_impl->f_style_default)
-        {
-            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-            return AXIS2_FAILURE;
-        }
+        AXIS2_QNAME_FREE(binding_impl->f_interface_qname, env);
     }
-    AXIS2_ARRAY_LIST_ADD(binding_impl->f_style_default, env, uri);
+    binding_impl->f_interface_qname = AXIS2_QNAME_CLONE(qname, env);
 
     return AXIS2_SUCCESS;
 }
 
-void *AXIS2_CALL
-axis2_woden_binding_get_style_default(
+axis2_qname_t *AXIS2_CALL
+axis2_woden_binding_get_interface_qname(
         void *binding,
         axis2_env_t **env)
 {
@@ -876,52 +903,48 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    return binding_impl->f_style_default;
+    return binding_impl->f_interface_qname;
 }
 
-axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_extended_qname(
+void *AXIS2_CALL
+axis2_woden_binding_get_interface_element(
         void *binding,
-        axis2_env_t **env,
-        axis2_woden_wsdl_element_t *qname)
+        axis2_env_t **env)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, qname, AXIS2_FAILURE);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
-    
-    if(!binding_impl->f_extends_qnames)
-    {
-        binding_impl->f_extends_qnames = axis2_array_list_create(env, 0);
-        if(!binding_impl->f_extends_qnames)
-        {
-            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-            return AXIS2_FAILURE;
-        }
-    }
-    AXIS2_ARRAY_LIST_ADD(binding_impl->f_extends_qnames, env, qname);
 
-    return AXIS2_SUCCESS;
+    return binding_impl->f_interface;
 }
 
-axis2_array_list_t *AXIS2_CALL
-axis2_woden_binding_get_extends_qnames(
+
+axis2_status_t AXIS2_CALL
+axis2_woden_binding_set_type(
         void *binding,
-        axis2_env_t **env)
+        axis2_env_t **env,
+        axis2_url_t *type)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, type, AXIS2_FAILURE);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
+    
+    if(binding_impl->f_type)
+    {
+        /* TODO */
+    }
+    binding_impl->f_type = type;
 
-    return binding_impl->f_extends_qnames;
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
@@ -939,16 +962,16 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
     
-    if(!binding_impl->f_binding_fault_elements)
+    if(!binding_impl->f_faults)
     {
-        binding_impl->f_binding_fault_elements = axis2_array_list_create(env, 0);
-        if(!binding_impl->f_binding_fault_elements)
+        binding_impl->f_faults = axis2_array_list_create(env, 0);
+        if(!binding_impl->f_faults)
         {
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
             return AXIS2_FAILURE;
         }
     }
-    AXIS2_ARRAY_LIST_ADD(binding_impl->f_binding_fault_elements, env, fault);
+    AXIS2_ARRAY_LIST_ADD(binding_impl->f_faults, env, fault);
 
     return AXIS2_SUCCESS;
 }
@@ -966,7 +989,7 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    return binding_impl->f_binding_fault_elements;
+    return binding_impl->f_faults;
 }
 
 axis2_status_t AXIS2_CALL
@@ -984,16 +1007,16 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
     
-    if(!binding_impl->f_binding_op_elements)
+    if(!binding_impl->f_ops)
     {
-        binding_impl->f_binding_op_elements = axis2_array_list_create(env, 0);
-        if(!binding_impl->f_binding_op_elements)
+        binding_impl->f_ops = axis2_array_list_create(env, 0);
+        if(!binding_impl->f_ops)
         {
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
             return AXIS2_FAILURE;
         }
     }
-    AXIS2_ARRAY_LIST_ADD(binding_impl->f_binding_op_elements, env, op);
+    AXIS2_ARRAY_LIST_ADD(binding_impl->f_ops, env, op);
 
     return AXIS2_SUCCESS;
 }
@@ -1011,38 +1034,107 @@
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    return binding_impl->f_binding_op_elements;
+    return binding_impl->f_ops;
 }
 
-axis2_status_t AXIS2_CALL
-axis2_woden_binding_add_extended_binding(
+/* ************************************************************
+ *  Non-API implementation methods
+ * ************************************************************/
+void *AXIS2_CALL
+axis2_woden_binding_get_binding_fault_element(
         void *binding,
         axis2_env_t **env,
-        void *extended_binding)
+        axis2_qname_t *qname)
 {
     axis2_woden_binding_impl_t *binding_impl = NULL;
     axis2_hash_t *super = NULL;
+    int i = 0, size = 0;
+    void *fault = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, binding, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, qname, NULL);
     super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
     binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
                 "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
 
-    if(!binding_impl->f_extended_bindings)
+    size = AXIS2_ARRAY_LIST_SIZE(binding_impl->f_faults, env);
+    for(i = 0; i < size; i++)
     {
-        binding_impl->f_extended_bindings = axis2_array_list_create(env, 0);
-        if(!binding_impl->f_extended_bindings)
+        void *bind_fault = NULL;
+        axis2_qname_t *qname_l = NULL;
+        
+        bind_fault = AXIS2_ARRAY_LIST_GET(binding_impl->f_faults, 
+                env, i);
+        qname_l = (axis2_qname_t *) AXIS2_BINDING_FAULT_ELEMENT_GET_REF(
+                bind_fault, env);
+        if(AXIS2_TRUE == AXIS2_QNAME_EQUALS(qname, env, qname_l))
         {
-            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-            return AXIS2_FAILURE;
+            fault = bind_fault;
+            break;
         }
     }
-    AXIS2_ARRAY_LIST_ADD(binding_impl->f_extended_bindings, env, extended_binding);
-    return AXIS2_SUCCESS;
+
+    return fault;
 }
 
+void *AXIS2_CALL
+axis2_woden_binding_get_binding_op_element(
+        void *binding,
+        axis2_env_t **env,
+        axis2_qname_t *qname)
+{
+    axis2_woden_binding_impl_t *binding_impl = NULL;
+    axis2_hash_t *super = NULL;
+    int i = 0, size = 0;
+    void *op = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, qname, NULL);
+    super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
+    binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
+                "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
+
+    size = AXIS2_ARRAY_LIST_SIZE(binding_impl->f_ops, env);
+    for(i = 0; i < size; i++)
+    {
+        void *bind_op = NULL;
+        axis2_qname_t *qname_l = NULL;
+        
+        bind_op = AXIS2_ARRAY_LIST_GET(binding_impl->f_ops, 
+                env, i);
+        qname_l = (axis2_qname_t *) AXIS2_BINDING_OP_ELEMENT_GET_REF(
+                bind_op, env);
+        if(AXIS2_TRUE == AXIS2_QNAME_EQUALS(qname, env, qname_l))
+        {
+            op = bind_op;
+            break;
+        }
+    }
 
+    return op;
+}
 
+axis2_status_t AXIS2_CALL
+axis2_woden_binding_set_interface_element(
+        void *binding,
+        axis2_env_t **env,
+        void *interface)
+{
+    axis2_woden_binding_impl_t *binding_impl = NULL;
+    axis2_hash_t *super = NULL;
 
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, interface, AXIS2_FAILURE);
+    super = AXIS2_WODEN_BINDING_SUPER_OBJS(binding, env);
+    binding_impl = INTF_TO_IMPL(axis2_hash_get(super, 
+                "AXIS2_WODEN_BINDING", AXIS2_HASH_KEY_STRING));
+
+    if(binding_impl->f_interface)
+    {
+        /* TODO */
+    }
+    binding_impl->f_interface = interface;
+
+    return AXIS2_SUCCESS;
+}