您的位置:首页 > 其它

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

2013-09-13 09:14 274 查看

生成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包裹,与实际运行程序后生成的数据不符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐