WebサービスにアクセスするためにgSOAPを使用してみました(たとえば、提供されたWSDLを使用してCスタブを生成し、アプリで使用しました)。ただし、生成された.cファイルとオブジェクトファイルは非常に大きい(数メガバイト)ことがわかりました。これは、私が作業している組み込み環境では問題になります。
より単純なSOAPライブラリを知っていますか、それともezXMLのような汎用XMLジェネレーターとパーサーにフォールバックする必要がありますか?
WebサービスにアクセスするためにgSOAPを使用してみました(たとえば、提供されたWSDLを使用してCスタブを生成し、アプリで使用しました)。ただし、生成された.cファイルとオブジェクトファイルは非常に大きい(数メガバイト)ことがわかりました。これは、私が作業している組み込み環境では問題になります。
より単純なSOAPライブラリを知っていますか、それともezXMLのような汎用XMLジェネレーターとパーサーにフォールバックする必要がありますか?
私も最近この質問を調べました、そして私が見つけた最良のオプションはgSOAPでした、それは非常に成熟していてよくテストされています。ただし、私は非SOAPルートを使用することにしました。これは、クライアント側とサーバー側の両方にいるため、オプションでした。gSOAPを使用する前に、ライセンスを使用できることを確認してください。使用方法によっては、コードをリリースするか、支払いを行う必要がある場合があります。
もう1つのオプションはApacheAxis2/ Cですが、これは経験がありません(gSOAPと同様のサイズのフットプリントがあると思います)。彼らのクライアントAPIはここにあります。クライアントAPIのチュートリアルはこちらです。
解析されたXMLルートを使用することにした場合は、このSOの質問に興味があるかもしれません(回答を参照)。
解析されたルートのboost::spiritをチェックアウトすることもできます。C ++に慣れている場合は、小さく、高速で、特殊な(そして一般的な)パーサーを作成する機能があります(リエントラントとして記述できるため、外部の「C」インターフェイスを使用して静的オブジェクトを介して呼び出すことはコーシャです。 )。私は一般的な意味でそれを保証することができます(XMLに固有ではありません)。学習曲線は急ですが、大きな見返りがあります。
これはあなたが作成しているWebサービスですか?その場合は、SOAPの代わりにRESTを使用することを検討してください。RESTははるかに単純であり、巨大なHTTP-XML-SOAP変換レイヤーを経由する代わりに、既存のテスト済みで動作中のHTTPハンドラーを使用できます。
他の人のWebサービスを利用している場合は、SOAPスキーマや応答の例を調べてください。私がこれを支持しているとは信じられませんが、スキーマが拡張可能または再帰的でない場合は、SOAPまたはXMLを解析するのではなく、単純なLALRパーサーまたは生のHTTP応答での文字列照合を使用する方がよい場合があります。これは、組み込みCでの実装がはるかに簡単です。
通常、適切なSOAPライブラリを使用できないXMLを直接(主に文字列連結によって)作成することにフォールバックします。
もう1つの解決策は、JSONに切り替えることです。これは、(通常は)オーバーヘッドと要求/応答のサイズが小さいため、組み込みプログラムの方が優れている可能性があります。利用可能なSOAPWebサービスしかない場合は、サーバー上でプロキシスクリプトを使用して、JSONリクエストをSOAPリクエストに、SOAPレスポンスをJSONレスポンスに変換できます。