WSF / C++フレームワークを使用したRESTfulWebサービス定義(サーバーとクライアントの両方)に慣れるために、クイックスタートガイド(http://wso2.org/project/wsf/cpp/2.0を参照)に従うことにしました。 0 / docs /)。ソースとhelloサーバーからフレームワークを正常にコンパイルしてインストールしました。問題は、helloクライアントをコンパイルしようとしたときです。
以下のc++コード(hello_cli.cpp)とコンパイル出力をご覧ください。
#include <stdio.h>
#include <ServiceClient.h>
#include <OMElement.h>
#include <iostream>
#include <WSFault.h> /*I have replaced AxisFault.h by this file since the AxisFault does not exist anymore*/
#include <Environment.h>
using namespace std;
using namespace wso2wsf;
int main(int argc, char *argv[])
{
Environment::initialize("hello.log", AXIS2_LOG_LEVEL_TRACE);
string end_point = "http://localhost:9090/axis2/services/hello";
ServiceClient sc(end_point);
OMElement * payload = new OMElement("greet");
payload->setText("Test service!");
try
{
OMElement* response = sc.request(payload, "");
if (response)
{
cout << endl << "Response: " << response << endl;
}
}
catch (AxisFault & e)
{
if (sc.getLastSOAPFault())
{
cout << endl << "Fault: " << sc.getLastSOAPFault() << endl;
}
else
{
cout << endl << "Error: " << e << endl;
}
}
delete payload;
}
指定されたコンパイルコマンドラインの使用:
gcc -o hello_cli -I$WSFCPP_HOME/include/axis2-1.6.0/ -L$WSFCPP_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver -lwso2_wsf hello_cli.cpp -ldl -Wl,--rpath -Wl,$WSFCPP_HOME/lib
このエラーが発生しました:
hello_cli.cpp:19:27: fatal error: ServiceClient.h : No such file or directory
この問題を修正するために、ServiceClientが配置されているディレクトリも含めました。
gcc -o hello_cli -I$WSFCPP_HOME/include/ -I$WSFCPP_HOME/include/axis2-1.6.0/ -L$WSFCPP_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver -lwso2_wsf --verbose hello_cli.cpp -ldl -Wl,--rpath -Wl,$WSFCPP_HOME/lib
これにより、次のエラーが発生します(サンプルを提供するだけです)。
hello_cli.cpp:(.text+0x23): undefined reference to `std::allocator<char>::allocator()'
hello_cli.cpp:(.text+0x3b): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
hello_cli.cpp:(.text+0x4f): undefined reference to `wso2wsf::Environment::initialize(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, axutil_log_levels)'
hello_cli.cpp:(.text+0x5e): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
hello_cli.cpp:(.text+0x6a): undefined reference to `std::allocator<char>::~allocator()'
hello_cli.cpp:(.text+0x76): undefined reference to `std::allocator<char>::allocator()'
gccの代わりにg++を使用することで(C ++オブジェクトを操作しているので自然に思えます)、次のようになりました。
コマンドライン:
g++ -o hello_cli -I$WSFCPP_HOME/include/ -I$WSFCPP_HOME/include/axis2-1.6.0/ -L$WSFCPP_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver -lwso2_wsf --verbose hello_cli.cpp -ldl -Wl,--rpath -Wl,$WSFCPP_HOME/lib
出力:
/tmp/cccyHkNn.o: In function `main':
hello_cli.cpp:(。text+0x4f):wso2wsf::Environment::initialize(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, axutil_log_levels)'
hello_cli.cpp:(.text+0xc0): undefined reference to
wso2wsf :: ServiceClient :: ServiceClient(std :: basic_string、std :: allocator>)への未定義の参照'hello_cli.cpp:(。text + 0x109):wso2wsf::OMElement::OMElement(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
hello_cli.cpp:(.text+0x159): undefined reference to
wso2wsfへの未定義の参照: :OMElement :: setText(std :: basic_string、std :: allocator>)'hello_cli.cpp:(。text+ 0x1ac):wso2wsf::ServiceClient::request(wso2wsf::OMElement*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
hello_cli.cpp:(.text+0x234): undefined reference to
wso2wsf :: ServiceClient ::〜ServiceClient()'hello_cli.cpp:(。textへの未定義の参照+ 0x36b):wso2wsf::ServiceClient::getLastSOAPFault()'
hello_cli.cpp:(.text+0x384): undefined reference to
wso2wsf :: ServiceClient :: getLastSOAPFault()'への未定義の参照hello_cli.cpp:(。text+ 0x411):wso2wsf::ServiceClient::~ServiceClient()'
/tmp/cccyHkNn.o:(.gcc_except_table+0xc4): undefined reference to
wso2wsf::WSFault'のtypeinfoへの未定義の参照
私のOSはUbuntu12.04.1LTS(64ビット)で、g ++バージョンは4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)です。