본 문서는 gSOAP User Guide[1]를 기반으로 해서 작성하였음.
– 간단한 SOAP Client 제작
http://www.genivia.com/calc.wsdl 에 있는 SOAP Provider로 부터 Stub을 작성하여 C++ 기반으로 작성하였음.
calc 서비스는 간단히 double Type의 두개의 매개변수를 받아 덧셈, 곱셈 등 계산을 하여 double Type의 계산 결과를 리턴하는 서비스이다.
1. ‘.h 헤더 파일’ 생성
(1) C++ without STL ( -s 옵션에 의해 STL이 빠짐)
> wsdl2h -s -o calc.h http://www.genivia.com/calc.wsdl
(2) Pure C Application (-c 옵션)
> wsdl2h -c -o calc.h http://www.genivia.com/calc.wsdl
2. 헤더 파일을 통해 C/C++ API를 생성
(1) C++
> soapcpp2 -i -C -I<import> calc.h
여기서 ‘<import>’는 ~/gsoap-2.8/gsoap/import 경로를 입력
– ‘-C’옵션은 Client 코드만 생성
(2) C
> soapcpp2 -c -C -I<import> calc.h
3. 실제 서비스를 사용해보는 예제 코드
1) cpp 코드 (예를들어 main.cpp)
#include “soapcalcProxy.h”
#include “calc.nsmap”
int main()
{
calcProxy service;
double result;
if (service.add(1.0, 2.0, result) == SOAP OK)
std::cout << “The sum of 1.0 and 2.0 is ” << result << std::endl;
else
service.soap_stream_fault(std::cerr);
return 0;
}
2) C 코드 (예를들어 main.c)
#include “soapH.h”
#include “calc.nsmap”
int main()
{
struct soap *soap = soap_new();
double result;
if (soap_call_ns2__add(soap, NULL, NULL, 1.0, 2.0, &result) == SOAP_OK)
printf(“The sum of 1.0 and 2.0 is %lg\n”, result);
else
soap_print_fault(soap, stderr);
soap_end(soap);
soap_free(soap);
return 0;
}
4. 컴파일
1) c++
> g++ ~/gsoap-2.8/gsoap/stdsoap2.cpp main.cpp soapC.cpp soapcalcProxy.cpp
2) c
> gcc ~/gsoap-2.8/gsoap/stdsoap2.c main.c soapC.c soapClient.c
5. 실행해서 잘 되는지 확인하기
[1] Robert van Engelen, “gSOAP 2.8.3 User Guide”, GENIVIA INC, June 24, 2011, p8~11