2011年10月29日土曜日

C++でSoapは、マイノリティ?

ここんところ、プラットフォームに依存しない Soap ライブラリというテーマで、どハマリしてます。axis2 の wsdl2c では、xsd ファイル中の、abstract が処理できませんでした。GML の Filter も曲者でして、abstract な choise で4つのタイプに派生して、それぞれが、また、abstract で複雑に派生していきます。中には BinaryOp, UnaryOp とかもあって、SentenceStatement(文)とExpression(式)までXMLで表現しているので、人手でコードを補完して書くレベルを超えてます。あわよくばパッチを当ててやろうか?と思って、SchemaCompiler.java を読んでみたもののパッと修正できる代物では無さそうでした。C++ のコードは、XSLT を使って処理しているようでしたが、xsd:include を使ってないので、ごった煮でコードが読みにくい。
 で、まともに処理できたのは、gSOAP でした。SOAP Toolkit を使って ISAPI Extension を記述し、mod_isapi を利用するという手もあるとは思いますが…。
 はたと、思い出したように akaxsio2 引っ張り出してみたんですが、コンパイル通りませんでした。strcpy とか使っている部分は、string.h を include する。アドレス計算している部分は、int から stddef.h の ptrdiff_t に変える。unsigned int でなく size_t を使うといったあたりまでは、パッチを当てれそうでしたが、mutable output_file& の部分が、ちょっと厳しくて挫折しました。const output_file& に変えて、const_cast 使えば、なんとかなるかも…。でも gml のスキーマを通すのは、並大抵の事ではなく、akaxiso2 も通さなかったような記憶があります。akaxiso もちょろちょろソースを見たのですが、相当な大作です…。今なら、fusion とか使って、もっとクールに表現できそうな気もするけど、xml ライブラリは、しんどいですわ。
 お前、OpenSoap にパッチ当ててたやん?どないしてん?と思っている方もいるかもしれないので、触れておくと、ComplexType と array がサポートされていないので、使えませんでした。

0 件のコメント: