使用gsoap由.h文件生成wsdl相关问题

生成wsdl文件步骤

头文件如下

// ws_interface.h

#ifndef  WS_INTERFACE_H
#define  WS_INTERFACE_H
// 注意:以下注释是必要的
//gsoap ns service name: ws_interface
//gsoap ns service style: rpc
//gsoap ns service namespace: https://127.0.0.1:4433/cgi-bin/ws_interface.wsdl
//gsoap ns service location: https://127.0.0.1:4433/cgi-bin
//gsoap ns service executable: ws_interface.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:ws_interface


typedef struct ns__AddGroupRequest
{
    char *validationCode;
    char *name;
    char *desc;
} ns__AddGroupRequest;

typedef struct ns__AddGroupResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__AddGroupResponse;

typedef struct ns__DelGroupRequest
{
    char *validationCode;
    char *name;
} ns__DelGroupRequest;

typedef struct ns__DelGroupResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__DelGroupResponse;

typedef struct ns__OpGroupRequest
{
    char *validationCode;
    char *name;
    int enable;     // 0 disable, 1 enable
} ns__OpGroupRequest;

typedef struct ns__OpGroupResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__OpGroupResponse;

typedef struct ns__ModifyGroupRequest
{
    char *validationCode;
    char *name;
    char *newname;
} ns__ModifyGroupRequest;

typedef struct ns__ModifyGroupResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__ModifyGroupResponse;

typedef struct ns__AddUserRequest
{
    char *validationCode;
    char *name;
    char *truename;
    char *passwd;
    char *groupname;            // user belong to group name
} ns__AddUserRequest;

typedef struct ns__AddUserResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__AddUserResponse;

typedef struct ns__DelUserRequest
{
    char *validationCode;
    char *name;
} ns__DelUserRequest;

typedef struct ns__DelUserResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__DelUserResponse;

typedef struct ns__OpUserRequest
{
    char *validationCode;
    char *name;
    int enable;     // 0 disable, 1 enable
} ns__OpUserRequest;

typedef struct ns__OpUserResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__OpUserResponse;

typedef struct ns__ModifyUserRequest
{
    char *validationCode;
    char *name;
    char *newname;
    char *truename;
    char *passwd;
    char *groupname;            // user belong to group name
} ns__ModifyUserRequest;

typedef struct ns__ModifyUserResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__ModifyUserResponse;

int ns__AddGroup(
ns__AddGroupRequest *AddGroup,
ns__AddGroupResponse *AddGroupResponse );

int ns__DelGroup(
ns__DelGroupRequest *DelGroupRequest,
ns__DelGroupResponse *DelGroupResponse );

int ns__OpGroup(
ns__OpGroupRequest *OpGroupRequest,
ns__OpGroupResponse *OpGroupResponse );

int ns__ModifyGroup(
ns__ModifyGroupRequest *ModifyGroupRequest,
ns__ModifyGroupResponse *ModifyGroupResponse );

int ns__AddUser(
ns__AddUserRequest *AddUserRequest,
ns__AddUserResponse *AddUserResponse );

int ns__DelUser(
ns__DelUserRequest *DelUserRequest,
ns__DelUserResponse *DelUserResponse );

int ns__OpUser(
ns__OpUserRequest *OpUserRequest,
ns__OpUserResponse *OpUserResponse );

int ns__ModifyUser(
ns__ModifyUserRequest *ModifyUserRequest,
ns__ModifyUserResponse *ModifyUserResponse );

#endif

运行如下命令生成wsdl与源文件:

soapcpp2 -Scd ./ws_interface ./ws_interface.h

关于类型的定义

不能因为某个结构一致,而使用typedef定义别名,这样在生成的wsdl中会有两个同样名字的参数,

而导致wsdl文件出现语法错误

例如,如下的头文件是错误的:

// ws_interface.h

#ifndef  WS_INTERFACE_H
#define  WS_INTERFACE_H

//gsoap ns service name: ws_interface
//gsoap ns service style: rpc
//gsoap ns service namespace: https://127.0.0.1:4433/cgi-bin/ws_interface.wsdl
//gsoap ns service location: https://127.0.0.1:4433/cgi-bin
//gsoap ns service executable: ws_interface.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:ws_interface

typedef struct ns__CommonResponse
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__CommonResponse;


typedef struct ns__AddGroupRequest
{
    char *validationCode;
    char *name;
    char *desc;
} ns__AddGroupRequest;

typedef struct ns__DelGroupRequest
{
    char *validationCode;
    char *name;
} ns__DelGroupRequest;

typedef struct ns__CommonResponse ns__AddGroupResponse;
int ns__AddGroup(
ns__AddGroupRequest *AddGroup,
ns__AddGroupResponse *AddGroupResponse );

typedef struct ns__CommonResponse ns__DelGroupResponse;
int ns__DelGroup(
ns__DelGroupRequest *DelGroupRequest,
ns__DelGroupResponse *DelGroupResponse );

#endif

关于gsoap生成的返回值

自定义头文件group.h

typedef struct ns__CommonResponse111111111
{
    int returnFlag;
    char *msg;              // message to descript the return_flag
} ns__CommonResponse2222222222;

typedef struct ns__AddGroupRequest
{
    char *validationCode;
    char *name;
    char *desc;
} ns__AddGroupRequest;

int ns__AddGroup(
ns__AddGroupRequest *AddGroupRequest,
ns__CommonResponse2222222222 *CommonResponse );

/

然后用如下命令生成.c文件:

soapcpp2 -S -c group.h

程序运行时,返回的数据被CommonResponse2222222222包裹:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:ws_account"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<ns:CommonResponse2222222222>

<returnFlag>-460</returnFlag>

<msg>group name is empty</msg>

</ns:CommonResponse2222222222>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

注意:soapcpp2 -S -c group.h命令生成的样例res.xml中数据是被CommonResponse111111111包裹,与实际运行程序后生成的数据不符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值