summaryrefslogtreecommitdiffstats
path: root/examples/csoap/csoap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/csoap/csoap.cpp')
-rw-r--r--examples/csoap/csoap.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/examples/csoap/csoap.cpp b/examples/csoap/csoap.cpp
new file mode 100644
index 0000000..289d77a
--- /dev/null
+++ b/examples/csoap/csoap.cpp
@@ -0,0 +1,113 @@
+// csoap.cpp : Defines the entry point for the console application.
+//
+
+/******************************************************************
+* $Id: csoap.cpp,v 1.1 2004/08/26 17:00:18 rans Exp $
+*
+* CSOAP Project: CSOAP examples project
+* Copyright (C) 2003 Ferhat Ayaz
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA
+*
+* Email: ayaz@jprogrammer.net
+******************************************************************/
+
+#include "stdafx.h"
+
+#include <libcsoap/soap-client.h>
+
+//static const char *url = "http://csoap.sourceforge.net/cgi-bin/csoapserver";
+
+static const char *url = "http://localhost:10000/csoapserver";
+static const char *urn = "urn:examples";
+static const char *method = "sayHello";
+
+/**
+* print_xpath_nodes:
+* @nodes: the nodes set.
+* @output: the output file handle.
+*
+* Prints the @nodes content to @output.
+*/
+void print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output) {
+ xmlNodePtr cur;
+ int size;
+ int i;
+
+ size = (nodes) ? nodes->nodeNr : 0;
+
+ fprintf(output, "Result (%d nodes):\n", size);
+ for(i = 0; i < size; ++i) {
+ if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
+ xmlNsPtr ns;
+
+ ns = (xmlNsPtr)nodes->nodeTab[i];
+ cur = (xmlNodePtr)ns->next;
+ if(cur->ns) {
+ fprintf(output, "= namespace \"%s\"=\"%s\" for node %s:%s\n",
+ ns->prefix, ns->href, cur->ns->href, cur->name);
+ } else {
+ fprintf(output, "= namespace \"%s\"=\"%s\" for node %s\n",
+ ns->prefix, ns->href, cur->name);
+ }
+ } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
+ cur = nodes->nodeTab[i];
+ if(cur->ns) {
+ fprintf(output, "= element node \"%s:%s\"\n",
+ cur->ns->href, cur->name);
+ } else {
+ fprintf(output, "= element node \"%s\"\n",
+ cur->name);
+ }
+ } else {
+ cur = nodes->nodeTab[i];
+ fprintf(output, "= node \"%s\": type %d\n", cur->name, cur->type);
+ }
+ }
+}
+
+int _tmain(int argc, _TCHAR* argv[])
+{
+ SoapEnv *env, *res;
+ xmlXPathObjectPtr xpathObj;
+// const char xpathExpr[]="//*";
+ const char xpathExpr[]="//Envelope/*";
+ log_set_level(HLOG_VERBOSE);
+
+ env = soap_env_new_with_method(urn, method);
+ soap_env_add_item(env, "xsd:string", "name", "Jonny B. Good");
+
+ if (argc > 1)
+ res = soap_client_invoke(env, argv[1], "");
+ else
+ res = soap_client_invoke(env, url, "");
+
+ xpathObj = soap_xpath_eval(res->root->doc,xpathExpr);
+ soap_env_get_body(env);
+ if(xpathObj!=NULL)
+ {
+ print_xpath_nodes(xpathObj->nodesetval, stdout);
+ }
+ soap_xml_doc_print(res->root->doc);
+
+ soap_env_free(res);
+ soap_env_free(env);
+ xmlXPathFreeObject(xpathObj);
+
+ printf("Press ENTER to Continue");
+ char c;
+ gets(&c);
+ return 0;
+} \ No newline at end of file