初識gsoap2 及 使用qt開發gsoap程序項目文件管理

http://gsoap2.sourceforge.net/下載最新的gsoap2源碼包。

通過http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html(EXP1)初步瞭解了gsoap2的使用方法(下屬示例使用了該文章的例子)。

由於一直使用Qt做開發項目的文件管理,整理了個qt項目文件,如下:

1. 目錄結構

gsoap2                    # gsoap2 開發文檔根目錄
│  gsoap.pri              # 引入gsoap2開發用源碼文件
│  gsoap28.pro            # 根項目文件
│ 
├─bin		        # gsoap2工具鏈(來自於sourceforge上下載的源碼包)及編譯後的二進制文件
│      soapcpp2.exe
│      wsdl2h.exe
│
├─gsoap                   # gsoap2開發用源碼文件所在目錄(來自於sourceforge上下載的源碼包)
│      .dirstamp
│      dom.c
│      dom.cpp
│      stdsoap2.c
│      stdsoap2.cpp
│      stdsoap2.h
│      typemap.dat
│
└─leaning                # gsoap2應用程序所在根目錄
    │  leaning.pri       # gsoap2應用用的源碼及命令頭文件
    │  leaning.pro       # 應用程序管理
    ├─nsmap              # 接口定義文件所在目錄
    │      add.h         # 接口文件名字必須與gsoap2項目中GSOAP_NAME值一樣
    │      calc.h
    ├─add                # 服務器應用目錄
    │      add.pro       # 服務器項目
    │      main.cpp      # 項目源碼(來自於(EXP1)所述文檔)
    ├─add_client         # 客戶端應用目錄
    │      add_client.pro # 客戶端項目
    │      main.cpp      # 客戶端源碼(來自於(EXP1)所述文檔)
    ├─calc
    │      calc.pro
    │      main.cpp
    ├─calc_client
           calc_client.pro
           main.cpp

  其中add.cpp、add_client.cpp分別爲服務端和客戶端的例子程序(來自於http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html)
  gsoap2應用項目需要放在learning目錄下。

2. gsoap2應用程序項目

  控制文件源碼及項目舉例,目的是爲了簡化應用開發的配置工作(當前僅在windows下測試過可用)。

  gsoap28.pro

TEMPLATE = subdirs
SUBDIRS += leaning

  gsoap.pri

INCLUDEPATH += $${PWD}/gsoap

HEADERS += $${PWD}/gsoap/stdsoap2.h

contains(CONFIG,use_c_gsoap_api) {
    SOURCES += $${PWD}/gsoap/stdsoap2.c \
               $${PWD}/gsoap/dom.c
} else {
    SOURCES += $${PWD}/gsoap/stdsoap2.cpp \
               $${PWD}/gsoap/dom.cpp
}

LIBS += -lws2_32

   leaning.pri

DESTDIR = $${PWD}/../bin

include($${PWD}/../gsoap.pri)
INCLUDEPATH += $${PWD}/nsmap

#contains(CONFIG,soap_server) {
    !exists(./temp):system("mkdir  temp")
    SOAP_GEN_DIR= ./temp/$${GSOAP_NAME}
    !exists($${SOAP_GEN_DIR}):system("cd temp && mkdir $${GSOAP_NAME}")
    !exists($${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl) {
        system("soapcpp2.exe -d./$${SOAP_GEN_DIR} ./nsmap/$${GSOAP_NAME}.h")
    }
#}

SOAP_GEN_DIR= $${PWD}/temp/$${GSOAP_NAME}

SOAP_M_HEADERS += $${SOAP_GEN_DIR}/soapH.h \
                  $${SOAP_GEN_DIR}/soapStub.h
SOAP_M_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
                  $${SOAP_GEN_DIR}/soapServer.cpp

SOAP_C_HEADERS += $${SOAP_GEN_DIR}/soapH.h\
                  $${SOAP_GEN_DIR}/soapStub.h
SOAP_C_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
                  $${SOAP_GEN_DIR}/soapClient.cpp

SOAP_L_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp \
                  $${SOAP_GEN_DIR}/soapClientLib.cpp \
                  $${SOAP_GEN_DIR}/soapServerLib.cpp

SOAP_CP_OTHERS += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.req.xml \
                  $${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.res.xml \
                  $${SOAP_GEN_DIR}/ns.xsd \
                  $${SOAP_GEN_DIR}/$${GSOAP_NAME}.nsmap

INCLUDEPATH += $${SOAP_GEN_DIR}
contains(CONFIG,soap_server) {
    TARGET = $${GSOAP_NAME}
    HEADERS += $${SOAP_M_HEADERS}
    SOURCES += $${SOAP_M_SOURCES}
    QMAKE_CLEAN += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl \
               $${SOAP_M_HEADERS} \
               $${SOAP_M_SOURCES} \
               $${SOAP_C_HEADERS} \
               $${SOAP_C_SOURCES} \
               $${SOAP_CP_OTHERS} \
               $${SOAP_L_SOURCES}
} else {
    TARGET = $${GSOAP_NAME}_client
    HEADERS += $${SOAP_C_HEADERS}
    SOURCES += $${SOAP_C_SOURCES}
}

HEADERS += $${PWD}/nsmap/$${GSOAP_NAME}.h

  leaning.pro

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += add \
           add_client \
           calc \
           calc_client

  add.pro

GSOAP_NAME = add
TEMPLATE = app
CONFIG += console soap_server

include(../leaning.pri)

HEADERS +=

SOURCES += \
    main.cpp

  add_client.pro

GSOAP_NAME = add
TEMPLATE = app
CONFIG += console

include(../leaning.pri)

HEADERS +=

SOURCES += \
    main.cpp

3. 編譯後的項目目錄結構

  nsmap下的接口文件爲手動編輯所得(c的接口定義,通過它生成gsoap項目所需的源碼文件)。

  temp目錄爲編譯中間產物,由編譯時自動產生。

gsoap2
│  gsoap.pri
│  gsoap28.pro
│  gsoap28.pro.user
│  mmsys.env
│
├─bin
│      add.exe
│      add_client.exe
│      calc.exe
│      calc_client.exe
│      soapcpp2.exe
│      wsdl2h.exe
│
├─gsoap
│      .dirstamp
│      dom.c
│      dom.cpp
│      stdsoap2.c
│      stdsoap2.cpp
│      stdsoap2.h
│      typemap.dat
│
└─leaning
    │  leaning.pri
    │  leaning.pro
    │
    ├─add
    │      add.pro
    │      main.cpp
    │
    ├─add_client
    │      add_client.pro
    │      main.cpp
    │
    ├─calc
    │      calc.pro
    │      main.cpp
    │
    ├─calc_client
    │      calc_client.pro
    │      main.cpp
    │
    ├─nsmap
    │      add.h
    │      calc.h
    │
    └─temp
        ├─add
        │      add.add.req.xml
        │      add.add.res.xml
        │      add.nsmap
        │      add.wsdl
        │      ns.xsd
        │      soapC.cpp
        │      soapClient.cpp
        │      soapClientLib.cpp
        │      soapH.h
        │      soapServer.cpp
        │      soapServerLib.cpp
        │      soapStub.h
        │
        └─calc
                calc.add.req.xml
                calc.add.res.xml
                calc.div.req.xml
                calc.div.res.xml
                calc.mul.req.xml
                calc.mul.res.xml
                calc.nsmap
                calc.pow.req.xml
                calc.pow.res.xml
                calc.sub.req.xml
                calc.sub.res.xml
                calc.wsdl
                ns.xsd
                soapC.cpp
                soapClient.cpp
                soapClientLib.cpp
                soapH.h
                soapServer.cpp
                soapServerLib.cpp
                soapStub.h

4.  gsoap2的動態庫項目

  暫未涉及,學習後再補






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章