同時に同様の問題と戦っているようです。
最初にこれから始めましょう:
ドキュメントにない他の問題は、 -DWITH_OPENSSL -lgsoapssl++ -lssl -lcrypto フラグを使用してビルドしたときに、gsoap の ssl メソッドに関するリンカー エラーがまだ発生していたことです。これらを解決するには、ビルドに stdsoap2_ssl_cpp.cpp を含める必要がありましたが、これは奇妙だと思いました。
参考までに、Ubuntu 14.04 の VirtualBox を使用しています。フラグ--enable-debugおよび--with-openssl=/opt/libraries/openssl/build/1.0.1jを使用してソースから Gsoap 2.8.21 をコンパイルしました。
ご覧のとおり、 libssl.aおよびlibcrypto.aアーカイブを取得するために、ソースから openssl もコンパイルしました。さらに、 libz.aアーカイブを取得するために zlib をコンパイルしました。それらをすべて配置すると、次のようになります。
次のコマンドを使用して、WSDL からヘッダー ファイルを生成しました。
wsdl2h -v -g -o temporary.h https://something.com?wsdl
プロキシ クラスを生成する前に、temporary.h に次の行を追加します。
#import "wsse.h"
次のコマンドで生成された C++ プロキシ クライアント クラス:
soapcpp2 -1 -I/opt/libraries/gsoap/build/2.8.21/share/gsoap/import -C -j temporary.h
QT Creator (Plain Project、残念ながら cmake はありません) を使用すると、私の project.pro ファイルは次のようになります。
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
QMAKE_CXXFLAGS += -DWITH_OPENSSL
QMAKE_CXXFLAGS += -DWITH_DOM
QMAKE_CXXFLAGS += -DDEBUG
QMAKE_CFLAGS += -DWITH_OPENSSL
QMAKE_CFLAGS += -DWITH_DOM
QMAKE_CFLAGS += -DDEBUG
SOURCES += main.cpp \
soapBasicHttpBinding_USCOREIBarcodeWebServiceProxy.cpp \
soapC.cpp \
../../../opt/libraries/gsoap/build/2.8.21/share/gsoap/plugin/wsseapi.cpp \
../../../opt/libraries/gsoap/build/2.8.21/share/gsoap/plugin/mecevp.c \
../../../opt/libraries/gsoap/build/2.8.21/share/gsoap/plugin/smdevp.c \
HEADERS += \
BasicHttpBinding_USCOREIBarcodeWebService.nsmap \
soapBasicHttpBinding_USCOREIBarcodeWebServiceProxy.h \
soapStub.h \
soapH.h
include(deployment.pri)
qtcAddDeployment()
INCLUDEPATH += ../../../opt/libraries/gsoap/build/2.8.21-debug/share/gsoap
unix:!macx: LIBS += -L$$PWD/../../../opt/libraries/gsoap/build/2.8.21-debug/lib/ -lgsoapssl++
INCLUDEPATH += $$PWD/../../../opt/libraries/gsoap/build/2.8.21-debug/include
DEPENDPATH += $$PWD/../../../opt/libraries/gsoap/build/2.8.21-debug/include
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../opt/libraries/gsoap/build/2.8.21-debug/lib/libgsoapssl++.a
unix:!macx: LIBS += -L$$PWD/../../../opt/libraries/openssl/build/1.0.1j/lib/ -lssl
INCLUDEPATH += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/include
DEPENDPATH += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/include
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/lib/libssl.a
unix:!macx: LIBS += -L$$PWD/../../../opt/libraries/openssl/build/1.0.1j/lib/ -lcrypto
INCLUDEPATH += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/include
DEPENDPATH += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/include
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../opt/libraries/openssl/build/1.0.1j/lib/libcrypto.a
unix:!macx: LIBS += -L$$PWD/../../../opt/libraries/zlib/build/1.2.8/lib/ -lz
INCLUDEPATH += $$PWD/../../../opt/libraries/zlib/build/1.2.8/include
DEPENDPATH += $$PWD/../../../opt/libraries/zlib/build/1.2.8/include
unix:!macx: PRE_TARGETDEPS += $$PWD/../../../opt/libraries/zlib/build/1.2.8/lib/libz.a
LIBS += -ldl
質問の最初の部分に答えると、現在直面している問題は次のガイドで解決できるはずです。
参考までに、main.cpp ファイルに以下を含めました。
#include <iostream>
#include "BasicHttpBinding_USCOREIBarcodeWebService.nsmap"
#include "soapBasicHttpBinding_USCOREIBarcodeWebServiceProxy.h"
#include "soapStub.h"
#include "soapH.h"
#include "plugin/wsseapi.h"
そして後で追加したファイルで:
// creating empty soap struct with SOAP_IO_FLUSH
soap *soap = soap_new();
// setting flags: SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION | SOAP_TLSv1
soap->ssl_flags = SOAP_SSL_DEFAULT;
// registering plugin
soap_register_plugin(soap, soap_wsse);
// file with CA certs of peers (downloaded https://www.cs.fsu.edu/~engelen/cacerts.pem.zip)
soap->cafile = "cacerts.pem";
// I placed cacerts.pem file in the same folder where your program executable will be created
あなたのケースに戻って、soap_ssl_client_contextを使用する方法で、パラメータの 1 つがcacerts.pemの場所の設定にも関与していると思います。
それでもうまくいかない場合は、いつでも ssl_flags をSOAP_SSL_NO_AUTHENTICATIONに設定できます
これがこの問題を解決できるかどうかはわかりません:
SOAP 1.2 エラー: SOAP-ENV:Sender [サブコードなし] "有効なアクション パラメータがないと要求を処理できません。有効な SOAP アクションを指定してください。"
ただし、gsoap プラグインから適切なファイルを添付する場合があります。私は SOAP 1.1 で遊んでいて、SOAP 1.2 のプロキシ クライアント クラスの生成を無効にしていました。
とにかく、私はあなたの反応を楽しみにしています。初めて Gsoap を扱うときのフラストレーションを少しでも解消できれば幸いです :)