Unable to perform simple SOAP operation using WSO2 (Axis2c)
===

I have cross compile WSO2 for ARM (Nokia N9) using scratchbox, it was quite easy that even I could do it. I now have the libraries I need to deploy onto my device.

I have then generated C++ data binding using WSO2 CPP and added them as source files (FYI - I used the FindingService.wsdl from ebay here: http://developer.ebay.com/webservices/finding/latest/FindingService.wsdl)

I am trying to perform the simplest of operations which is basically getVersion, but it is not working it somehow does not serialize the object properly and I'm not sure why.

here is my main.cpp code:


    int mainGetVersionUsingWSOFCPP() {
    Environment::initialize("wsof.log", AXIS2_LOG_LEVEL_DEBUG);
    std::string client_home = "/opt/meebay/res/axis2c/axis2.xml";

    //ServiceClient sc("http://svcs.ebay.com/services/search/FindingService/v1");

    FindingServiceStub *stub = new FindingServiceStub(client_home);
    Options * op = stub->getOptions();
    op->setSoapVersion(AXIOM_SOAP12);

    GetVersionRequest *req = new GetVersionRequest();
    GetVersionRequestE8 *reqE8 = new GetVersionRequestE8(req);

    GetVersionResponse *res = NULL;
    GetVersionResponseE3 *resE3 = NULL;

    ServiceClient *sc = stub->getServiceClient();

    resE3 =  stub->getVersion(reqE8);


    res = resE3->getGetVersionResponse();

    }


And here is the code generated by axis2c WSDL2CPP for this particular getVersion request:


    com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3* WSF_CALL FindingServiceStub::getVersion(com_ebay_www_marketplace_search_v1_services::GetVersionRequestE8*  _getVersionRequest)
         {
            axis2_svc_client_t *svc_client = NULL;
            axis2_options_t *options = NULL;
            axiom_node_t *ret_node = NULL;

            const axis2_char_t *soap_action = NULL;
            axutil_qname_t *op_qname =  NULL;
            axiom_node_t *payload = NULL;
            axis2_bool_t is_soap_act_set = AXIS2_TRUE;
            axutil_string_t *soap_act = NULL;

            com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3* ret_val;
            
                                payload = _getVersionRequest->serialize(NULL, NULL, AXIS2_TRUE, NULL, NULL);
                           
	    svc_client = serviceClient->getAxis2SvcClient();
            
           
            
            

	    options = clientOptions->getAxis2Options();
            if (NULL == options)
            {
                AXIS2_ERROR_SET(Environment::getEnv()->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE);
                AXIS2_LOG_ERROR(Environment::getEnv()->log, AXIS2_LOG_SI, "options is null in stub");
                return (com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3*)NULL;
            }
            soap_act = axis2_options_get_soap_action( options, Environment::getEnv() );
            if (NULL == soap_act)
            {
              is_soap_act_set = AXIS2_FALSE;
              soap_action = "http://www.ebay.com/marketplace/search/v1/services/getVersion";
              soap_act = axutil_string_create(Environment::getEnv(), "http://www.ebay.com/marketplace/search/v1/services/getVersion");
              axis2_options_set_soap_action(options, Environment::getEnv(), soap_act);    
            }

            
            axis2_options_set_soap_version(options, Environment::getEnv(), AXIOM_SOAP11);
             
            ret_node =  axis2_svc_client_send_receive_with_op_qname( svc_client, Environment::getEnv(), op_qname, payload);
 
            if (!is_soap_act_set)
            {
              
              axis2_options_set_soap_action(options, Environment::getEnv(), NULL);    
              
              axis2_options_set_action( options, Environment::getEnv(), NULL);
            }
            if(soap_act)
            {
              axutil_string_free(soap_act, Environment::getEnv());
            }

            
                    if ( NULL == ret_node )
                    {
                        return (com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3*)NULL;
                    }
                    ret_val = new com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3();

                    if(ret_val->deserialize(&ret_node, NULL, AXIS2_FALSE ) == AXIS2_FAILURE)
                    {
                        if(ret_val != NULL)
                        {
                           delete ret_val;
                        }

                        AXIS2_LOG_ERROR( Environment::getEnv()->log, AXIS2_LOG_SI, "NULL returned from the _deserialize: "
                                                                "This should be due to an invalid XML");
                        return (com_ebay_www_marketplace_search_v1_services::GetVersionResponseE3*)NULL;
                    }

                   
                            return ret_val;
                       
        }


Any help you can provide will be MOST welcome, I've been banging my head against this problem for some time now.

I am simply trying to generate C++ XML databinding objects either WSDL or XSD, so I don't have to hand craft each request.