diff options
Diffstat (limited to '')
6 files changed, 559 insertions, 0 deletions
diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/CalculatorWSClient.cpp b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/CalculatorWSClient.cpp new file mode 100644 index 0000000000..267baf1722 --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/CalculatorWSClient.cpp @@ -0,0 +1,186 @@ +/* + * 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. + */ + +/* $Rev$ $Date$ */ + +#include "axis2_Calculator_stub.h" +#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 axis2_env_t *env, + const axis2_char_t *operation, + const axis2_char_t *param1, + const axis2_char_t *param2); + +int main(int argc, char** argv) +{ + axis2_stub_t *stub = NULL; + axiom_node_t *node = NULL; + axis2_status_t status = AXIS2_FAILURE; + const axis2_env_t *env = NULL; + const axis2_char_t *address = NULL; + const axis2_char_t *client_home = NULL; + axiom_node_t *ret_node = NULL; + + const axis2_char_t *operation = "add"; + const axis2_char_t *param1 = "40"; + const axis2_char_t *param2 = "8"; + + env = axis2_env_create_all( "CalculatorService_blocking.log", AXIS2_LOG_LEVEL_TRACE); + + client_home = AXIS2_GETENV("AXIS2C_HOME"); + if (!client_home) + client_home = "../../deploy"; + + address = "http://localhost:9090/axis2/services/CalculatorService"; + if (argc > 1 ) + operation = argv[1]; + if (AXIS2_STRCMP(operation, "-h") == 0) + { + printf("Usage : %s [operation] [param1] [param2] [endpoint_url]\n", argv[0]); + printf("use -h for help\n"); + printf("default operation add\n"); + printf("default param1 %s\n", param1); + printf("default param2 %s\n", param2); + printf("default endpoint_url %s\n", address); + printf("NOTE: command line arguments must appear in given order, with trailing ones being optional\n"); + return 0; + } + if (argc > 2 ) + param1 = argv[2]; + if (argc > 3 ) + param2 = argv[3]; + if (argc > 4 ) + address = argv[4]; + + printf ("Using endpoint : %s\n", address); + printf ("\nInvoking operation %s with params %s and %s\n", operation, param1, param2); + + node = build_om_programatically(env, operation, param1, param2); + stub = + axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(env, address, client_home); + /* create node and invoke Calculator */ + ret_node = axis2_Calculator_stub_add(stub, env, node); + if(ret_node) + { + axis2_char_t *om_str = NULL; + om_str = AXIOM_NODE_TO_STRING(ret_node, env); + if(om_str) + { + printf("\nOM returned = %s\n", om_str); + } + + if (AXIOM_NODE_GET_NODE_TYPE(ret_node, env) == AXIOM_ELEMENT) + { + axis2_char_t *result = NULL; + axiom_node_t *result_node = (axiom_node_t*)AXIOM_NODE_GET_FIRST_CHILD(ret_node, env); + axiom_element_t *data_ele = (axiom_element_t*)AXIOM_NODE_GET_DATA_ELEMENT(result_node, env); + + result = AXIOM_ELEMENT_GET_TEXT(data_ele, env, result_node); + printf( "\nResult = %s\n", result); + } + else + { + axiom_xml_writer_t *writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create (env, writer); + + AXIOM_NODE_SERIALIZE (ret_node, env, om_output); + buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, env); + printf ("\nReceived invalid OM as result : %s\n", buffer); + if(NULL != buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + if(NULL != om_output) + { + AXIOM_OUTPUT_FREE(om_output, env); + om_output = NULL; + } + } + } + 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("Calculator stub invoke FAILED!\n"); + } + if (stub) + { + AXIS2_STUB_FREE(stub, env); + } + return status; +} + +axiom_node_t * +build_om_programatically(const axis2_env_t *env, + const axis2_char_t *operation, + const axis2_char_t *param1, + const axis2_char_t *param2) +{ + axiom_node_t *Calculator_om_node = NULL; + axiom_element_t* Calculator_om_ele = NULL; + axiom_node_t* text_om_node = NULL; + axiom_element_t * text_om_ele = NULL; + axiom_namespace_t *ns1 = NULL; + + + axiom_xml_writer_t *xml_writer = NULL; + axiom_output_t *om_output = NULL; + axis2_char_t *buffer = NULL; + + ns1 = axiom_namespace_create (env, "http://sample/calculator", "ns1"); + + Calculator_om_ele = axiom_element_create(env, NULL, operation, ns1, &Calculator_om_node); + + text_om_ele = axiom_element_create(env, Calculator_om_node, "param1", NULL, &text_om_node); + AXIOM_ELEMENT_SET_TEXT(text_om_ele, env, param1, text_om_node); + + text_om_ele = axiom_element_create(env, Calculator_om_node, "param2", NULL, &text_om_node); + AXIOM_ELEMENT_SET_TEXT(text_om_ele, env, param2, text_om_node); + + xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, + AXIS2_XML_PARSER_TYPE_BUFFER); + om_output = axiom_output_create( env, xml_writer); + + AXIOM_NODE_SERIALIZE(Calculator_om_node, env, om_output); + buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(xml_writer, env); + AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s \n", buffer); + if(NULL != buffer) + { + AXIS2_FREE(env->allocator, buffer); + buffer = NULL; + } + if(NULL != om_output) + { + AXIOM_OUTPUT_FREE(om_output, env); + om_output = NULL; + } + + return Calculator_om_node; +} diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/Makefile.am b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/Makefile.am new file mode 100644 index 0000000000..5d0af5df1f --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/Makefile.am @@ -0,0 +1,48 @@ +# 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. + +deploydir=$(prefix)/samples/Calculator/deploy +wsclientdir=$(deploydir)/sample.calculator.wsclient + +wsclient_PROGRAMS = calculator_wsclient +wsclient_SCRIPTS = runwsclient.sh +EXTRA_DIST = runwsclient.sh + +AM_CPPFLAGS = $(CPPFLAGS) + +calculator_wsclient_SOURCES = \ +axis2_Calculator_stub.cpp \ +CalculatorWSClient.cpp + +noinst_HEADERS = *.h + +calculator_wsclient_LDADD = \ +-L$(AXIS2C_HOME)/lib \ + -laxis2_util \ + -laxis2_axiom \ + -laxis2_wsdl \ + -laxis2_engine \ + -lwoden \ + -lwoden_wsdl \ + -laxis2_xml_schema \ + -laxis2_parser \ + -laxis2_minizip \ + -lpthread \ + -laxis2_http_sender \ + -laxis2_http_receiver + +INCLUDES = -I${AXIS2C_HOME}/include diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.cpp b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.cpp new file mode 100644 index 0000000000..a24a3c9ed6 --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.cpp @@ -0,0 +1,178 @@ +/* + * 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. + */ + +/* $Rev$ $Date$ */ + +#include "axis2_Calculator_stub.h" + + +axis2_stub_t * +axis2_Calculator_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env, + axis2_endpoint_ref_t *endpoint_ref, + axis2_char_t *client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref, + client_home); + if(NULL == stub) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE); + return NULL; + } + axis2_populate_axis_service( stub, env); + return stub; +} + +void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env) +{ + axis2_svc_client_t* svc_client = NULL; + axis2_qname_t *op_qname = NULL; + axis2_svc_t* svc = NULL; + axis2_op_t* op = NULL; + + /*Modifying the Service*/ + svc_client = AXIS2_STUB_GET_SVC_CLIENT (stub, env ); + svc = (axis2_svc_t*)AXIS2_SVC_CLIENT_GET_AXIS_SERVICE ( svc_client, env ); + + /*creating the operations*/ + + op_qname = axis2_qname_create(env,"add" , "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN); + AXIS2_SVC_ADD_OP(svc, env, op); + + op_qname = axis2_qname_create(env,"sub" , "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN); + AXIS2_SVC_ADD_OP(svc, env, op); + + op_qname = axis2_qname_create(env,"mul" , "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN); + AXIS2_SVC_ADD_OP(svc, env, op); + + op_qname = axis2_qname_create(env,"div" , "", NULL); + op = axis2_op_create_with_qname(env, op_qname); + AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN); + AXIS2_SVC_ADD_OP(svc, env, op); +} + +axis2_stub_t * +axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env, + const axis2_char_t *endpoint_uri, + const axis2_char_t *client_home) +{ + axis2_stub_t *stub = NULL; + + AXIS2_ENV_CHECK(env, NULL); + + stub = (axis2_stub_t *) + axis2_stub_create_with_endpoint_uri_and_client_home(env, endpoint_uri, + client_home); + if(NULL == stub) + { + AXIS2_ERROR_SET(env->error, + AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE); + return NULL; + } + + axis2_populate_axis_service( stub, env); + + return stub; +} + +/***************************Function implementation****************************/ + +axiom_node_t * +axis2_Calculator_stub_add(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axis2_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env); + op_qname = axis2_qname_create(env, "add" , "", NULL); + ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node); + + return ret_node; +} + +axiom_node_t * +axis2_Calculator_stub_sub(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axis2_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env); + op_qname = axis2_qname_create(env, "sub" , "", NULL); + ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node); + + return ret_node; +} + +axiom_node_t * +axis2_Calculator_stub_mul(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axis2_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env); + op_qname = axis2_qname_create(env, "mul" , "", NULL); + ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node); + + return ret_node; +} + +axiom_node_t * +axis2_Calculator_stub_div(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node) +{ + axis2_svc_client_t *svc_client = NULL; + axiom_node_t *ret_node = NULL; + axis2_qname_t *op_qname = NULL; + + AXIS2_ENV_CHECK(env, AXIS2_FAILURE); + + svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env); + op_qname = axis2_qname_create(env, "div" , "", NULL); + ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node); + + return ret_node; +} + diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.h b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.h new file mode 100644 index 0000000000..833c6f85c6 --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/axis2_Calculator_stub.h @@ -0,0 +1,85 @@ +/* + * 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. + */ + +/* $Rev$ $Date$ */ + +#ifndef AXIS2_ECHO_STUB_H +#define AXIS2_ECHO_STUB_H + +/** + * @file axis2_Calculator_stub.h + * @brief axis2 Calculator stub interface + */ + +#include <axis2_stub.h> + +#ifdef __cplusplus +extern "C" +{ +#endif + +axiom_node_t * +axis2_Calculator_stub_add(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node); + +axiom_node_t * +axis2_Calculator_stub_sub(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node); + +axiom_node_t * +axis2_Calculator_stub_mul(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node); + +axiom_node_t * +axis2_Calculator_stub_div(axis2_stub_t *stub, + const axis2_env_t *env, + axiom_node_t *node); +/** + * populate services + */ +void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env); + +/** + * Creates axis2_stub struct + * @param endpoint reference + * @return pointer to newly created axis2_stub struct + */ +axis2_stub_t * +axis2_Calculator_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env, + axis2_endpoint_ref_t *endpoint_ref, + axis2_char_t *client_home); + +/** + * Creates axis2_stub struct + * @param endpoint uri + * @return pointer to newly created axis2_stub struct + */ +axis2_stub_t * +axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env, + const axis2_char_t *endpoint_uri, + const axis2_char_t *client_home); +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* AXIS2_ECHO_STUB_H */ diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.bat b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.bat new file mode 100644 index 0000000000..6d50f23370 --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.bat @@ -0,0 +1,32 @@ +@echo off + +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. + +setlocal + +if "%AXIS2C_HOME%" == "" ( +echo "AXIS2C_HOME not set" +goto end +) +echo Using Axis2C installed at %AXIS2C_HOME%" + +rem Run the client +.\calculator_wsclient.exe div 5 2 + +:end +endlocal diff --git a/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.sh b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.sh new file mode 100755 index 0000000000..51d8dbac22 --- /dev/null +++ b/tags/cpp-1.0-incubating-M2-final/sca/samples/Calculator/sample.calculator.wsclient/runwsclient.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +# 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. + +APFULLDIR=`pwd` + +if [ x$AXIS2C_HOME = x ]; then +echo "AXIS2C_HOME not set" +exit; +fi +echo "Using Axis2C installed at $AXIS2C_HOME" + +export LD_LIBRARY_PATH=$AXIS2C_HOME/lib:$LD_LIBRARY_PATH + +./calculator_wsclient div 5 2 |