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 sh...@apache.org on 2008/11/20 07:28:38 UTC
svn commit: r719179 [1/3] - in /webservices/axis2/trunk/c: samples/
samples/client/amqp/ samples/client/amqp/echo/ samples/client/amqp/mtom/
samples/client/amqp/mtom/resources/ samples/client/amqp/notify/
src/core/transport/amqp/receiver/ src/core/tran...
Author: shankar
Date: Wed Nov 19 22:28:35 2008
New Revision: 719179
URL: http://svn.apache.org/viewvc?rev=719179&view=rev
Log:
Applying patch of AXIS2C-1293
Added:
webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_addr.c
webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_dual.c
webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_soap11.c
webservices/axis2/trunk/c/samples/client/amqp/echo/echo_non_blocking_dual.c
webservices/axis2/trunk/c/samples/client/amqp/mtom/
webservices/axis2/trunk/c/samples/client/amqp/mtom/Makefile.am
webservices/axis2/trunk/c/samples/client/amqp/mtom/mtom_client.c
webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/
webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/Makefile.am
webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/axis2.jpg (with props)
webservices/axis2/trunk/c/samples/client/amqp/notify/
webservices/axis2/trunk/c/samples/client/amqp/notify/Makefile.am
webservices/axis2/trunk/c/samples/client/amqp/notify/notify_client.c
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.cpp
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_listener.h
Modified:
webservices/axis2/trunk/c/samples/client/amqp/Makefile.am
webservices/axis2/trunk/c/samples/client/amqp/echo/Makefile.am
webservices/axis2/trunk/c/samples/configure.ac
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.c
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.h
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/request_processor/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.c
webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/request_processor/axis2_amqp_request_processor.h
webservices/axis2/trunk/c/src/core/transport/amqp/sender/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/sender/axis2_amqp_sender.c
webservices/axis2/trunk/c/src/core/transport/amqp/sender/axis2_amqp_sender.h
webservices/axis2/trunk/c/src/core/transport/amqp/sender/qpid_sender/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.cpp
webservices/axis2/trunk/c/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender.h
webservices/axis2/trunk/c/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.cpp
webservices/axis2/trunk/c/src/core/transport/amqp/sender/qpid_sender/axis2_qpid_sender_interface.h
webservices/axis2/trunk/c/src/core/transport/amqp/server/axis2_amqp_server/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.c
webservices/axis2/trunk/c/src/core/transport/amqp/server/axis2_amqp_server/axis2_amqp_server.h
webservices/axis2/trunk/c/src/core/transport/amqp/util/Makefile.am
webservices/axis2/trunk/c/src/core/transport/amqp/util/axis2_amqp_defines.h
webservices/axis2/trunk/c/src/core/transport/amqp/util/axis2_amqp_util.c
webservices/axis2/trunk/c/src/core/transport/amqp/util/axis2_amqp_util.h
Modified: webservices/axis2/trunk/c/samples/client/amqp/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/Makefile.am?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/Makefile.am (original)
+++ webservices/axis2/trunk/c/samples/client/amqp/Makefile.am Wed Nov 19 22:28:35 2008
@@ -1 +1 @@
-SUBDIRS = echo
+SUBDIRS = echo notify mtom
Modified: webservices/axis2/trunk/c/samples/client/amqp/echo/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/echo/Makefile.am?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/echo/Makefile.am (original)
+++ webservices/axis2/trunk/c/samples/client/amqp/echo/Makefile.am Wed Nov 19 22:28:35 2008
@@ -1,30 +1,19 @@
prgbindir = $(prefix)/bin/samples/amqp
-prgbin_PROGRAMS = echo_blocking echo_non_blocking
+prgbin_PROGRAMS = echo_blocking \
+ echo_non_blocking \
+ echo_blocking_addr \
+ echo_blocking_dual \
+ echo_non_blocking_dual \
+ echo_blocking_soap11
-echo_blocking_SOURCES = echo_blocking.c echo_util.c
-echo_non_blocking_SOURCES = echo_non_blocking.c echo_util.c
-
-LINK_FLAGS = $(LDFLAGS) \
- -L$(AXIS2C_HOME)/lib \
- -laxutil \
- -laxis2_axiom \
- -laxis2_engine \
- -laxis2_parser \
- -lpthread \
- $(GUTHTHILA_LIBS) \
- $(LIBXML2_LIBS)
-
-echo_blocking_LDADD = $(LINK_FLAGS)
-echo_non_blocking_LDADD = $(LINK_FLAGS)
-
-INCLUDES = @AXIS2INC@
-prgbindir = $(prefix)/bin/samples/amqp
-
-prgbin_PROGRAMS = echo_blocking echo_non_blocking
echo_blocking_SOURCES = echo_blocking.c echo_util.c
echo_non_blocking_SOURCES = echo_non_blocking.c echo_util.c
+echo_blocking_addr_SOURCES = echo_blocking_addr.c echo_util.c
+echo_blocking_dual_SOURCES = echo_blocking_dual.c echo_util.c
+echo_non_blocking_dual_SOURCES = echo_non_blocking_dual.c echo_util.c
+echo_blocking_soap11_SOURCES = echo_blocking_soap11.c echo_util.c
LINK_FLAGS = $(LDFLAGS) \
-L$(AXIS2C_HOME)/lib \
@@ -33,12 +22,14 @@
-laxis2_engine \
-laxis2_parser \
-lpthread \
- $(GUTHTHILA_LIBS) \
- $(LIBXML2_LIBS)
+ $(GUTHTHILA_LIBS)
echo_blocking_LDADD = $(LINK_FLAGS)
echo_non_blocking_LDADD = $(LINK_FLAGS)
+echo_blocking_addr_LDADD = $(LINK_FLAGS)
+echo_blocking_dual_LDADD = $(LINK_FLAGS)
+echo_non_blocking_dual_LDADD = $(LINK_FLAGS)
+echo_blocking_soap11_LDADD = $(LINK_FLAGS)
INCLUDES = @AXIS2INC@
-EXTRA_DIST=echo_util.h
Added: webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_addr.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_addr.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_addr.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_addr.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,132 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 "echo_util.h"
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ /* Set up the environment */
+ env =
+ axutil_env_create_all("echo_blocking_addr_amqp.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "amqp://localhost:5672/axis2/services/echo";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_action(options, env,
+ "http://ws.apache.org/axis2/c/samples/echoString");
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ /* Engage addressing module */
+ axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
+
+ /* Build the SOAP request message payload using OM API. */
+ payload = build_om_payload_for_echo_svc(env);
+
+ /* Send request */
+ ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+
+ if (ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = axiom_node_to_string(ret_node, env);
+ if (om_str)
+ {
+ printf("\nReceived OM : %s\n", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ }
+ printf("\necho client invoke SUCCESSFUL!\n");
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("echo client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+}
Added: webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_dual.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_dual.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_dual.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_dual.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,142 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 "echo_util.h"
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_endpoint_ref_t *reply_to = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ /* Set up the environment */
+ env =
+ axutil_env_create_all("echo_blocking_dual_amqp.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "amqp://localhost:5672/axis2/services/echo";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE);
+
+ /* Seperate listner needs addressing, hence addressing stuff in options */
+ axis2_options_set_action(options, env,
+ "http://ws.apache.org/axis2/c/samples/echoString");
+ reply_to =
+ axis2_endpoint_ref_create(env,
+ "amqp://localhost:5672/axis2/services/__ANONYMOUS_SERVICE__");
+ axis2_options_set_reply_to(options, env, reply_to);
+
+ axis2_options_set_transport_in_protocol(options, env, AXIS2_TRANSPORT_ENUM_AMQP);
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
+
+ /* Build the SOAP request message payload using OM API. */
+ payload = build_om_payload_for_echo_svc(env);
+
+ /* Send request */
+ ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+
+ if (ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = axiom_node_to_string(ret_node, env);
+ if (om_str)
+ {
+ printf("\nReceived OM : %s\n", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ }
+ printf("\necho client invoke SUCCESSFUL!\n");
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("echo client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ AXIS2_SLEEP(1);
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+}
Added: webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_soap11.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_soap11.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_soap11.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/echo/echo_blocking_soap11.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,135 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 "echo_util.h"
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+ axutil_string_t *soap_action = NULL;
+
+ /* Set up the environment */
+ env =
+ axutil_env_create_all("echo_blocking_soap11_amqp.log",
+ AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "amqp://localhost:5672/axis2/services/echo";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_soap_version(options, env, AXIOM_SOAP11);
+ soap_action =
+ axutil_string_create(env,
+ "http://ws.apache.org/axis2/c/samples/echo/soap_action");
+ axis2_options_set_soap_action(options, env, soap_action);
+ axutil_string_free(soap_action, env);
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ /* Build the SOAP request message payload using OM API. */
+ payload = build_om_payload_for_echo_svc(env);
+
+ /* Send request */
+ ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+
+ if (ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = axiom_node_to_string(ret_node, env);
+ if (om_str)
+ {
+ printf("\nReceived OM : %s\n", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ }
+ printf("\necho client invoke SUCCESSFUL!\n");
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("echo client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+}
Added: webservices/axis2/trunk/c/samples/client/amqp/echo/echo_non_blocking_dual.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/echo/echo_non_blocking_dual.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/echo/echo_non_blocking_dual.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/echo/echo_non_blocking_dual.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,235 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 "echo_util.h"
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+#define MAX_COUNT 3000000
+
+/* my on_complete callback function */
+axis2_status_t AXIS2_CALL echo_callback_on_complete(
+ struct axis2_callback * callback,
+ const axutil_env_t * env);
+
+/* my on_error callback function */
+axis2_status_t AXIS2_CALL echo_callback_on_error(
+ struct axis2_callback *callback,
+ const axutil_env_t * env,
+ int exception);
+
+/* to check whether the callback is completed */
+int isComplete = 0;
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_endpoint_ref_t *reply_to = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axis2_callback_t *callback = NULL;
+ int count = 0;
+
+ /* Set up the environment */
+ env =
+ axutil_env_create_all("echo_non_blocking_dual_amqp.log",
+ AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "amqp://localhost:5672/axis2/services/echo";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_use_separate_listener(options, env, AXIS2_TRUE);
+
+ /* Seperate listner needs addressing, hence addressing stuff in options */
+ axis2_options_set_action(options, env,
+ "http://ws.apache.org/axis2/c/samples/echoString");
+ reply_to =
+ axis2_endpoint_ref_create(env,
+ "amqp://localhost:5672/axis2/services/__ANONYMOUS_SERVICE__");
+ axis2_options_set_reply_to(options, env, reply_to);
+
+ axis2_options_set_transport_in_protocol(options, env, AXIS2_TRANSPORT_ENUM_AMQP);
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
+ /*axis2_svc_client_engage_module(svc_client, env, "sandesha2"); */
+
+ /* Build the SOAP request message payload using OM API. */
+ payload = build_om_payload_for_echo_svc(env);
+
+ /* Create the callback object with default on_complete and on_error
+ callback functions */
+ callback = axis2_callback_create(env);
+
+ /* Set our on_complete fucntion pointer to the callback object */
+ axis2_callback_set_on_complete(callback, echo_callback_on_complete);
+
+ /* Set our on_error function pointer to the callback object */
+ axis2_callback_set_on_error(callback, echo_callback_on_error);
+
+ /* Send request */
+ axis2_svc_client_send_receive_non_blocking(svc_client, env,
+ payload, callback);
+
+ /** Wait till callback is complete. Simply keep the parent thread running
+ until our on_complete or on_error is invoked */
+ while (count < MAX_COUNT)
+ {
+ if (isComplete)
+ {
+ /* We are done with the callback */
+ break;
+ }
+
+/* AXIS2_SLEEP(1); */
+ count++;
+ }
+
+ if (!(count < MAX_COUNT))
+ {
+ printf("\necho client invoke FAILED. Counter timed out.\n");
+ }
+
+ if (svc_client)
+ {
+ AXIS2_SLEEP(1);
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+}
+
+axis2_status_t AXIS2_CALL
+echo_callback_on_complete(
+ struct axis2_callback * callback,
+ const axutil_env_t * env)
+{
+
+ /** SOAP response has arrived here; get the soap envelope
+ from the callback object and do whatever you want to do with it */
+
+ axiom_soap_envelope_t *soap_envelope = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+
+ soap_envelope = axis2_callback_get_envelope(callback, env);
+
+ if (!soap_envelope)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("echo stub invoke FAILED!\n");
+ status = AXIS2_FAILURE;
+ }
+ else
+ {
+ ret_node = axiom_soap_envelope_get_base_node(soap_envelope, env);
+
+ if (!ret_node)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("echo stub invoke FAILED!\n");
+ status = AXIS2_FAILURE;
+ }
+ else
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = axiom_node_to_string(ret_node, env);
+ if (om_str)
+ printf("\nReceived OM : %s\n", om_str);
+ printf("\necho client invoke SUCCESSFUL!\n");
+ }
+ }
+ isComplete = 1;
+ return status;
+}
+
+axis2_status_t AXIS2_CALL
+echo_callback_on_error(
+ struct axis2_callback * callback,
+ const axutil_env_t * env,
+ int exception)
+{
+
+ /** take necessary action on error */
+ printf("\nEcho client invoke FAILED. Error code:%d ::%s", exception,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ isComplete = 1;
+ return AXIS2_SUCCESS;
+}
Added: webservices/axis2/trunk/c/samples/client/amqp/mtom/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/mtom/Makefile.am?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/mtom/Makefile.am (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/mtom/Makefile.am Wed Nov 19 22:28:35 2008
@@ -0,0 +1,18 @@
+SUBDIRS = resources
+
+prgbindir = $(prefix)/bin/samples/amqp
+
+prgbin_PROGRAMS = mtom
+
+mtom_SOURCES = mtom_client.c
+
+mtom_LDADD = $(LDFLAGS) \
+ -L$(AXIS2C_HOME)/lib \
+ -laxutil \
+ -laxis2_axiom \
+ -laxis2_engine \
+ -laxis2_parser \
+ -lpthread \
+ $(GUTHTHILA_LIBS)
+
+INCLUDES = @AXIS2INC@
Added: webservices/axis2/trunk/c/samples/client/amqp/mtom/mtom_client.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/mtom/mtom_client.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/mtom/mtom_client.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/mtom/mtom_client.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,259 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *build_om_programatically(
+ const axutil_env_t * env,
+ const axis2_char_t * image_name,
+ const axis2_char_t * to_save_name,
+ axis2_bool_t optimized);
+
+int
+process_response_node(
+ const axutil_env_t * env,
+ axiom_node_t *node,
+ const axis2_char_t * to_save_name);
+
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+ const axis2_char_t *image_name = "resources/axis2.jpg";
+ const axis2_char_t *to_save_name = "test.jpg";
+ axis2_bool_t optimized = AXIS2_TRUE;
+
+ /* Set up the environment */
+ env = axutil_env_create_all("mtom_amqp.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of mtom service */
+ address = "amqp://localhost:5672/axis2/services/mtom";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf
+ ("Usage : %s [endpoint_url] [image_name] [to_save_name] [do_not_optimize]\n",
+ argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ if (argc > 2)
+ image_name = argv[2];
+ if (argc > 3)
+ to_save_name = argv[3];
+ if (argc > 4)
+ optimized = AXIS2_FALSE;
+
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_action(options, env,
+ "http://ws.apache.org/axis2/c/samples/mtomSample");
+
+ axis2_options_set_soap_version(options, env, AXIOM_SOAP11);
+
+ if(optimized)
+ {
+ axis2_options_set_enable_mtom(options, env, AXIS2_TRUE);
+ }
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ /* Engage addressing module */
+ axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
+
+ /* Build the SOAP request message payload using OM API. */
+ payload =
+ build_om_programatically(env, image_name, to_save_name, optimized);
+
+ /* Send request */
+ ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+ if (ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = axiom_node_to_string(ret_node, env);
+ if (om_str)
+ {
+ if (axis2_svc_client_get_last_response_has_fault(svc_client, env) == AXIS2_TRUE)
+ {
+ printf("\nRecieved Fault : %s\n", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ }
+ else
+ {
+ printf("\nReceived OM : %s\n", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ printf("\nmtom client invoke SUCCESSFUL!\n");
+ process_response_node(env, ret_node, to_save_name);
+ }
+ }
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("\nmtom client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+
+}
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_programatically(
+ const axutil_env_t * env,
+ const axis2_char_t * image_name,
+ const axis2_char_t * to_save_name,
+ axis2_bool_t optimized)
+{
+ axiom_node_t *mtom_om_node = NULL;
+ axiom_element_t *mtom_om_ele = NULL;
+ axiom_node_t *image_om_node = NULL;
+ axiom_element_t *image_om_ele = NULL;
+ axiom_node_t *file_om_node = NULL;
+ axiom_element_t *file_om_ele = NULL;
+ axiom_node_t *data_om_node = NULL;
+ axiom_text_t *data_text = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ axiom_data_handler_t *data_handler = NULL;
+
+ ns1 =
+ axiom_namespace_create(env, "http://ws.apache.org/axis2/c/samples/mtom",
+ "ns1");
+ mtom_om_ele =
+ axiom_element_create(env, NULL, "mtomSample", ns1, &mtom_om_node);
+
+ file_om_ele =
+ axiom_element_create(env, mtom_om_node, "fileName", ns1, &file_om_node);
+ axiom_element_set_text(file_om_ele, env, to_save_name, file_om_node);
+
+ image_om_ele =
+ axiom_element_create(env, mtom_om_node, "image", ns1, &image_om_node);
+
+ data_handler = axiom_data_handler_create(env, image_name, "image/jpeg");
+ data_text =
+ axiom_text_create_with_data_handler(env, image_om_node, data_handler,
+ &data_om_node);
+ axiom_text_set_optimize(data_text, env, optimized);
+ om_str = axiom_node_to_string(mtom_om_node, env);
+ if (om_str)
+ {
+ printf("%s", om_str);
+ AXIS2_FREE(env->allocator, om_str);
+ }
+ return mtom_om_node;
+}
+
+
+int
+process_response_node(
+ const axutil_env_t * env,
+ axiom_node_t *node,
+ const axis2_char_t * to_save_name)
+{
+ axiom_node_t *res_om_node = NULL;
+ axiom_element_t *res_om_ele = NULL;
+ res_om_node = axiom_node_get_first_child(node, env);
+
+ if(axiom_node_get_node_type(res_om_node, env) == AXIOM_TEXT)
+ {/** received mtom atttachment */
+ axiom_data_handler_t *data_handler = NULL;
+ axiom_text_t *axiom_text = (axiom_text_t*)axiom_node_get_data_element(res_om_node, env);
+ data_handler = axiom_text_get_data_handler(axiom_text, env);
+
+ /*axiom_data_handler_set_file_name(data_handler, env, (axis2_char_t *)to_save_name);*/
+ if(axiom_data_handler_get_cached(data_handler, env))
+ {
+ printf("Attachment is cached.\n");
+ }
+ else
+ {
+ axiom_data_handler_set_file_name(data_handler, env, "test");
+ axiom_data_handler_write_to(data_handler, env);
+ }
+ }else if(axiom_node_get_node_type(res_om_node, env) == AXIOM_ELEMENT){
+ res_om_ele = axiom_node_get_data_element(res_om_node, env);
+ printf("Base64 String received \n\n\n %s \n\n", axiom_element_get_text(res_om_ele, env, res_om_node));
+ }
+
+ return 0;
+}
+
+
Added: webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/Makefile.am?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/Makefile.am (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/Makefile.am Wed Nov 19 22:28:35 2008
@@ -0,0 +1,5 @@
+samplesdir = $(prefix)/bin/samples/amqp/resources
+
+samples_DATA = axis2.jpg
+
+EXTRA_DIST = axis2.jpg
Added: webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/axis2.jpg
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/axis2.jpg?rev=719179&view=auto
==============================================================================
Binary file - no diff available.
Propchange: webservices/axis2/trunk/c/samples/client/amqp/mtom/resources/axis2.jpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: webservices/axis2/trunk/c/samples/client/amqp/notify/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/notify/Makefile.am?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/notify/Makefile.am (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/notify/Makefile.am Wed Nov 19 22:28:35 2008
@@ -0,0 +1,15 @@
+prgbindir = $(prefix)/bin/samples/amqp
+
+prgbin_PROGRAMS = notify
+
+notify_SOURCES = notify_client.c
+
+notify_LDADD = -L$(AXIS2C_HOME)/lib \
+ -laxutil \
+ -laxis2_axiom \
+ -laxis2_engine \
+ -laxis2_parser \
+ -lpthread \
+ $(GUTHTHILA_LIBS)
+
+INCLUDES = @AXIS2INC@
Added: webservices/axis2/trunk/c/samples/client/amqp/notify/notify_client.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/amqp/notify/notify_client.c?rev=719179&view=auto
==============================================================================
--- webservices/axis2/trunk/c/samples/client/amqp/notify/notify_client.c (added)
+++ webservices/axis2/trunk/c/samples/client/amqp/notify/notify_client.c Wed Nov 19 22:28:35 2008
@@ -0,0 +1,152 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *build_om_programatically(
+ const axutil_env_t * env);
+
+int
+main(
+ int argc,
+ char **argv)
+{
+ const axutil_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t *endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ const axis2_char_t *client_home = NULL;
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+
+ /* Set up the environment */
+ env = axutil_env_create_all("notify_amqp.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "amqp://localhost:5672/axis2/services/notify";
+ if (argc > 1)
+ address = argv[1];
+ if (axutil_strcmp(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_options_set_action(options, env, "http://example.org/action/notify");
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home || !strcmp(client_home, ""))
+ client_home = "../..";
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf
+ ("Error creating service client, Please check AXIS2C_HOME again\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return -1;
+ }
+
+ /* Set service client options */
+ axis2_svc_client_set_options(svc_client, env, options);
+
+ /* Engage addressing module */
+ axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
+
+ /* Build the SOAP request message payload using OM API. */
+ payload = build_om_programatically(env);
+
+ /* Send request */
+ status = axis2_svc_client_send_robust(svc_client, env, payload);
+
+ if (status == AXIS2_SUCCESS)
+ {
+ printf("\nnotify client invoke SUCCESSFUL!\n");
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Stub invoke FAILED: Error code:" " %d :: %s",
+ env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("notify client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ axis2_svc_client_free(svc_client, env);
+ svc_client = NULL;
+ }
+
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
+
+ return 0;
+}
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_programatically(
+ const axutil_env_t * env)
+{
+ axiom_node_t *notify_om_node = NULL;
+ axiom_element_t *notify_om_ele = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *buffer = NULL;
+
+ ns1 = axiom_namespace_create(env, "http://example.org/notify", "m");
+ notify_om_ele =
+ axiom_element_create(env, NULL, "notify", ns1, ¬ify_om_node);
+ axiom_element_set_text(notify_om_ele, env, "notify5", notify_om_node);
+
+ buffer = axiom_node_to_string(notify_om_node, env);
+ if (buffer)
+ {
+ printf("\nSending OM node in XML : %s \n", buffer);
+ AXIS2_FREE(env->allocator, buffer);
+ }
+
+ return notify_om_node;
+}
Modified: webservices/axis2/trunk/c/samples/configure.ac
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/configure.ac?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/samples/configure.ac (original)
+++ webservices/axis2/trunk/c/samples/configure.ac Wed Nov 19 22:28:35 2008
@@ -137,6 +137,9 @@
client/yahoo/Makefile \
client/amqp/Makefile \
client/amqp/echo/Makefile \
+ client/amqp/notify/Makefile \
+ client/amqp/mtom/Makefile \
+ client/amqp/mtom/resources/Makefile \
user_guide/Makefile \
user_guide/clients/Makefile
])
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/Makefile.am?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/Makefile.am (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/Makefile.am Wed Nov 19 22:28:35 2008
@@ -13,6 +13,7 @@
INCLUDES = -I$(top_builddir)/include \
-I$(top_builddir)/src/core/transport/amqp/util \
-I$(top_builddir)/src/core/transport/amqp/receiver \
+ -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \
-I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \
-I$(top_builddir)/src/core/description \
-I$(top_builddir)/src/core/context \
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.c?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.c (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.c Wed Nov 19 22:28:35 2008
@@ -16,6 +16,7 @@
*/
#include <axis2_amqp_util.h>
+#include <axis2_amqp_defines.h>
#include <axis2_amqp_receiver.h>
static const axis2_transport_receiver_ops_t amqp_receiver_ops = {
@@ -28,11 +29,12 @@
axis2_amqp_receiver_free};
-axis2_transport_receiver_t* AXIS2_CALL
-axis2_amqp_receiver_create (const axutil_env_t* env,
- const axis2_char_t* repo,
- const axis2_char_t* qpid_broker_ip,
- int qpid_broker_port)
+AXIS2_EXTERN axis2_transport_receiver_t* AXIS2_CALL
+axis2_amqp_receiver_create(
+ const axutil_env_t* env,
+ const axis2_char_t* repo,
+ const axis2_char_t* qpid_broker_ip,
+ int qpid_broker_port)
{
AXIS2_ENV_CHECK (env, NULL);
@@ -40,11 +42,11 @@
receiver_resource_pack = (axis2_amqp_receiver_resource_pack_t*)
AXIS2_MALLOC(env->allocator,
- sizeof (axis2_amqp_receiver_resource_pack_t));
+ sizeof(axis2_amqp_receiver_resource_pack_t));
if (!receiver_resource_pack)
{
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
@@ -52,26 +54,44 @@
receiver_resource_pack->qpid_receiver = NULL;
receiver_resource_pack->conf_ctx = NULL;
receiver_resource_pack->conf_ctx_private = NULL;
- receiver_resource_pack->qpid_broker_ip = qpid_broker_ip ? qpid_broker_ip :
- AXIS2_QPID_BROKER_IP;
- receiver_resource_pack->qpid_broker_port = (qpid_broker_port != -1) ?
- qpid_broker_port : AXIS2_QPID_BROKER_PORT;
if (repo)
{
/**
- * We first create a private conf ctx which is owned by this server
- * we only free this private conf context. We should never free the
- * receiver_impl->conf_ctx because it may be owned by any other object which
- * may lead to double free
+ * 1. We first create a private conf ctx which is owned by this server
+ * we only free this private conf context. We should never free the
+ * receiver_impl->conf_ctx because it may be owned by any other object which
+ * may lead to double free.
+ *
+ * 2. The Qpid broker IP and port are set in conf_ctx at two different places.
+ * If the repo is specified, they are set here. Otherwise, they are set
+ * in axis2_amqp_receiver_init method.
*/
- receiver_resource_pack->conf_ctx_private = axis2_build_conf_ctx (env, repo);
+ axutil_property_t* property = NULL;
+ const axis2_char_t* broker_ip = NULL;
+ int* broker_port = (int*)AXIS2_MALLOC(env->allocator, sizeof(int));
+ *broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT;
+
+ receiver_resource_pack->conf_ctx_private = axis2_build_conf_ctx(env, repo);
if (!receiver_resource_pack->conf_ctx_private)
{
- axis2_amqp_receiver_free ((axis2_transport_receiver_t *)receiver_resource_pack, env);
+ axis2_amqp_receiver_free((axis2_transport_receiver_t *)receiver_resource_pack, env);
return NULL;
}
+ /* Set broker IP */
+ broker_ip = qpid_broker_ip ? qpid_broker_ip : AXIS2_QPID_DEFAULT_BROKER_IP;
+ property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, (void*)broker_ip);
+ axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx_private, env,
+ AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP, property);
+
+ /* Set broker port */
+ *broker_port = (qpid_broker_port != AXIS2_QPID_NULL_BROKER_PORT) ?
+ qpid_broker_port : AXIS2_QPID_DEFAULT_BROKER_PORT;
+ property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, (void*)broker_port);
+ axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx_private, env,
+ AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT, property);
+
receiver_resource_pack->conf_ctx = receiver_resource_pack->conf_ctx_private;
}
@@ -79,117 +99,141 @@
}
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_init (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- axis2_transport_in_desc_t* in_desc)
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_init(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx,
+ axis2_transport_in_desc_t* in_desc)
{
- AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
axis2_amqp_receiver_resource_pack_t* receiver_resource_pack = NULL;
+ axutil_property_t* property = NULL;
+ const axis2_char_t* broker_ip = NULL;
+ int* broker_port = (int*)AXIS2_MALLOC(env->allocator, sizeof(int));
+ *broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT;
- receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK (receiver);
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver);
receiver_resource_pack->conf_ctx = conf_ctx;
- receiver_resource_pack->qpid_broker_ip = axis2_amqp_util_get_conf_value_string (in_desc,
- env,
- AXIS2_AMQP_CONF_QPID_BROKER_IP);
- receiver_resource_pack->qpid_broker_port = axis2_amqp_util_get_conf_value_int (in_desc,
- env,
- AXIS2_AMQP_CONF_QPID_BROKER_PORT);
+
+ /* Set broker IP */
+ broker_ip = axis2_amqp_util_get_conf_value_string(in_desc, env, AXIS2_AMQP_CONF_QPID_BROKER_IP);
+ if (!broker_ip)
+ {
+ broker_ip = AXIS2_QPID_DEFAULT_BROKER_IP;
+ }
+ property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, (void*)broker_ip);
+ axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx, env,
+ AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP, property);
+
+ /* Set broker port */
+ *broker_port = axis2_amqp_util_get_conf_value_int(in_desc, env, AXIS2_AMQP_CONF_QPID_BROKER_PORT);
+ if (!broker_port)
+ {
+ *broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT;
+ }
+ property = axutil_property_create_with_args(env, AXIS2_SCOPE_APPLICATION, 0, 0, (void*)broker_port);
+ axis2_conf_ctx_set_property(receiver_resource_pack->conf_ctx, env,
+ AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT, property);
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_start (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_start(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env)
{
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
axis2_status_t status = AXIS2_FAILURE;
axis2_amqp_receiver_resource_pack_t* amqp_receiver_resource_pack = NULL;
axis2_qpid_receiver_resource_pack_t* qpid_receiver_resource_pack = NULL;
-
- amqp_receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK (receiver);
+
+ amqp_receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver);
/* Create Qpid Receiver */
- qpid_receiver_resource_pack = axis2_qpid_receiver_create (env,
- amqp_receiver_resource_pack->conf_ctx,
- amqp_receiver_resource_pack->qpid_broker_ip,
- amqp_receiver_resource_pack->qpid_broker_port);
+ qpid_receiver_resource_pack = axis2_qpid_receiver_create(env,
+ amqp_receiver_resource_pack->conf_ctx);
+
if (qpid_receiver_resource_pack)
{
amqp_receiver_resource_pack->qpid_receiver = qpid_receiver_resource_pack;
- status = axis2_qpid_receiver_start (qpid_receiver_resource_pack, env);
+ status = axis2_qpid_receiver_start(qpid_receiver_resource_pack, env);
}
return status;
}
-axis2_endpoint_ref_t* AXIS2_CALL
-axis2_amqp_receiver_get_reply_to_epr (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env,
- const axis2_char_t* svc_name)
+AXIS2_EXTERN axis2_endpoint_ref_t* AXIS2_CALL
+axis2_amqp_receiver_get_reply_to_epr(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env,
+ const axis2_char_t* svc_name)
{
return NULL;
}
-axis2_conf_ctx_t* AXIS2_CALL
-axis2_amqp_receiver_get_conf_ctx (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_conf_ctx_t* AXIS2_CALL
+axis2_amqp_receiver_get_conf_ctx(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env)
{
- AXIS2_ENV_CHECK (env, NULL);
+ AXIS2_ENV_CHECK(env, NULL);
- return AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK (receiver)->conf_ctx;
+ return AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver)->conf_ctx;
}
-axis2_bool_t AXIS2_CALL
-axis2_amqp_receiver_is_running (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_amqp_receiver_is_running(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env)
{
return AXIS2_TRUE;
}
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_stop (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_stop(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env)
{
return AXIS2_SUCCESS;
}
-void AXIS2_CALL
-axis2_amqp_receiver_free (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env)
+AXIS2_EXTERN void AXIS2_CALL
+axis2_amqp_receiver_free(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env)
{
- AXIS2_ENV_CHECK (env, void);
+ AXIS2_ENV_CHECK(env, void);
axis2_amqp_receiver_resource_pack_t* receiver_resource_pack = NULL;
- receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK (receiver);
+ receiver_resource_pack = AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(receiver);
if (receiver_resource_pack->qpid_receiver)
{
- axis2_qpid_receiver_free (receiver_resource_pack->qpid_receiver, env);
+ axis2_qpid_receiver_free(receiver_resource_pack->qpid_receiver, env);
receiver_resource_pack->qpid_receiver = NULL;
}
if (receiver_resource_pack->conf_ctx_private)
{
- axis2_conf_ctx_free (receiver_resource_pack->conf_ctx_private, env);
+ axis2_conf_ctx_free(receiver_resource_pack->conf_ctx_private, env);
receiver_resource_pack->conf_ctx_private = NULL;
}
receiver_resource_pack->conf_ctx = NULL; /* Do not free this. It may be owned by some other object */
-
- AXIS2_FREE (env->allocator, receiver_resource_pack);
+
+ AXIS2_FREE(env->allocator, receiver_resource_pack);
}
@@ -197,16 +241,16 @@
AXIS2_EXPORT int
#ifndef AXIS2_STATIC_DEPLOY
-axis2_get_instance (
+axis2_get_instance(
#else
-axis2_amqp_receiver_get_instance (
+axis2_amqp_receiver_get_instance(
#endif
struct axis2_transport_receiver** inst,
- const axutil_env_t* env)
+ const axutil_env_t* env)
{
int status = AXIS2_SUCCESS;
- *inst = axis2_amqp_receiver_create (env, NULL, NULL, -1);
+ *inst = axis2_amqp_receiver_create(env, NULL, NULL, AXIS2_QPID_NULL_BROKER_PORT);
if (!(*inst))
{
status = AXIS2_FAILURE;
@@ -218,16 +262,16 @@
AXIS2_EXPORT int
#ifndef AXIS2_STATIC_DEPLOY
-axis2_remove_instance (
+axis2_remove_instance(
#else
-axis2_amqp_receiver_remove_instance (
+axis2_amqp_receiver_remove_instance(
#endif
axis2_transport_receiver_t* inst,
- const axutil_env_t* env)
+ const axutil_env_t* env)
{
if (inst)
{
- axis2_transport_receiver_free (inst, env);
+ axis2_transport_receiver_free(inst, env);
}
return AXIS2_SUCCESS;
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.h?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.h (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/axis2_amqp_receiver.h Wed Nov 19 22:28:35 2008
@@ -22,60 +22,61 @@
#include <axis2_conf_init.h>
#include <axis2_qpid_receiver_interface.h>
-#define AXIS2_AMQP_CONF_QPID_BROKER_IP "qpid_broker_ip"
-#define AXIS2_AMQP_CONF_QPID_BROKER_PORT "qpid_broker_port"
-#define AXIS2_QPID_BROKER_IP "127.0.0.1"
-#define AXIS2_QPID_BROKER_PORT 5672
-
typedef struct axis2_amqp_receiver_resource_pack
{
axis2_transport_receiver_t receiver;
axis2_qpid_receiver_resource_pack_t* qpid_receiver;
axis2_conf_ctx_t* conf_ctx;
axis2_conf_ctx_t* conf_ctx_private;
- const axis2_char_t* qpid_broker_ip;
- int qpid_broker_port;
}
axis2_amqp_receiver_resource_pack_t;
#define AXIS2_AMQP_RECEIVER_TO_RESOURCE_PACK(amqp_receiver) \
((axis2_amqp_receiver_resource_pack_t*)(amqp_receiver))
-axis2_transport_receiver_t* AXIS2_CALL
-axis2_amqp_receiver_create (const axutil_env_t* env,
- const axis2_char_t* repo,
- const axis2_char_t* qpid_broker_ip,
- int qpid_broker_port);
-
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_init (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- axis2_transport_in_desc_t* in_desc);
-
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_start (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env);
-
-axis2_endpoint_ref_t* AXIS2_CALL
-axis2_amqp_receiver_get_reply_to_epr (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env,
- const axis2_char_t* svc_name);
-
-axis2_conf_ctx_t* AXIS2_CALL
-axis2_amqp_receiver_get_conf_ctx (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env);
-
-axis2_bool_t AXIS2_CALL
-axis2_amqp_receiver_is_running (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env);
-
-axis2_status_t AXIS2_CALL
-axis2_amqp_receiver_stop (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env);
-
-void AXIS2_CALL
-axis2_amqp_receiver_free (axis2_transport_receiver_t* receiver,
- const axutil_env_t* env);
+AXIS2_EXTERN axis2_transport_receiver_t* AXIS2_CALL
+axis2_amqp_receiver_create(
+ const axutil_env_t* env,
+ const axis2_char_t* repo,
+ const axis2_char_t* qpid_broker_ip,
+ int qpid_broker_port);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_init(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx,
+ axis2_transport_in_desc_t* in_desc);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_start(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env);
+
+AXIS2_EXTERN axis2_endpoint_ref_t* AXIS2_CALL
+axis2_amqp_receiver_get_reply_to_epr(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env,
+ const axis2_char_t* svc_name);
+
+AXIS2_EXTERN axis2_conf_ctx_t* AXIS2_CALL
+axis2_amqp_receiver_get_conf_ctx(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env);
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_amqp_receiver_is_running(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_amqp_receiver_stop(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env);
+
+AXIS2_EXTERN void AXIS2_CALL
+axis2_amqp_receiver_free(
+ axis2_transport_receiver_t* receiver,
+ const axutil_env_t* env);
#endif
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/Makefile.am Wed Nov 19 22:28:35 2008
@@ -3,10 +3,12 @@
lib_LTLIBRARIES = libaxis2_qpid_receiver.la
libaxis2_qpid_receiver_la_SOURCES = axis2_qpid_receiver.cpp \
- axis2_qpid_receiver_interface.cpp
+ axis2_qpid_receiver_interface.cpp \
+ axis2_qpid_receiver_listener.cpp
libaxis2_qpid_receiver_la_LIBADD = $(top_builddir)/util/src/libaxutil.la \
$(QPID_HOME)/lib/libqpidclient.la \
+ $(top_builddir)/src/core/transport/amqp/util/libaxis2_amqp_util.la \
$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/request_processor/libaxis2_amqp_request_processor.la
libaxis2_qpid_receiver_la_LDFLAGS = g++ -version-info $(VERSION_NO)
@@ -15,6 +17,7 @@
-I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver \
-I$(top_builddir)/src/core/transport/amqp/receiver/qpid_receiver/request_processor \
-I$(top_builddir)/src/core/transport/amqp/util \
+ -I$(top_builddir)/src/core/transport/amqp/sender/qpid_sender \
-I$(top_builddir)/src/core/description \
-I$(top_builddir)/src/core/context \
-I$(top_builddir)/src/core/phaseresolver \
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.cpp Wed Nov 19 22:28:35 2008
@@ -15,179 +15,152 @@
* limitations under the License.
*/
+#include <qpid/client/Connection.h>
+#include <qpid/client/Session.h>
+#include <qpid/client/SubscriptionManager.h>
#include <axis2_amqp_request_processor.h>
#include <axis2_amqp_defines.h>
+#include <axis2_amqp_util.h>
+#include <axis2_qpid_receiver_listener.h>
#include <axis2_qpid_receiver.h>
+#include <list>
-#define AXIS2_AMQP_RECEIVER_QUEUE_NAME "axis2.amqp.receiver.queue"
-
-Axis2QpidReceiver::Axis2QpidReceiver (const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- string qpidBrokerIP,
- int qpidBrokerPort)
+Axis2QpidReceiver::Axis2QpidReceiver(const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx)
{
this->env = env;
this->conf_ctx = conf_ctx;
- this->qpidBrokerIP = qpidBrokerIP;
- this->qpidBrokerPort = qpidBrokerPort;
- this->dispatcher = NULL;
}
-Axis2QpidReceiver::~Axis2QpidReceiver (void)
-{
- if (dispatcher)
- delete dispatcher;
-}
+Axis2QpidReceiver::~Axis2QpidReceiver(void)
+{}
-bool Axis2QpidReceiver::start (void)
+bool Axis2QpidReceiver::start(void)
{
- bool status = false;
+ if (!conf_ctx)
+ return false;
+
+ Connection connection;
+ axis2_bool_t serverSide = AXIS2_TRUE;
+
+ serverSide = axis2_amqp_util_conf_ctx_get_server_side(conf_ctx, env);
while (true)
{
try
{
- /* Create Connection to Qpid Broker */
- std::cout << "Connecting to Qpid Broker on " << qpidBrokerIP
- << ":" << qpidBrokerPort << " ... ";
+ std::list<string> queueNameList;
+ string qpidBrokerIP = axis2_amqp_util_conf_ctx_get_qpid_broker_ip(
+ conf_ctx, env);
+ int qpidBrokerPort = axis2_amqp_util_conf_ctx_get_qpid_broker_port(
+ conf_ctx, env);
- connection.open (qpidBrokerIP, qpidBrokerPort);
-
- session = connection.newSession ();
-
- string request_queue = AXIS2_AMQP_RECEIVER_QUEUE_NAME;
+ /* Check if Client Side and Resolve Dynamic Queue Name */
+ if (serverSide == AXIS2_TRUE) /* Server side */
+ {
+ std::cout << "Connecting to Qpid Broker on " << qpidBrokerIP
+ << ":" << qpidBrokerPort << " ... ";
+ }
- session.queueDeclare (arg::queue = request_queue);
- session.exchangeBind (arg::exchange = AXIS2_AMQP_EXCHANGE_DIRECT,
- arg::queue = request_queue,
- arg::bindingKey = AXIS2_AMQP_RECEIVER_QUEUE_BIND_KEY);
+ /* Create Connection to Qpid Broker */
+ connection.open(qpidBrokerIP, qpidBrokerPort);
+
+ if (serverSide == AXIS2_TRUE) /* Server side */
+ {
+ /* Create queue for each service. Queue name is equal to service name */
+ axis2_conf_t* conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+ if (!conf)
+ return false;
+
+ axutil_hash_t* serviceMap = axis2_conf_get_all_svcs(conf, env);
+ if (!serviceMap)
+ return false;
+
+ axutil_hash_index_t* serviceHI = NULL;
+ void* serviceValue = NULL;
+
+ for (serviceHI = axutil_hash_first(serviceMap, env);
+ serviceHI; serviceHI = axutil_hash_next(env, serviceHI))
+ {
+ axutil_hash_this(serviceHI, NULL, NULL, &serviceValue);
+
+ axis2_svc_t* service = (axis2_svc_t*)serviceValue;
+ if (!service)
+ return false;
+
+ axis2_char_t* serviceName = axutil_qname_get_localpart(
+ axis2_svc_get_qname(service, env), env);
+ if (!serviceName)
+ return false;
+
+ queueNameList.push_back(serviceName);
+ }
+
+ std::cout << "CONNECTED" << std::endl;
+ }
+ else /* Client side separate listener in dual-channel case */
+ {
+ string queueName = axis2_amqp_util_conf_ctx_get_dual_channel_queue_name(
+ conf_ctx, env);
- /* Create Dispatcher */
- dispatcher = new Dispatcher (session);
+ queueNameList.push_back(queueName);
+ }
+
+ /* Create new session */
+ Session session = connection.newSession();
- status = true;
+ /* Create Subscription manager */
+ SubscriptionManager subscriptionManager(session);
+
+ Axis2QpidReceiverListener qpidReceiverListener(env, conf_ctx);
- std::cout << "CONNECTED" << std::endl;
+ /* Subscribe to queues */
+ while (!queueNameList.empty())
+ {
+ string queueName = queueNameList.front();
+
+ session.queueDeclare(arg::queue = queueName, arg::autoDelete = true);
+ session.exchangeBind(arg::exchange = AXIS2_AMQP_EXCHANGE_DIRECT,
+ arg::queue = queueName,
+ arg::bindingKey = queueName);
+
+ subscriptionManager.subscribe(qpidReceiverListener, queueName);
+
+ queueNameList.pop_front();
+ }
+
+ /* Listen and Wait */
+ if (serverSide == AXIS2_TRUE) /* Server side */
+ {
+ std::cout << "Started Axis2 AMQP Server ..." << std::endl;
+ }
+
+ subscriptionManager.run();
- break;
+ return true;
}
catch (const std::exception& e)
{
- std::cout << "FAILED" << std::endl;
- connection.close ();
+ connection.close();
+
+ if (serverSide == AXIS2_TRUE) /* Server side */
+ {
+ std::cout << "FAILED" << std::endl;
+ }
- sleep (5);
+ sleep(5);
}
}
- /* Listen and Wait */
- if (status)
- {
- std::cout << "Started Axis2 AMQP Server ..." << std::endl;
-
- listen ();
- wait ();
- }
+ connection.close();
- return status;
+ return false;
}
-bool Axis2QpidReceiver::shutdown (void)
+bool Axis2QpidReceiver::shutdown(void)
{
- connection.close ();
-
return true;
}
-
-
-void Axis2QpidReceiver::received (Message& message)
-{
- AXIS2_ENV_CHECK (env, void);
-
- axis2_amqp_request_processor_resource_pack_t* request_data = NULL;
-#ifdef AXIS2_SVR_MULTI_THREADED
- axutil_thread_t* worker_thread = NULL;
-#endif
-
- request_data = (axis2_amqp_request_processor_resource_pack_t*)
- AXIS2_MALLOC (env->allocator,
- sizeof (axis2_amqp_request_processor_resource_pack_t));
-
- if (!request_data)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Memory Allocation Error");
- return;
- }
-
- request_data->env = (axutil_env_t*)env;
- request_data->conf_ctx = conf_ctx;
-
- /* Create a Local Copy of Request Content */
- std::string message_data = message.getData ();
- axis2_char_t* request_content = (axis2_char_t*)AXIS2_MALLOC (env->allocator,
- message_data.size () + 1);
- strcpy (request_content, message_data.c_str ());
-
- request_data->request_content = request_content;
-
- /* Set ReplyTo */
- request_data->reply_to = NULL;
- if (message.getMessageProperties ().hasReplyTo ())
- {
- /* Create a Local Copy of ReplyTo */
- std::string reply_to_tmp = message.getMessageProperties ().getReplyTo ().getRoutingKey ();
- axis2_char_t* reply_to = (axis2_char_t*)AXIS2_MALLOC (env->allocator,
- reply_to_tmp.size () + 1);
- strcpy (reply_to, reply_to_tmp.c_str ());
-
- request_data->reply_to = reply_to;
- }
-
- /* Set Qpid Broker IP/Port */
- request_data->qpid_broker_ip = (axis2_char_t*)qpidBrokerIP.c_str ();
- request_data->qpid_broker_port = qpidBrokerPort;
-
-#ifdef AXIS2_SVR_MULTI_THREADED
- worker_thread = axutil_thread_pool_get_thread (env->thread_pool,
- axis2_amqp_request_processor_thread_function,
- (void*)request_data);
-
- if (!worker_thread)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Failed to Create Thread");
- return;
- }
-
- axutil_thread_pool_thread_detach (env->thread_pool, worker_thread);
-#else
- axis2_amqp_request_processor_thread_function (NULL, (void*)request_data);
-#endif
-}
-
-
-void Axis2QpidReceiver::listen (void)
-{
- if (!dispatcher)
- return;
-
- string request_queue = AXIS2_AMQP_RECEIVER_QUEUE_NAME;
-
- session.messageSubscribe (arg::queue = request_queue, arg::destination = request_queue);
-
- session.messageFlow (arg::destination = request_queue, arg::unit = MESSAGE_CREDIT, arg::value = 1);
- session.messageFlow (arg::destination = request_queue, arg::unit = BYTE_CREDIT, arg::value = UNLIMITED_CREDIT);
-
- dispatcher->listen (request_queue, this);
-}
-
-
-void Axis2QpidReceiver::wait (void)
-{
- if (!dispatcher)
- return;
-
- dispatcher->run ();
-}
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver.h Wed Nov 19 22:28:35 2008
@@ -18,44 +18,22 @@
#ifndef AXIS2_QPID_RECEIVER_H
#define AXIS2_QPID_RECEIVER_H
-#include <qpid/client/Connection.h>
-#include <qpid/client/Dispatcher.h>
-#include <qpid/client/Session.h>
-#include <qpid/client/Message.h>
-#include <qpid/client/MessageListener.h>
#include <axutil_env.h>
#include <axis2_conf_init.h>
-#include <string>
-
-using namespace qpid::client;
-using namespace qpid::framing;
-using std::string;
-
-class Axis2QpidReceiver : public MessageListener
+class Axis2QpidReceiver
{
public:
- Axis2QpidReceiver (const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- string qpidBrokerIP,
- int qpidBrokerPort);
- ~Axis2QpidReceiver (void);
+ Axis2QpidReceiver(const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx);
+ ~Axis2QpidReceiver(void);
- bool start (void);
- bool shutdown (void);
+ bool start(void);
+ bool shutdown(void);
private:
- virtual void received (Message& message);
- virtual void listen (void);
- virtual void wait (void);
-
- const axutil_env_t* env;
- axis2_conf_ctx_t* conf_ctx;
- string qpidBrokerIP;
- int qpidBrokerPort;
- Connection connection;
- Dispatcher* dispatcher;
- Session session;
+ const axutil_env_t* env;
+ axis2_conf_ctx_t* conf_ctx;
};
#endif
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.cpp Wed Nov 19 22:28:35 2008
@@ -23,30 +23,26 @@
{
#endif
-axis2_qpid_receiver_resource_pack_t* AXIS2_CALL
-axis2_qpid_receiver_create (const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- const axis2_char_t* qpid_broker_ip,
- int qpid_broker_port)
+AXIS2_EXTERN axis2_qpid_receiver_resource_pack_t* AXIS2_CALL
+axis2_qpid_receiver_create(
+ const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx)
{
- AXIS2_ENV_CHECK (env, NULL);
+ AXIS2_ENV_CHECK(env, NULL);
axis2_qpid_receiver_resource_pack_t* resource_pack = NULL;
resource_pack = (axis2_qpid_receiver_resource_pack_t*)AXIS2_MALLOC
- (env->allocator, sizeof (axis2_qpid_receiver_resource_pack_t));
+ (env->allocator, sizeof(axis2_qpid_receiver_resource_pack_t));
if (!resource_pack)
{
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
/* Create Qpid Receiver */
- Axis2QpidReceiver* qpid_receiver = new Axis2QpidReceiver(env,
- conf_ctx,
- qpid_broker_ip,
- qpid_broker_port);
+ Axis2QpidReceiver* qpid_receiver = new Axis2QpidReceiver(env, conf_ctx);
resource_pack->qpid_receiver = qpid_receiver;
@@ -54,18 +50,19 @@
}
-axis2_status_t AXIS2_CALL
-axis2_qpid_receiver_start (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_qpid_receiver_start(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env)
{
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
axis2_status_t status = AXIS2_FAILURE;
/* Start Qpid Receiver */
Axis2QpidReceiver* qpid_receiver = (Axis2QpidReceiver*)receiver_resource_pack->qpid_receiver;
- if ((qpid_receiver) && (qpid_receiver->start ()))
+ if ((qpid_receiver) && (qpid_receiver->start()))
{
status = AXIS2_SUCCESS;
}
@@ -74,19 +71,21 @@
}
-axis2_bool_t AXIS2_CALL
-axis2_qpid_receiver_is_running (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env)
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_qpid_receiver_is_running(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env)
{
return AXIS2_TRUE;
}
-void AXIS2_CALL
-axis2_qpid_receiver_free (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env)
+AXIS2_EXTERN void AXIS2_CALL
+axis2_qpid_receiver_free(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env)
{
- AXIS2_ENV_CHECK (env, void);
+ AXIS2_ENV_CHECK(env, void);
if (receiver_resource_pack)
{
@@ -94,7 +93,7 @@
if (qpid_receiver)
delete qpid_receiver;
- AXIS2_FREE (env->allocator, receiver_resource_pack);
+ AXIS2_FREE(env->allocator, receiver_resource_pack);
}
}
Modified: webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h?rev=719179&r1=719178&r2=719179&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h (original)
+++ webservices/axis2/trunk/c/src/core/transport/amqp/receiver/qpid_receiver/axis2_qpid_receiver_interface.h Wed Nov 19 22:28:35 2008
@@ -26,29 +26,30 @@
{
#endif
-typedef struct axis2_qpid_receiver_resource_pack
-{
- void* qpid_receiver;
-}
-axis2_qpid_receiver_resource_pack_t;
-
-axis2_qpid_receiver_resource_pack_t* AXIS2_CALL
-axis2_qpid_receiver_create (const axutil_env_t* env,
- axis2_conf_ctx_t* conf_ctx,
- const axis2_char_t* qpid_broker_ip,
- int qpid_broker_port);
-
-axis2_status_t AXIS2_CALL
-axis2_qpid_receiver_start (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env);
-
-axis2_bool_t AXIS2_CALL
-axis2_qpid_receiver_is_running (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env);
-
-void AXIS2_CALL
-axis2_qpid_receiver_free (axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
- const axutil_env_t* env);
+ typedef struct axis2_qpid_receiver_resource_pack
+ {
+ void* qpid_receiver;
+ }axis2_qpid_receiver_resource_pack_t;
+
+ AXIS2_EXTERN axis2_qpid_receiver_resource_pack_t* AXIS2_CALL
+ axis2_qpid_receiver_create(
+ const axutil_env_t* env,
+ axis2_conf_ctx_t* conf_ctx);
+
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axis2_qpid_receiver_start(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env);
+
+ AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+ axis2_qpid_receiver_is_running(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env);
+
+ AXIS2_EXTERN void AXIS2_CALL
+ axis2_qpid_receiver_free(
+ axis2_qpid_receiver_resource_pack_t* receiver_resource_pack,
+ const axutil_env_t* env);
#ifdef __cplusplus
}