Sending Struct is not working ?

"tgriesel78" <[email protected]> Mon, 31 Mar 2008 09:00:56 -0000
Newsgroups gmane.text.xml.rpc.specification
Message-ID <[email protected]>
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/";
    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/' method 'sbd.test_submission' 

I tried now nearly all combinations - I have no idea anymore...

cheers 


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

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/