Re: Sending Struct is not working ?

"tgriesel78" <[email protected]> Tue, 01 Apr 2008 13:50:39 -0000
Newsgroups gmane.text.xml.rpc.specification
Message-ID <[email protected]>
Hi,

thanks for the reply. I used existing code - the one given in the
examples of xmlrpc. Unfortunable I was not able to find a C/C++
clients which meets my needs. So I tried to develop my own client
based on the simple client given in the examples ... 
It is still not working. The struct building is no working
correctly... any ideas ?

Cheers




--- In [email protected], Gaetano Giunta <giunta.gaetano@...> wrote:
>
> Sorry, why not start out with existing code? given the age of the spec, 
> there are a bazillion implementations ready...
> 
> >
> > Hi all,
> >
> > I am trying to implement an xmlrpc client into a given framework. I
> > have to use c/c++ for the developing the client. The struct to call
> > the server has to look like this:
> >
> > <struct>
> > <member>
> > <name>source_id</name>
> > <value>
> > <i4>3</i4>
> > </value>
> > </member>
> > <member>
> > <name>message</name>
> > <value>
> > <string>Your Message Here</string>
> > </value>
> > </member>
> > </struct>
> >
> > I wrote myself a client now which should - I believe so - send a
> > struct like that. It is not working ! To ensure that the server works
> > correctly, I build a python client - that just works fine. I do not
> > know why the c/c++ client is not working. I am on that since a week...
> > Any help or hint is highly appreciated !!!
> > This is my code:
> >
> > #include <stdlib.h>
> > #include <stdio.h>
> > #include <iostream.h>
> > #include <xmlrpc-c/base.h>
> > #include <xmlrpc-c/client.h>
> >
> > #include <xmlrpc-c/config.h>
> >
> > #define NAME "Xmlrpc-c Test Client"
> > #define VERSION "1.0"
> >
> > using namespace std;
> >
> > static void die_if_fault_occurred (xmlrpc_env * const envP) {
> >
> > if (envP->fault_occurred) {
> > fprintf(stderr, "XML-RPC Fault: %s (%d)\n",
> > envP->fault_string, envP->fault_code);
> > exit(1);
> > }
> > }
> >
> > int main (int argc, char **argv) {
> >
> > xmlrpc_env env;
> >
> > /* Strct members - server response */
> > xmlrpc_value * statusP;
> > statusP = xmlrpc_int_new(&env, 0);
> > xmlrpc_value * source_id_checkP;
> > source_id_checkP = xmlrpc_string_new(&env,"id check foo");
> > xmlrpc_value * transmit_okP;
> > transmit_okP = xmlrpc_string_new(&env, "transmit foo");
> > xmlrpc_value * original_messageP;
> > original_messageP = xmlrpc_string_new(&env, "message foo");
> > xmlrpc_value * lengthP;
> > lengthP = xmlrpc_int_new(&env, 0);
> > xmlrpc_value * status_textP;
> > status_textP = xmlrpc_string_new(&env, "text foo");
> > /* Strct */
> > xmlrpc_value * resultP;
> > resultP =
> >
xmlrpc_build_value(&env,"({%s:%d}{%s:%s}{%s:%s}{%s:%s}{%s:%d}{%s:%s})",
> > "status", &statusP,
> >
> > "source_id_check",&source_id_checkP,
> > "transmit_ok", &transmit_okP,
> > "original_message",
> > &original_messageP,
> > "length", &lengthP,
> > "status_text", &status_textP);
> >
> > /* Strct members - server call */
> > xmlrpc_value * mysrcidP;
> > mysrcidP = xmlrpc_int_new(&env, 3);
> > xmlrpc_value * mymsgP;
> > mymsgP = xmlrpc_string_new(&env, "My C SNEWS alarm msg");
> >
> > /* Strct */
> > xmlrpc_value * sendStrctP;
> > sendStrctP = xmlrpc_build_value(&env,"({%s:%d,%s:%s})",
> > "source_id:", &mysrcidP,
> > "message:", &mymsgP);
> > const char * const serverUrl = "http://its-b.icecube.wisc.edu:10878/ 
> > <http://its-b.icecube.wisc.edu:10878/>";
> > const char * const methodName = "sbd.test_submission";
> >
> > if (argc-1 > 0) {
> > fprintf(stderr, "This program has no arguments\n");
> > exit(1);
> > }
> >
> > /* Initialize our error-handling environment. */
> > xmlrpc_env_init(&env);
> >
> > /* Start up our XML-RPC client library. */
> > xmlrpc_client_init2(&env, XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION,
> > NULL, 0);
> > die_if_fault_occurred(&env);
> >
> > printf("Making XMLRPC call to server url '%s' method '%s' \t",
> > serverUrl, methodName);
> >
> > resultP = xmlrpc_client_call(&env, serverUrl,
> > methodName,"({s:i,s:s})" ,"source_id", mysrcidP, "message", mymsgP);
> > die_if_fault_occurred(&env);
> >
> > /* Dispose of our result value. */
> > xmlrpc_DECREF(resultP);
> > xmlrpc_DECREF(sendStrctP);
> >
> > /* Clean up our error-handling environment. */
> > xmlrpc_env_clean(&env);
> >
> > /* Shutdown our XML-RPC client library. */
> > xmlrpc_client_cleanup();
> >
> > return 0;
> > }
> >
> > this is the error I am getting:XML-RPC Fault: Invalid struct for
> > <fault> value. Value of type STRING supplied where type INT was
> > expected. (-503)
> > Making XMLRPC call to server url
> > 'http://its-b.icecube.wisc.edu:10878/ 
> > <http://its-b.icecube.wisc.edu:10878/>' method 'sbd.test_submission'
> >
> > I tried now nearly all combinations - I have no idea anymore...
> >
> > cheers
> >
> >  
> 
> 
> 
> [Non-text portions of this message have been removed]
>



------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/xml-rpc/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/xml-rpc/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[email protected] 
    mailto:[email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/