1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00

add QtSoap

This commit is contained in:
tianduanrui 2017-10-27 20:49:06 +08:00
parent fb822037d7
commit 16fb0b6412
26 changed files with 4429 additions and 1 deletions

View File

@ -2,7 +2,8 @@ TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = src/qqt.pro \
examples/qqtframe3
examples/qqtframe3 \
examples/soapQQtOnline
SUBDIRS += examples/framelesshelperwidget
SUBDIRS += examples/qqtframe
SUBDIRS += examples/qqtframe2
@ -13,6 +14,7 @@ SUBDIRS += examples/exquisite
SUBDIRS += examples/QtBuildTool
SUBDIRS += examples/QtSdkManager
SUBDIRS += examples/QQtInstaller
SUBDIRS += examples/easter
#need bluetooth library
#SUBDIRS += examples/qqtbluetoothfiletransferserver

View File

@ -0,0 +1,78 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Solutions component.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QCoreApplication>
#include <QLocale>
#include "easter.h"
Easter::Easter(short year, QObject *parent)
: QObject(parent), http(this)
{
connect(&http, SIGNAL(responseReady(const QtSoapMessage &)),
this, SLOT(getResponse(const QtSoapMessage &)));
QtSoapMessage request;
request.setMethod("GetEaster",
"http://www.27seconds.com/Holidays/US/Dates/");
request.addMethodArgument("year", "", year);
http.setHost("www.27seconds.com");
http.setAction("http://www.27seconds.com/Holidays/US/Dates/GetEaster");
http.submitRequest(request, "/Holidays/US/Dates/USHolidayDates.asmx");
qDebug("Looking up the date of easter in %i...", year);
this->year = year;
}
void Easter::getResponse(const QtSoapMessage &message)
{
if (message.isFault()) {
qDebug("Error: %s", qPrintable(message.faultString().toString()));
}
else {
QString res = message.returnValue().toString();
QDateTime dt = QDateTime::fromString(res, Qt::ISODate);
if (dt.isValid())
res = QLocale::c().toString(dt.date());
qDebug("Easter is: %s", res.toLatin1().constData());
}
QCoreApplication::quit();
}

59
examples/easter/easter.h Normal file
View File

@ -0,0 +1,59 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Solutions component.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef EASTER_H
#define EASTER_H
#include <qtsoap.h>
class Easter : public QObject
{
Q_OBJECT
public:
Easter(short year, QObject *parent = 0);
private slots:
void getResponse(const QtSoapMessage &);
private:
QtSoapHttpTransport http;
int year;
};
#endif

View File

@ -0,0 +1,19 @@
#include QQt's header (add QQt header to includepath)
include(../../src/qqt_header.pri)
#CONFIG += BUILD_SRC
contains (CONFIG, BUILD_SRC) {
#if you want to build src but not link QQt in this project
#include(../../src/qqt.pri)
} else {
#if you want to link QQt library
include(../qqt_library.pri)
}
TEMPLATE = app
INCLUDEPATH += .
CONFIG += console
# Input
HEADERS += easter.h
SOURCES += main.cpp easter.cpp

67
examples/easter/main.cpp Normal file
View File

@ -0,0 +1,67 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Solutions component.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
This example shows QtSoap with a SOAP::Lite web service.
Returns the date of easter in a given year.
*/
#include <QCoreApplication>
#include <QFile>
#include <stdlib.h>
#include "easter.h"
int main(int argc, char **argv)
{
if (argc < 2) {
qDebug("XMethods' interface to Easter Dates with a SOAP::Lite service.");
qDebug("usage: %s <year>", argv[0]);
qDebug(" ");
return 1;
}
QCoreApplication app(argc, argv);
Easter easter(atoi(argv[1]), 0);
return app.exec();
}

View File

@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

View File

@ -0,0 +1,97 @@
#include "mainwindow.h"
MainWindow::MainWindow(QWidget* parent)
: QWidget(parent)
{
// 构建控件
m_pQQLabel = new QLabel(this);
m_pStateLabel = new QLabel(this);
m_pQQLineEdit = new QLineEdit(this);
m_pStateLineEdit = new QLineEdit(this);
m_pSubmitButton = new QPushButton(this);
m_pStateLineEdit->setReadOnly(true);
m_pQQLabel->setText(QString::fromLocal8Bit("QQ号码"));
m_pStateLabel->setText(QString::fromLocal8Bit("QQ状态"));
m_pSubmitButton->setText(QString::fromLocal8Bit("提交"));
QGridLayout* pLayout = new QGridLayout();
pLayout->addWidget(m_pQQLabel, 0, 0);
pLayout->addWidget(m_pQQLineEdit, 0, 1);
pLayout->addWidget(m_pStateLabel, 1, 0);
pLayout->addWidget(m_pStateLineEdit, 1, 1);
pLayout->addWidget(m_pSubmitButton, 2, 1, 1, 1, Qt::AlignRight);
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);
// 连接信号槽
m_pHttp = new QtSoapHttpTransport(this);
connect(m_pSubmitButton, SIGNAL(clicked()), this, SLOT(onSubmit()));
connect(m_pHttp, SIGNAL(responseReady(const QtSoapMessage&)), this, SLOT(onResponse(const QtSoapMessage&)));
}
MainWindow::~MainWindow()
{
}
// 提交请求
void MainWindow::onSubmit()
{
QtSoapMessage message;
// 设置方法
message.setMethod("qqCheckOnline", "http://WebXml.com.cn/");
// 设置动作
m_pHttp->setAction("http://WebXml.com.cn/qqCheckOnline");
// 设置主机
m_pHttp->setHost("www.webxml.com.cn");
// 添加方法参数
QString strQQ = m_pQQLineEdit->text();
message.addMethodArgument("qqCode", "", strQQ);
QString strXML = message.toXmlString();
// 提交请求
m_pHttp->submitRequest(message, "/webservices/qqOnlineWebService.asmx");
}
void MainWindow::onResponse(const QtSoapMessage& response)
{
QString strXML = response.toXmlString();
QDomDocument doc;
doc.setContent(strXML);
// 接在在线状态
QDomNodeList nodeList = doc.elementsByTagName("qqCheckOnlineResult");
if (!nodeList.isEmpty())
{
QDomNode node = nodeList.at(0);
QString strResult = node.toElement().text();
QString strState("N/A");
if (QString::compare(strResult, "Y") == 0)
{
strState = QString::fromLocal8Bit("在线");
}
else if (QString::compare(strResult, "N") == 0)
{
strState = QString::fromLocal8Bit("离线");
}
else if (QString::compare(strResult, "E") == 0)
{
strState = QString::fromLocal8Bit("QQ号码错误");
}
else if (QString::compare(strResult, "A") == 0)
{
strState = QString::fromLocal8Bit("商业用户验证失败");
}
else if (QString::compare(strResult, "V") == 0)
{
strState = QString::fromLocal8Bit("免费用户超过数量");
}
m_pStateLineEdit->setText(strState);
}
}

View File

@ -0,0 +1,29 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <qtsoap.h>
#include <qqt-qt.h>
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow(QWidget* parent = 0);
~MainWindow();
private slots:
void onResponse(const QtSoapMessage&);
void onSubmit();
private:
QtSoapHttpTransport* m_pHttp;
QLabel* m_pQQLabel;
QLabel* m_pStateLabel ;
QLineEdit* m_pQQLineEdit ;
QLineEdit* m_pStateLineEdit;
QPushButton* m_pSubmitButton ;
};
#endif // MAINWINDOW_H

View File

@ -0,0 +1,46 @@
#-------------------------------------------------
#
# Project created by QtCreator 2017-10-27T20:06:56
#
#-------------------------------------------------
#include QQt's header (add QQt header to includepath)
include(../../src/qqt_header.pri)
#CONFIG += BUILD_SRC
contains (CONFIG, BUILD_SRC) {
#if you want to build src but not link QQt in this project
#include(../../src/qqt.pri)
} else {
#if you want to link QQt library
include(../qqt_library.pri)
}
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = soapQQtOnline
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
CONFIG += mobility
MOBILITY =

View File

@ -249,6 +249,8 @@ equals(QKIT_, macOS):DEFINES += __WEBSOCKETSUPPORT__
contains (DEFINES, __WEBSOCKETSUPPORT__) {
#QSslError not found, you need recompiler Qt4
#TODO: QT += webkit
#if you use QtSoap, open this annotation
DEFINES += __QTSOAP__
}
##################################################################
@ -295,3 +297,4 @@ INCLUDEPATH += $$PWD/widgets
INCLUDEPATH += $$PWD/exquisite
# c support
INCLUDEPATH += $$PWD/qrencode
INCLUDEPATH += $$PWD/soap

View File

@ -348,4 +348,13 @@ contains (DEFINES, __WEBSOCKETSUPPORT__) {
$$PWD/network/qqtftpprotocol.h \
$$PWD/network/qqthttpprotocol.h \
$$PWD/network/qqtwebprotocol.h
contains(DEFINES, __QTSOAP__) {
contains (DEFINES, QQT_LIBRARY) {
DEFINES += QT_QTSOAP_LIBRARY
}
SOURCES += \
$$PWD/soap/qtsoap.cpp
HEADERS += \
$$PWD/soap/qtsoap.h
}
}

1
src/soap/QtSoapArray Normal file
View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

1
src/soap/QtSoapMessage Normal file
View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

1
src/soap/QtSoapQName Normal file
View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

1
src/soap/QtSoapStruct Normal file
View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

1
src/soap/QtSoapType Normal file
View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

View File

@ -0,0 +1 @@
#include "qtsoap.h"

3389
src/soap/qtsoap.cpp Normal file

File diff suppressed because it is too large Load Diff

606
src/soap/qtsoap.h Normal file
View File

@ -0,0 +1,606 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Solutions component.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QTSOAP_H
#define QTSOAP_H
#include <QString>
#include <QVariant>
#include <QtXml>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QHash>
#include <QLinkedList>
#include <QPointer>
#if defined(QT_QTSOAP_LIBRARY)
# define QT_QTSOAP_EXPORT Q_DECL_EXPORT
#else
# define QT_QTSOAP_EXPORT Q_DECL_IMPORT
#endif
#define SOAPv11_ENVELOPE "http://schemas.xmlsoap.org/soap/envelope/"
#define SOAPv11_ENCODING "http://schemas.xmlsoap.org/soap/encoding/"
#define SOAPv11_ACTORNEXT "http://schemas.xmlsoap.org/soap/actor/next"
#define XML_SCHEMA "http://www.w3.org/1999/XMLSchema"
#define XML_SCHEMA_INSTANCE "http://www.w3.org/1999/XMLSchema-instance"
#define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace"
template <class T>
class QtSmartPtr
{
public:
inline QtSmartPtr(T* data = 0)
{
d = data;
r = new int;
*r = 1;
}
inline QtSmartPtr(const QtSmartPtr& copy)
{
if (*copy.r != 0)
++(*copy.r);
r = copy.r;
d = copy.d;
}
inline ~QtSmartPtr()
{
if ((*r) == 0)
delete r;
else if ((*r) != 0 && --(*r) == 0)
{
delete r;
if (d)
delete d;
}
}
inline QtSmartPtr& operator =(const QtSmartPtr& copy)
{
if (*copy.r != 0)
++(*copy.r);
if ((*r) == 0)
delete r;
else if ((*r) != 0 && --(*r) == 0)
{
delete r;
if (d)
delete d;
}
r = copy.r;
d = copy.d;
return *this;
}
inline T& operator *() const
{
return *d;
}
inline T* operator ->() const
{
return d;
}
inline T* ptr() const
{
return d;
}
inline T& ref() const
{
return *d;
}
inline T* releasedPtr() const
{
(*r) = 0;
return d;
}
inline bool isNull() const
{
return d == 0;
}
private:
int* r;
T* d;
};
class QT_QTSOAP_EXPORT QtSoapQName
{
public:
QtSoapQName(const QString& name = QString::null, const QString& uri = QString::null);
~QtSoapQName();
QtSoapQName& operator =(const QString& s);
QString name() const;
QString uri() const;
private:
QString n;
QString nuri;
};
bool operator ==(const QtSoapQName& n1, const QtSoapQName& n2);
bool operator <(const QtSoapQName& n1, const QtSoapQName& n2);
class QT_QTSOAP_EXPORT QtSoapType
{
public:
enum Type
{
Duration, DateTime, Time, Date, GYearMonth, GYear, GMonthDay,
GDay, GMonth, Boolean, Base64Binary, HexBinary, Float, Double,
AnyURI, QName, NOTATION, String, NormalizedString, Token, Language,
Name, NMTOKEN, NCName, ID, IDREF, ENTITY, Decimal, Integer,
NonPositiveInteger, NegativeInteger, Long, Int, Short,
Byte, NonNegativeInteger, UnsignedLong, PositiveInteger,
UnsignedInt, UnsignedShort, UnsignedByte,
Array, Struct, Other
};
QtSoapType();
QtSoapType(const QtSoapQName& name, Type t = Other);
QtSoapType(const QtSoapType& copy);
QtSoapType& operator =(const QtSoapType& copy);
virtual ~QtSoapType();
virtual void clear();
virtual bool parse(QDomNode);
virtual bool isValid() const;
virtual int count() const;
virtual QVariant value() const;
virtual QtSoapType& operator [](int);
virtual QtSoapType& operator [](const QtSoapQName& s);
virtual QtSoapType& operator [](const QString& name);
virtual const QtSoapType& operator [](int) const;
virtual const QtSoapType& operator [](const QtSoapQName& s) const;
virtual const QtSoapType& operator [](const QString& name) const;
virtual QDomElement toDomElement(QDomDocument) const;
virtual Type type() const;
virtual QString id() const;
virtual QString href() const;
virtual QString typeName() const;
virtual QtSoapQName name() const;
virtual QString toString() const;
virtual int toInt() const;
virtual bool toBool() const;
void setName(const QtSoapQName&);
void setId(const QString&);
void setHref(const QString&);
QString errorString() const;
static QString typeToName(QtSoapType::Type t);
static Type nameToType(const QString&);
protected:
Type t;
QString errorStr;
QString i;
QtSoapQName n;
QString u;
QString h;
};
class QtSoapArrayIterator;
class QT_QTSOAP_EXPORT QtSoapArray : public QtSoapType
{
public:
QtSoapArray();
QtSoapArray(const QtSoapQName& name, QtSoapType::Type type = Other,
int size0 = -1, int size1 = -1, int size2 = -1, int size3 = -1, int size4 = -1);
QtSoapArray(const QtSoapArray& copy);
QtSoapArray& operator = (const QtSoapArray& copy);
~QtSoapArray();
void clear();
bool parse(QDomNode node);
bool isValid() const;
int count() const;
QtSoapType& at(int pos0);
QtSoapType& at(int pos0, int pos1);
QtSoapType& at(int pos0, int pos1, int pos2);
QtSoapType& at(int pos0, int pos1, int pos2, int pos3);
QtSoapType& at(int pos0, int pos1, int pos2, int pos3, int pos4);
QtSoapType& operator [](int i);
QtSoapType& operator [](const QString&);
QtSoapType& operator [](const QtSoapQName&);
const QtSoapType& at(int pos) const;
const QtSoapType& at(int pos0, int pos1) const;
const QtSoapType& at(int pos0, int pos1, int pos2) const;
const QtSoapType& at(int pos0, int pos1, int pos2, int pos3) const;
const QtSoapType& at(int pos0, int pos1, int pos2, int pos3, int pos4) const;
const QtSoapType& operator [](int i) const;
const QtSoapType& operator [](const QString&) const;
const QtSoapType& operator [](const QtSoapQName&) const;
void append(QtSoapType* item);
void insert(int pos0, QtSoapType* item);
void insert(int pos0, int pos1, QtSoapType* item);
void insert(int pos0, int pos1, int pos2, QtSoapType* item);
void insert(int pos0, int pos1, int pos2, int pos3, QtSoapType* item);
void insert(int pos0, int pos1, int pos2, int pos3, int pos4, QtSoapType* item);
QDomElement toDomElement(QDomDocument doc) const;
friend class QtSoapArrayIterator;
protected:
QString arraySizeString() const;
QString arrayTypeString() const;
QHash<int, QtSmartPtr<QtSoapType> > array;
int lastIndex;
private:
Type arrayType;
int order;
int siz0, siz1, siz2, siz3, siz4;
};
class QT_QTSOAP_EXPORT QtSoapArrayIterator
{
public:
QtSoapArrayIterator(QtSoapArray&);
QtSoapArrayIterator(const QtSoapArrayIterator& copy);
QtSoapArrayIterator& operator =(const QtSoapArrayIterator& j);
~QtSoapArrayIterator();
int pos() const;
void pos(int* pos0, int* pos1 = 0, int* pos2 = 0, int* pos3 = 0, int* pos4 = 0) const;
QtSoapType* data();
const QtSoapType* current() const;
void operator ++();
bool operator !=(const QtSoapArrayIterator& j) const;
bool operator ==(const QtSoapArrayIterator& j) const;
bool atEnd() const;
private:
QHash<int, QtSmartPtr<QtSoapType> >::Iterator it;
QtSoapArray* arr;
};
class QtSoapStructIterator;
class QT_QTSOAP_EXPORT QtSoapStruct : public QtSoapType
{
public:
QtSoapStruct();
QtSoapStruct(const QtSoapQName& name);
QtSoapStruct(const QtSoapStruct& copy);
QtSoapStruct& operator =(const QtSoapStruct& copy);
~QtSoapStruct();
void clear();
bool parse(QDomNode node);
bool isValid() const;
int count() const;
QtSoapType& at(const QtSoapQName& key);
const QtSoapType& at(const QtSoapQName& key) const;
QtSoapType& operator [](int);
QtSoapType& operator [](const QtSoapQName& key);
QtSoapType& operator [](const QString& key);
const QtSoapType& operator [](int) const;
const QtSoapType& operator [](const QtSoapQName& key) const;
const QtSoapType& operator [](const QString& key) const;
void insert(QtSoapType* item);
QDomElement toDomElement(QDomDocument doc) const;
friend class QtSoapStructIterator;
protected:
QList<QtSmartPtr<QtSoapType> > dict;
};
class QT_QTSOAP_EXPORT QtSoapStructIterator
{
public:
QtSoapStructIterator(QtSoapStruct&);
~QtSoapStructIterator();
QtSoapQName key() const;
QtSoapType* data();
const QtSoapType* current() const;
void operator ++();
bool operator !=(const QtSoapStructIterator& j) const;
bool operator ==(const QtSoapStructIterator& j) const;
private:
QList<QtSmartPtr<QtSoapType> >::Iterator it;
QList<QtSmartPtr<QtSoapType> >::Iterator itEnd;
};
class QT_QTSOAP_EXPORT QtSoapSimpleType : public QtSoapType
{
public:
QtSoapSimpleType();
QtSoapSimpleType(const QtSoapQName& name);
QtSoapSimpleType(const QtSoapQName& name, int n);
QtSoapSimpleType(const QtSoapQName& name, bool n, int dummy);
QtSoapSimpleType(const QtSoapQName& name, const QString& n);
QtSoapSimpleType(const QtSoapSimpleType& copy);
QtSoapSimpleType& operator =(const QtSoapSimpleType& copy);
~QtSoapSimpleType();
void clear();
bool parse(QDomNode node);
bool isValid() const;
QString toString() const;
int toInt() const;
bool toBool() const;
QVariant value() const;
QDomElement toDomElement(QDomDocument doc) const;
protected:
QVariant v;
};
class QT_QTSOAP_EXPORT QtSoapMessage
{
friend class QtSoapHttpServer;
public:
QtSoapMessage();
QtSoapMessage(const QtSoapMessage& copy);
~QtSoapMessage();
QtSoapMessage& operator =(const QtSoapMessage& copy);
bool setContent(const QByteArray& buffer);
bool setContent(QDomDocument& d);
void addBodyItem(QtSoapType*);
void addHeaderItem(QtSoapType*);
// Method and response
const QtSoapType& method() const;
const QtSoapType& returnValue() const;
void setMethod(const QtSoapQName&);
void setMethod(const QString& name, const QString& url = QString::null);
void addMethodArgument(QtSoapType*);
void addMethodArgument(const QString& uri, const QString& name, const QString& value);
void addMethodArgument(const QString& uri, const QString& name, bool value, int dummy);
void addMethodArgument(const QString& uri, const QString& name, int value);
// Fault
enum FaultCode
{
VersionMismatch,
MustUnderstand,
Client,
Server,
Other
};
bool isFault() const;
FaultCode faultCode() const;
const QtSoapType& faultString() const;
const QtSoapType& faultDetail() const;
void setFaultCode(FaultCode code);
void setFaultString(const QString& fstring);
void addFaultDetail(QtSoapType* detail);
// Generating
void clear();
QString toXmlString(int indent = 0) const;
// Errors
QString errorString() const;
protected:
enum MessageType
{
Fault,
MethodRequest,
MethodResponse,
OtherType
};
bool isValidSoapMessage(const QDomDocument& candidate);
QtSoapStruct& body() const;
QtSoapStruct& header() const;
void init();
private:
MessageType type;
mutable QtSoapStruct envelope;
QtSoapQName m;
QtSoapStruct margs;
QString errorStr;
};
class QT_QTSOAP_EXPORT QtSoapTypeConstructorBase
{
public:
inline QtSoapTypeConstructorBase()
{
}
virtual inline ~QtSoapTypeConstructorBase()
{
}
virtual QtSoapType* createObject(QDomNode) = 0;
virtual QString errorString() const = 0;
};
template <class T>
class QT_QTSOAP_EXPORT QtSoapTypeConstructor : public QtSoapTypeConstructorBase
{
public:
QtSoapTypeConstructor()
{
}
QtSoapType* createObject(QDomNode node)
{
T* t = new T();
if (t->parse(node))
{
return t;
}
else
{
errorStr = t->errorString();
delete t;
return 0;
}
}
QString errorString() const
{
return errorStr;
}
private:
mutable QString errorStr;
};
class QT_QTSOAP_EXPORT QtSoapTypeFactory
{
private:
QtSoapTypeFactory();
public:
~QtSoapTypeFactory();
static QtSoapTypeFactory& instance();
bool registerHandler(const QString& name, QtSoapTypeConstructorBase* handler);
QtSmartPtr<QtSoapType> soapType(QDomNode node) const;
QString errorString() const;
private:
mutable QString errorStr;
QHash<QString, QtSoapTypeConstructorBase*> typeHandlers;
QLinkedList<QtSoapTypeConstructorBase*> deleteList;
};
class QT_QTSOAP_EXPORT QtSoapNamespaces
{
public:
void registerNamespace(const QString& prefix, const QString& uri);
QString prefixFor(const QString& ns);
static QtSoapNamespaces& instance();
private:
QMap<QString, QString> namespaces;
QtSoapNamespaces();
};
class QT_QTSOAP_EXPORT QtSoapHttpTransport : public QObject
{
Q_OBJECT
public:
QtSoapHttpTransport(QObject* parent = 0);
~QtSoapHttpTransport();
void setHost(const QString& host, bool useSecureHTTP = false, int port = 0);
void setHost(const QString& host, int port); //obsolete
void setAction(const QString& action);
void submitRequest(QtSoapMessage& request, const QString& path);
const QtSoapMessage& getResponse() const;
QNetworkAccessManager* networkAccessManager();
QNetworkReply* networkReply();
Q_SIGNALS:
void responseReady();
void responseReady(const QtSoapMessage& response);
private Q_SLOTS:
void readResponse(QNetworkReply* reply);
private:
QNetworkAccessManager networkMgr;
QPointer<QNetworkReply> networkRep;
QUrl url;
QString soapAction;
QtSoapMessage soapResponse;
};
#endif