C++ 真正的节点对象,因此xml只是转储到此节点中,而不是您实际需要的节点对象

C++ 真正的节点对象,因此xml只是转储到此节点中,而不是您实际需要的节点对象,c++,soap,frameworks,axis2c,C++,Soap,Frameworks,Axis2c,2-生成的代码很大-我的意思是非常大!我的移动库大约是190mb,没有调试的话大约是40mb 3-代码生成器是java,因此您可以使用eclipse让代码生成代码获取程序 第三点非常重要,我个人认为这意味着我需要编写更少的代码,因为XML中的每个项目都映射到一个字符串,而从我的QML代码(GUI代码)中,我只需处理这个字符串 我可能已经偏离正轨了——尽管我宁愿使用Java生成代码(更好的支持),但如果有选择的话,希望这会有所帮助 对杰夫的答复: 在为BB10编译WSO2的过程中,我意识到WSO2

2-生成的代码很大-我的意思是非常大!我的移动库大约是190mb,没有调试的话大约是40mb

3-代码生成器是java,因此您可以使用eclipse让代码生成代码获取程序

第三点非常重要,我个人认为这意味着我需要编写更少的代码,因为XML中的每个项目都映射到一个字符串,而从我的QML代码(GUI代码)中,我只需处理这个字符串

我可能已经偏离正轨了——尽管我宁愿使用Java生成代码(更好的支持),但如果有选择的话,希望这会有所帮助

对杰夫的答复:

在为BB10编译WSO2的过程中,我意识到WSO2只包含Axis2c文件夹,它首先编译各种asix2c库(我认为它首先编译),然后是WSO2库(sandesh、savan等),幸运的是,我真正想要的只是WSDL的XML序列化/反序列化,而不是真正的任何高级soap特性(除了非常基本的知识外,我当然不太了解soap)

假设头文件/api完全相同,可以简单地将axis2c库替换为非官方库。或者干脆把非正式文件夹放在正式文件夹上


我自己必须首先在eclipse(BB10 SDK)中编译二进制文件,这是一项漫长而艰巨的任务,但与Nokia Meego SDK不同的是,BB10没有交叉编译工具,在Meego中,非常简单,我必须进行零更改。

就在今天,我在谷歌搜索时发现Axis2c是非官方的,我需要检查一下

至于Axis2c(WSO2版本),我目前正在我的移动应用程序(基于Qt的-Meego/BB10)中使用它,很可能您不想自己编写代码,而是从WSDL文件生成代码。正如loentar所说,WSO2版本实际上只是Axis2c的一个包装器,但它确实使安装变得更容易。我会说使用WSO2版本或使用非官方版本,我发现Axis2c很难编译(我对C/C++/Qt/SOAP完全是新手,我试图为Meego/BB10交叉编译它-你可以想象这是怎么回事!),还记得STAFF是围绕它的基于Qt的包装器,所以这是另一个依赖项

底线是使用代码生成器,但要注意:

1-代码生成器有一个“rest of xml节点”(不记得方法/名称的名称),但基本上它无法映射的所有xml都会进入该节点,您可以对此节点运行xpath查询。然而,有时这个节点被放在实际的节点对象之前,所以xml只是被转储到这个节点中,而不是您实际想要的节点对象中

2-生成的代码很大-我的意思是非常大!我的移动库大约是190mb,没有调试的话大约是40mb

3-代码生成器是java,因此您可以使用eclipse让代码生成代码获取程序

第三点非常重要,我个人认为这意味着我需要编写更少的代码,因为XML中的每个项目都映射到一个字符串,而从我的QML代码(GUI代码)中,我只需处理这个字符串

我可能已经偏离正轨了——尽管我宁愿使用Java生成代码(更好的支持),但如果有选择的话,希望这会有所帮助

对杰夫的答复:

在为BB10编译WSO2的过程中,我意识到WSO2只包含Axis2c文件夹,它首先编译各种asix2c库(我认为它首先编译),然后是WSO2库(sandesh、savan等),幸运的是,我真正想要的只是WSDL的XML序列化/反序列化,而不是真正的任何高级soap特性(除了非常基本的知识外,我当然不太了解soap)

假设头文件/api完全相同,可以简单地将axis2c库替换为非官方库。或者干脆把非正式文件夹放在正式文件夹上


我自己必须首先在eclipse(BB10 SDK)中编译二进制文件,这是一项漫长而艰巨的任务,但与Nokia Meego SDK不同的是,BB10没有交叉编译工具,在Meego中,非常简单,我必须进行零更改。

感谢您的回答。您还熟悉用于C(或C++)的WSO2 Web服务框架吗?这些也基于Axis2/C。它们是否包含内存泄漏?我并不在乎需要编写多少代码。我最关心的是可靠性。WSO2 for C只是一个Axis2/C加上其他模块,如Sandesha、Rampart。。。它与原来的AxIS2/C加上SaDeSa2/C引入的附加泄漏有相同的内存泄漏。WSO2/C++是基于WSO2/C的,并且在C接口上添加C++接口。如果您想避免内存泄漏,可以使用没有ADB的普通Axis2/C-nonofficial,或Axis/C-nonofficial+WSF Staff-它有自己的数据绑定模型,并且没有任何已知的内存泄漏。如果您不介意编写所需的代码量,那么您可能应该选择Axis2/C-Non-Official而不使用ADB。感谢您的回答。您还熟悉用于C(或C++)的WSO2 Web服务框架吗?这些也基于Axis2/C。它们是否包含内存泄漏?我并不在乎需要编写多少代码。我最关心的是可靠性。WSO2 for C只是一个Axis2/C加上其他模块,如Sandesha、Rampart。。。它与原来的AxIS2/C加上SaDeSa2/C引入的附加泄漏有相同的内存泄漏。WSO2/C++是基于WSO2/C的,并且在C接口上添加C++接口。如果您想避免内存泄漏,可以使用没有ADB的普通Axis2/C-nonofficial,或Axis/C-nonofficial+WSF Staff-它有自己的数据绑定模型,并且没有任何已知的内存泄漏。如果您不介意编写所需的代码量,那么可能应该选择Axis2/C-Non-Official而不使用ADB
axiom_node_t *
axis2_calc_add(
    const axutil_env_t * env,
    axiom_node_t * node)
{
    axiom_node_t *param1_node = NULL;
    axiom_node_t *param1_text_node = NULL;
    axis2_char_t *param1_str = NULL;
    long int param1 = 0;
    axiom_node_t *param2_node = NULL;
    axiom_node_t *param2_text_node = NULL;
    axis2_char_t *param2_str = NULL;
    long int param2 = 0;

    if (!node)
    {
        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
                        AXIS2_FAILURE);
        printf("Calculator client request ERROR: input parameter NULL\n");
        return NULL;
    }

    /* iterating to the first child element skipping (empty) text elements */
    for (param1_node = axiom_node_get_first_child(node, env);
         param1_node && axiom_node_get_node_type(param1_node, env) != AXIOM_ELEMENT;
         param1_node = axiom_node_get_next_sibling(param1_node, env));

    if (!param1_node)
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service  ERROR: invalid XML in request\n");
        return NULL;
    }
    param1_text_node = axiom_node_get_first_child(param1_node, env);
    if (!param1_text_node)
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service  ERROR: invalid XML in request\n");
        return NULL;
    }
    if (axiom_node_get_node_type(param1_text_node, env) == AXIOM_TEXT)
    {
        axiom_text_t *text =
            (axiom_text_t *) axiom_node_get_data_element(param1_text_node, env);
        if (text && axiom_text_get_value(text, env))
        {
            param1_str = (axis2_char_t *) axiom_text_get_value(text, env);
        }
    }
    else
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service ERROR: invalid XML in request\n");
        return NULL;
    }

    /* iterating to the second child element skipping (empty) text elements */
    for (param2_node = axiom_node_get_next_sibling(param1_node, env);
         param2_node && axiom_node_get_node_type(param2_node, env) != AXIOM_ELEMENT;
         param2_node = axiom_node_get_next_sibling(param2_node, env));
    if (!param2_node)
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service  ERROR: invalid XML in request\n");
        return NULL;
    }
    param2_text_node = axiom_node_get_first_child(param2_node, env);
    if (!param2_text_node)
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service  ERROR: invalid XML in request\n");
        return NULL;
    }
    if (axiom_node_get_node_type(param2_text_node, env) == AXIOM_TEXT)
    {
        axiom_text_t *text =
            (axiom_text_t *) axiom_node_get_data_element(param2_text_node, env);
        if (text && axiom_text_get_value(text, env))
        {
            param2_str = (axis2_char_t *) axiom_text_get_value(text, env);
        }
    }
    else
    {
        AXIS2_ERROR_SET(env->error,
                        AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST,
                        AXIS2_FAILURE);
        printf("Calculator service ERROR: invalid XML in request\n");
        return NULL;
    }

    if (param1_str && param2_str)
    {
        long int result = 0;
        axis2_char_t result_str[255];

        axiom_element_t *ele1 = NULL;
        axiom_node_t *node1 = NULL,
            *node2 = NULL;
        axiom_namespace_t *ns1 = NULL;
        axiom_text_t *text1 = NULL;

        param1 = strtol(param1_str, NULL, 10);
        param2 = strtol(param2_str, NULL, 10);
        result = param1 + param2;
        sprintf(result_str, "%ld", result);

        ns1 = axiom_namespace_create(env,
                                     "http://axis2/test/namespace1", "ns1");
        ele1 = axiom_element_create(env, NULL, "result", ns1, &node1);
        text1 = axiom_text_create(env, node1, result_str, &node2);

        return node1;
    }

    AXIS2_ERROR_SET(env->error,
                    AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST,
                    AXIS2_FAILURE);
    printf("Calculator service ERROR: invalid parameters\n");
    return NULL;
}
    adb_addResponse_t * axis2_skel_Calculator_add(const axutil_env_t * env,
                                                    adb_add_t * add) 
{
    adb_addResponse_t * add_res = NULL;
    int ret_val = 0;
    int val1 = 0;
    int val2 = 0;
    val1 = adb_add_get_arg_0_0(add, env);
    val2 = adb_add_get_arg_1_0(add, env);
    ret_val = val1 + val2;
    add_res = adb_addResponse_create(env);
    adb_addResponse_set_addReturn(add_res, env, ret_val);
    return add_res;
}
int CalculatorImpl::add(int param_1, int param_2)
{
  return param_1 + param_2;
}
# generate service from WSDL
WSDL2C.sh -uri Calculator.wsdl -u -ss -sd
# implement src/axis2_skel_Calculator.c
# compile and install
cd src
# build
sh build.sh
# install
sudo mkdir $AXIS2C_HOME/services/calculator
sudo cp lib*.so ../resources/*.xml $AXIS2C_HOME/services/calculator
# generate service from WSDL
staff_codegen -pwsdl -tcomponent_all Calculator.wsdl
# implement src/CalculatorImpl.cpp
# build and install
make && sudo -E make install