QT+Gsoap访问cxf WebService
来源:互联网 发布:bp神经网络算法 matlab 编辑:程序博客网 时间:2024/05/17 20:28
内容:如题
需求描述:现有springMvc框架的系统,里面跑着业务数据,又开发一QT界面,需要调用java系统的数据
思路: java端用cxf发布出webService接口 客户端:用Gsoap 将cxf发布的wsdl文件转换成c++文件,然后调用。
环境:win10 QT5+ cxf Springmvc
步骤:
一:gsoap安装
下载gsoap安装文件,很简单,下载后直接解压即可使用,我下载的是gsoap_2.8.51;
gsoap配置环境变量(当然影像不大,配置环境变量后,后面操作相对简单)
如下图所示:在path中增加gsoap的win32路径
二: 假设此处java项目中的webService可以访问(此处不再详细说明)
我的可以正常访问:如下图所示:
这时证明你 的服务端已经正常。
三:新建目录D:\QT\gsoapSource(可根据实际情况随意建立)
进入windows命令窗口
cd 进入到上述建立的目录下
cd D:\QT\gsoapSource
将wsdl文件转成.h文件
执行命令wsdl2h -o taskInfo.h http://(服务端的ip)/taskTodo/webService/taskInfo?wsdl (后面的地址为第二大项中的wsdl的地址)
此时,在D:\QT\gsoapSource 目录下,你会看到生成了,taskInfo.h文件
此时,再执行命令:soapcpp2 taskInfo.h -I E:\tools\应用软件\gsoap_2.8.51\gsoap-2.8\gsoap\import (备注:-I后面指定了gsoap的安装路径下的import路径,根据自己情况改动)
此时,会在目录下生成一堆文件,暂且不管是什么用途
至此,准备工作已经准备完成,接下来就是QT端的开发:
四:建立QT客户端工程(具体步骤不再细说)
工程结构如下图所示:
其中主要是.pro文件,widget.h及widget.cpp文件
生成项目后,先在widget.cpp平级的目录下的建立gsoap文件夹,将第三步最后生成在gsoapSource文件下的文件除了.xml文件之外的所有文件都复制到gsoap文件夹下(网上有人说没必要全要,此处为了避免漏掉,都拿过来),除此之外,还需要将gsoap安装路径下的3个重要文件(stdsoap2.cpp、stdsoap2.c、stdsoap2.h)复制到此文件夹下
接下来,看看QT里面上面所说的3个文件的代码
.pro代码 其中LIBS后面的值根据自己QT环境配置
#-------------------------------------------------## Project created by QtCreator 2017-08-09T17:22:13##-------------------------------------------------QT += core guiLIBS += C:\Qt\Qt5.6.2\Tools\mingw492_32\i686-w64-mingw32\lib\libws2_32.agreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = TestTEMPLATE = appSOURCES += main.cpp\ widget.cpp\ gsoap/stdsoap2.cpp \ gsoap/soapClient.cpp \ gsoap/soapC.cppHEADERS += widget.h\ gsoap/stdsoap2.h \ gsoap/soapStub.h \ gsoap/soapH.hINCLUDEPATH += gsoapwidget.c
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QLabel>#include <QTextEdit>class QPushButton;class QLineEdit;class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();public slots: void OnClicked();private: QPushButton *btn;// QLineEdit *line; QTextEdit *line; QLabel *labelUserName; QLineEdit *editUserName; QLabel *labelPassWord; QLineEdit *editPassWord; QLabel *labelresult;};#endif // WIDGET_H
widget.cpp
#include "widget.h"#include <QPushButton>#include <QLineEdit>#include <QHBoxLayout>#include <QDebug>#include <QGridLayout>#include <QJsonArray>#include <QJsonObject>#include <QJsonDocument>#include "TaskInfoWebServiceSoapBinding.nsmap"Widget::Widget(QWidget *parent) : QWidget(parent){ setWindowTitle(tr("获取任务信息")); setFixedSize(800,500); labelUserName =new QLabel(tr("用户名:")); editUserName =new QLineEdit; labelPassWord =new QLabel(tr("密码:")); editPassWord =new QLineEdit; labelresult = new QLabel(tr("结果:")); btn =new QPushButton("提交"); line = new QTextEdit; connect(btn,SIGNAL(clicked()),this,SLOT(OnClicked())); QGridLayout *layout = new QGridLayout; layout->addWidget(labelUserName,0,0); layout->addWidget(editUserName,0,1); layout->addWidget(labelPassWord,1,0); layout->addWidget(editPassWord,1,1); layout->addWidget(labelresult,2,0); layout->addWidget(line,2,1); layout->addWidget(btn,3,0); setLayout(layout);}Widget::~Widget(){}void Widget::OnClicked(){ struct soap add_soap; soap_init(&add_soap); soap_set_mode(&add_soap,SOAP_C_UTFSTRING); ns1__findUserTaskInfo req; std::string name =editUserName->text().toStdString(); // 由赋值进行初始化 std::string password =editPassWord->text().toStdString(); req.userName=&name; req.passWord=&password; ns1__findUserTaskInfoResponse res; QString str; int result = soap_call___ns1__findUserTaskInfo(&add_soap,NULL,NULL,&req,res); if (result == SOAP_OK) {// qDebug()<<res.return_->c_str(); str = QString::fromUtf8(res.return_->c_str()); } else { str = tr("Failed"); } line->setText(str);}
main.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
运行QT工程如下图所示:
ok,至此,结束
注意:我的webService 接口是中接收两个参数,userName和passWord,然后调用数据库进行验证,返回对应用户的字符串数据,然后显示到QT的结果框中,测试的时候可以简单写个测试接口进行调用。
- QT+Gsoap访问cxf WebService
- Qt+gsoap调用WebService
- Qt+gsoap调用WebService
- Qt+gsoap调用WebService
- Qt+gsoap调用WebService
- gsoap访问webservice
- Qt使用gSOAP调用WebService
- Qt编写WebService客户端 (gsoap)
- c++使用gsoap访问webservice
- Android访问WebService-CXF步骤
- Android访问WebService-CXF步骤
- CXF 访问WebService 服务端方法
- qt使用gsoap调用webservice接口
- VC++6.0 用gSoap客户端访问WebService
- mssoap与gsoap访问WebService的使用
- c++访问webservice(gsoap简单使用)
- Client端使用CXF访问WebService
- 关于cxf方式访问webservice的问题
- DigitalOcean租VPS,配置过程
- 求最大子矩阵的和、求最大子数组的和
- 深度优先搜索(DFS)
- PHP 5 Date/Time 函数
- dp入门级--递推数塔
- QT+Gsoap访问cxf WebService
- PHP 5 Directory 函数
- iOS开发 --frame和bounds区别详解
- linux服务器上配置多个svn仓库
- 352A
- bzoj 1257: [CQOI2007]余数之和sum
- order by语句使用
- Linux命令-cut
- 基于IntelliJ IDEA15 搭建最简单的maven项目