Index: modules/core/deployment/axis2_static_arch.h
===================================================================
--- modules/core/deployment/axis2_static_arch.h	(revision 0)
+++ modules/core/deployment/axis2_static_arch.h	(revision 0)
@@ -0,0 +1,76 @@
+#ifndef AS_AXIS2_STATIC_ARCH_H
+#define AS_AXIS2_STATIC_ARCH_H
+
+#include <axis2_types.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct axis2_static_arch_ops axis2_static_arch_ops_t;
+    typedef struct axis2_static_arch axis2_static_arch_t;
+
+    struct axis2_static_arch_ops
+    {
+        axis2_status_t (AXIS2_CALL *
+                free)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                get_desc_path)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                read_desc)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                get_dll_path)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+
+        void *(AXIS2_CALL*
+                get_create_funct)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+
+        void *(AXIS2_CALL*
+                get_delete_funct)(
+                    axis2_static_arch_t *arch,
+                    const axis2_env_t *env);
+    };
+
+    struct axis2_static_arch
+    {
+        axis2_static_arch_ops_t *ops;
+    };
+
+
+#define AXIS2_STATIC_ARCH_FREE(arch, env) \
+      ((arch)->ops->free (arch, env))
+
+#define AXIS2_STATIC_ARCH_GET_DESC_PATH(arch, env) \
+      ((arch)->ops->get_desc_path (arch, env))
+
+#define AXIS2_STATIC_ARCH_READ_DESC(arch, env) \
+      ((arch)->ops->read_desc (arch, env))
+
+#define AXIS2_STATIC_ARCH_GET_DLL_PATH(arch, env) \
+      ((arch)->ops->get_dll_path (arch, env))
+
+#define AXIS2_STATIC_ARCH_GET_CREATE_FUNCT(arch, env) \
+      ((arch)->ops->get_create_funct (arch, env))
+
+#define AXIS2_STATIC_ARCH_GET_DELETE_FUNCT(arch, env) \
+      ((arch)->ops->get_delete_funct (arch, env))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AS_AXIS2_STATIC_ARCH_H */
Index: modules/core/deployment/axis2_static_conf.h
===================================================================
--- modules/core/deployment/axis2_static_conf.h	(revision 0)
+++ modules/core/deployment/axis2_static_conf.h	(revision 0)
@@ -0,0 +1,51 @@
+#ifndef AS_AXIS2_STATIC_CONF_H
+#define AS_AXIS2_STATIC_CONF_H
+
+#include <axis2_types.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct axis2_static_conf_ops axis2_static_conf_ops_t;
+    typedef struct axis2_static_conf axis2_static_conf_t;
+
+    struct axis2_static_conf_ops
+    {
+        axis2_status_t (AXIS2_CALL *
+                free)(
+                    axis2_static_conf_t *conf,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                get_path)(
+                    axis2_static_conf_t *conf,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                read)(
+                    axis2_static_conf_t *conf,
+                    const axis2_env_t *env);
+    };
+
+    struct axis2_static_conf
+    {
+        axis2_static_conf_ops_t *ops;
+    };
+
+
+#define AXIS2_STATIC_CONF_FREE(conf, env) \
+      ((conf)->ops->free (conf, env))
+
+#define AXIS2_STATIC_CONF_GET_PATH(conf, env) \
+      ((conf)->ops->get_path (conf, env))
+
+#define AXIS2_STATIC_CONF_READ(conf, env) \
+      ((conf)->ops->read (conf, env))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AS_AXIS2_STATIC_CONF_H */
Index: modules/core/deployment/axis2_static_lib.h
===================================================================
--- modules/core/deployment/axis2_static_lib.h	(revision 0)
+++ modules/core/deployment/axis2_static_lib.h	(revision 0)
@@ -0,0 +1,60 @@
+#ifndef AS_AXIS2_STATIC_LIB_H
+#define AS_AXIS2_STATIC_LIB_H
+
+#include <axis2_types.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct axis2_static_lib_ops axis2_static_lib_ops_t;
+    typedef struct axis2_static_lib axis2_static_lib_t;
+
+    struct axis2_static_lib_ops
+    {
+        axis2_status_t (AXIS2_CALL *
+                free)(
+                    axis2_static_lib_t *lib,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                get_dll_path)(
+                    axis2_static_lib_t *lib,
+                    const axis2_env_t *env);
+
+        void *(AXIS2_CALL*
+                get_create_funct)(
+                    axis2_static_lib_t *lib,
+                    const axis2_env_t *env);
+
+        void *(AXIS2_CALL*
+                get_delete_funct)(
+                    axis2_static_lib_t *lib,
+                    const axis2_env_t *env);
+    };
+
+    struct axis2_static_lib
+    {
+        axis2_static_lib_ops_t *ops;
+    };
+
+
+#define AXIS2_STATIC_LIB_FREE(lib, env) \
+      ((lib)->ops->free (lib, env))
+
+#define AXIS2_STATIC_LIB_GET_DLL_PATH(lib, env) \
+      ((lib)->ops->get_dll_path (lib, env))
+
+#define AXIS2_STATIC_LIB_GET_CREATE_FUNCT(lib, env) \
+      ((lib)->ops->get_create_funct (lib, env))
+
+#define AXIS2_STATIC_LIB_GET_DELETE_FUNCT(lib, env) \
+      ((lib)->ops->get_delete_funct (lib, env))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AS_AXIS2_STATIC_LIB_H */
Index: modules/core/deployment/axis2_static_repos.h
===================================================================
--- modules/core/deployment/axis2_static_repos.h	(revision 0)
+++ modules/core/deployment/axis2_static_repos.h	(revision 0)
@@ -0,0 +1,88 @@
+#ifndef AXIS2_STATIC_REPOS_H
+#define AXIS2_STATIC_REPOS_H
+
+#include <axis2_types.h>
+#include <axis2_array_list.h>
+#include <axis2_file.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct axis2_static_repos_ops axis2_static_repos_ops_t;
+    typedef struct axis2_static_repos axis2_static_repos_t;
+
+    /* Global Axis2/C static repository.  This is used in place of
+     * a well-known directory-based repository.
+     */
+    extern axis2_static_repos_t* g_axis2_static_repos;
+
+    struct axis2_static_repos_ops
+    {
+        axis2_status_t (AXIS2_CALL *
+                free)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env);
+
+        axis2_char_t *(AXIS2_CALL*
+                get_path)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env);
+
+        axis2_array_list_t *(AXIS2_CALL*
+                list_services_or_modules)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env,
+                    int type);
+
+        axis2_char_t *(AXIS2_CALL*
+                read_file)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env,
+                    axis2_char_t *file);
+
+        void *(AXIS2_CALL*
+                get_create_funct)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env,
+                    axis2_char_t *file);
+
+        void *(AXIS2_CALL*
+                get_delete_funct)(
+                    axis2_static_repos_t *repos,
+                    const axis2_env_t *env,
+                    axis2_char_t *file);
+    };
+
+    struct axis2_static_repos
+    {
+        axis2_static_repos_ops_t *ops;
+    };
+
+
+#define AXIS2_STATIC_REPOS_FREE(repos, env) \
+      ((repos)->ops->free (repos, env))
+
+#define AXIS2_STATIC_REPOS_GET_PATH(repos, env) \
+      ((repos)->ops->get_path (repos, env))
+
+#define AXIS2_STATIC_REPOS_LIST_SERVICES_OR_MODULES(repos, env, type) \
+      ((repos)->ops->list_services_or_modules (repos, env, type))
+
+#define AXIS2_STATIC_REPOS_READ_FILE(repos, env, file) \
+      ((repos)->ops->read_file (repos, env, file))
+
+#define AXIS2_STATIC_REPOS_GET_CREATE_FUNCT(repos, env, file) \
+      ((repos)->ops->get_create_funct (repos, env, file))
+
+#define AXIS2_STATIC_REPOS_GET_DELETE_FUNCT(repos, env, file) \
+      ((repos)->ops->get_delete_funct (repos, env, file))
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AXIS2_STATIC_REPOS_H */
Index: modules/core/deployment/dep_engine.c
===================================================================
--- modules/core/deployment/dep_engine.c	(revision 510617)
+++ modules/core/deployment/dep_engine.c	(working copy)
@@ -30,6 +30,27 @@
 #include <axis2_core_utils.h>
 #include <axis2_module.h>
 
+#ifdef AXIS2_STATIC_DEPLOY
+#include <axis2_static_repos.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* The global axis2_static_repos is the static equivalent of on on-disk
+ * repository.  The linking application is responsible for creating this
+ * object, which contains services, modules, libraries and configuration
+ * as necessary.
+ */
+axis2_static_repos_t* g_axis2_static_repos = NULL;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
 /**
  * @brief DLL Description struct impl
  * Axis2 DLL Description impl
Index: modules/core/deployment/desc_builder.c
===================================================================
--- modules/core/deployment/desc_builder.c	(revision 510617)
+++ modules/core/deployment/desc_builder.c	(working copy)
@@ -21,6 +21,9 @@
 #include <axis2_utils.h>
 #include <axis2_generic_obj.h>
 #include <axis2_raw_xml_in_out_msg_recv.h>
+#ifdef AXIS2_STATIC_DEPLOY
+#include <axis2_static_repos.h>
+#endif
 
 /**
  * To do the common tasks for all Builder
@@ -289,6 +292,9 @@
     axiom_xml_reader_t *reader = NULL;
     axiom_document_t *document = NULL;
     axiom_node_t *root = NULL;
+#ifdef AXIS2_STATIC_DEPLOY
+    axis2_char_t *conf_buffer = NULL;
+#endif
 
     AXIS2_ENV_CHECK(env, NULL);
     desc_builder_impl = AXIS2_INTF_TO_IMPL(desc_builder);
@@ -300,9 +306,19 @@
         return NULL;
     }
     /** create pull parser using the file path to configuration file */
+#ifndef AXIS2_STATIC_DEPLOY
     reader = axiom_xml_reader_create_for_file(env, desc_builder_impl->file_name,
             NULL);
+#else
+    /* Read configuration from the static repository */
+    conf_buffer = AXIS2_STATIC_REPOS_READ_FILE(g_axis2_static_repos,
+                                               env,
+                                               desc_builder_impl->file_name);
 
+    reader = axiom_xml_reader_create_for_memory(env, conf_buffer, AXIS2_STRLEN(conf_buffer),
+            NULL, AXIS2_XML_PARSER_TYPE_BUFFER);
+#endif
+
     if (!reader)
     {
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_CREATING_XML_STREAM_READER,
Index: modules/core/deployment/repos_listener.c
===================================================================
--- modules/core/deployment/repos_listener.c	(revision 510617)
+++ modules/core/deployment/repos_listener.c	(working copy)
@@ -18,6 +18,9 @@
 #include <axis2_repos_listener.h>
 #include <axis2_ws_info_list.h>
 #include <axis2_dir_handler.h>
+#ifdef AXIS2_STATIC_DEPLOY
+#include <axis2_static_repos.h>
+#endif
 
 /**
  * @brief DLL Description struct impl
@@ -345,8 +348,18 @@
     AXIS2_PARAM_CHECK(env->error, folder_name, AXIS2_FAILURE);
     listener_impl = AXIS2_INTF_TO_IMPL(listener);
 
+#ifndef AXIS2_STATIC_DEPLOY
     current_info_list = AXIS2_DIR_HANDLER_LIST_SERVICE_OR_MODULE_DIRS(env,
             folder_name);
+#else
+    /* Rather than scanning a directory, get the list of services or
+     * modules directly from the static repository.  Because they are
+     * compiled in, this list is known ahead of time.
+     */
+    current_info_list = AXIS2_STATIC_REPOS_LIST_SERVICES_OR_MODULES(g_axis2_static_repos,
+                                            env,
+                                            type);
+#endif
     if (!current_info_list)
     {
         axis2_status_t status_code = AXIS2_FAILURE;
@@ -394,5 +407,6 @@
     }
     AXIS2_ARRAY_LIST_FREE(current_info_list, env);
     current_info_list = NULL;
+
     return AXIS2_SUCCESS;
 }
Index: modules/core/transport/http/sender/http_transport_sender.c
===================================================================
--- modules/core/transport/http/sender/http_transport_sender.c	(revision 510617)
+++ modules/core/transport/http/sender/http_transport_sender.c	(working copy)
@@ -648,8 +648,18 @@
 /**
  * Following block distinguish the exposed part of the dll.
  */
+
+/* When building for static deployment, give the get and remove methods
+ * unique names.  This avoids having the linker fail with duplicate symbol
+ * errors.
+ */
+
 AXIS2_EXPORT int
+#ifndef AXIS2_STATIC_DEPLOY
 axis2_get_instance(
+#else
+axis2_http_transport_sender_get_instance(
+#endif
     struct axis2_transport_sender **inst,
     const axis2_env_t *env)
 {
@@ -664,7 +674,11 @@
 }
 
 AXIS2_EXPORT int
+#ifndef AXIS2_STATIC_DEPLOY
 axis2_remove_instance(
+#else
+axis2_http_transport_sender_remove_instance(
+#endif
     axis2_transport_sender_t *inst,
     const axis2_env_t *env)
 {
Index: util/src/dll_desc.c
===================================================================
--- util/src/dll_desc.c	(revision 510617)
+++ util/src/dll_desc.c	(working copy)
@@ -17,6 +17,9 @@
 
 #include <axis2_dll_desc.h>
 #include <axis2_class_loader.h>
+#ifdef AXIS2_STATIC_DEPLOY
+#include <axis2_static_repos.h>
+#endif
 
 struct axis2_dll_desc
 {
@@ -198,8 +201,18 @@
 axis2_dll_desc_get_dl_handler(axis2_dll_desc_t *dll_desc,
         const axis2_env_t *env)
 {
+#ifndef AXIS2_STATIC_DEPLOY
     AXIS2_ENV_CHECK(env, NULL);
     return dll_desc->dl_handler;
+#else
+    /* Always return non-NULL.  This will trick the class loader into not
+     * loading a library.  As a result of this, set_create_funct and
+     * set_delete_funct will not be called.  Because we are static-linked,
+     * this behavior is desirable.  The library is already "loaded", and the
+     * function addresses are known.
+     */
+    return (AXIS2_DLHANDLER)((int)0xCA11AB1E);
+#endif
 }
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
@@ -218,6 +231,19 @@
         const axis2_env_t *env)
 {
     AXIS2_ENV_CHECK(env, NULL);
+
+#ifdef AXIS2_STATIC_DEPLOY
+    /* The first time this function is called, the create_funct pointer
+     * will be NULL.  We will get the address from the static repository,
+     * and cache it for subsequent calls */
+    if (!dll_desc->create_funct)
+    {
+        dll_desc->create_funct = AXIS2_STATIC_REPOS_GET_CREATE_FUNCT(g_axis2_static_repos,
+                                    env,
+                                    dll_desc->path_qualified_dll_name);
+    }
+#endif
+
     return dll_desc->create_funct;
 }
 
@@ -237,6 +263,19 @@
         const axis2_env_t *env)
 {
     AXIS2_ENV_CHECK(env, NULL);
+
+#ifdef AXIS2_STATIC_DEPLOY
+    /* The first time this function is called, the create_funct pointer
+     * will be NULL.  We will get the address from the static repository,
+     * and cache it for subsequent calls */
+    if (!dll_desc->delete_funct)
+    {
+        dll_desc->delete_funct = AXIS2_STATIC_REPOS_GET_DELETE_FUNCT(g_axis2_static_repos,
+                                    env,
+                                    dll_desc->path_qualified_dll_name);
+    }
+#endif
+
     return dll_desc->delete_funct;
 }
 
Index: util/src/file_handler.c
===================================================================
--- util/src/file_handler.c	(revision 510617)
+++ util/src/file_handler.c	(working copy)
@@ -50,6 +50,7 @@
 axis2_file_handler_access(const axis2_char_t *path,
         int mode)
 {
+#ifndef AXIS2_STATIC_DEPLOY
     int i = 0;
     axis2_status_t status = AXIS2_FAILURE;
     i = AXIS2_ACCESS(path, mode);
@@ -62,5 +63,10 @@
         status = AXIS2_FAILURE;
     }
     return status;
+#else
+    /* The static repository never hits the disc for file access.
+     * Always return success */
+    return AXIS2_SUCCESS;
+#endif
 }
 
