0

XML Web サービスの一連のサンプル リクエスト ファイルから XSD を生成しました (Xmplify を使用しますが、それが重要であるとは思えません)。

これを gsoap で実行すると、エラーや警告は表示されませんが、soapcpp2 で -i または -j オプションを使用しても、C++ プロキシ ファイル (soapProxy.h など) が生成されません。

次のファイルのみが生成されます。

ns1.nsmap   
request.h
soapC.cpp
soapH.h
soapStub.h

使用するコマンド:

wsdl2h request.xsd 
soapcpp2 -i -C -I/usr/local/share/gsoap/import request.h

これらを生成するために必要な XSD について特定の何かがあると思いますか?

プロキシ ファイルを生成するにはどうすればよいですか? プロキシ オブジェクトがなくても使用できることはわかっていますが、見た目がかなり面倒です。

スキーマ ドキュメントは以下に含まれています。

アドバイスをありがとう!

フィル。

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='unqualified'>
    <xs:element name='REQUEST'>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref='USERTOKEN'/>
                <xs:element ref='ACTION'/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name='USERTOKEN'>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref='USERKEY'/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name='USERKEY' type='xs:NCName'/>
    <xs:element name='ACTION'>
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs='0' ref='PARAMETER'/>
            </xs:sequence>
            <xs:attribute name='NAME' use='required' type='xs:NCName'/>
        </xs:complexType>
    </xs:element>
    <xs:element name='PARAMETER'>
        <xs:complexType mixed='true'>
            <xs:attribute name='NAME' use='required' type='xs:NCName'/>
        </xs:complexType>
    </xs:element>
</xs:schema>
4

1 に答える 1

1

wsdl2h ツールは、XSD ファイルのプロキシおよびサービス コードを生成しません。これは、これらのファイルには操作が定義されていないためです (WSDL のみ)。XSD ルート要素に対して gSOAP によって生成された (デ) シリアライザーを使用して、C++ データ型から (デ) シリアライズされた XML データを送信/受信できます。例えば

#include "ns1.nsmap" // ns1 namespaces etc
struct soap *ctx = soap_new();
ns1__REQUEST r;
r.soap_default(ctx); // reset content
r.USERTOKEN = … // set r's content as needed
ctx.os = … // set the output stream
soap_write_ns1__REQUEST(ctx, &r); // serialize REQUEST

ストリーム、ソケットなどを介してデータを送受信できます。

于 2013-10-30T00:53:44.570 に答える