gsoap 复杂类型 序列化 问题(元芳, 你怎么看)

蠢猪 发布于 2012/11/13 13:04
阅读 1K+
收藏 0
相关wsdl协议如下
<wsdl:operation name="FUNC">
<wsdl:input ws:Action="http://tempuri.org/XXXService/FUNC" message="tns:XXXService_FUNC_Input"/>
<wsdl:output ws:Action="http://tempuri.org/XXXService/FUNCResponse" message="tns:XXXService_FUNC_Output"/>
</wsdl:operation>

<wsdl:message name="XXXService_FUNC_Input">
<wsdl:part name="parameters" element="tns:FUNC"/>
</wsdl:message>

<xs:element name="FUNC">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>

根据协议,对于入参gsoap自动生成下面类
class _ns1__FUNC
{ public:
/// A handle to the soap struct that manages this instance (automatically set)
    struct soap                         *soap                          ;
};
程序部分代码
int main(
         XXXService websoap;
    _ns1__FUNC ns1__FUNC;//入参
    _ns1__FUNCResponse ns1__FUNCResponse;//出参
    int ret = websoap.__ns1__FUNC(&ns1__FUNC,     &ns1__FUNCResponse);
    cout<<"返回值为"<<ret<<endl;
        return 0;
)
协议需要入参应该是一段xml代码
"<?xml version=\"1.0\" encoding=\"utf-16\"?>"\
"<Condition>"\
"<ID>000</ID>"\
"</Condition>";
请问我如何把这段xml写到入参里面,
现在发送给服务端的数据都是空的。
<SOAP-ENV:Body><ns1:FUNC></ns1:FUNC></SOAP-ENV:Body></SOAP-ENV:Envelope>
我试过重新定义
class _ns1__FUNC
{ public:
     std::string xml;
/// A handle to the soap struct that manages this instance (automatically set)
    struct soap                         *soap                          ;
};
ns1__FUNC.xml=
"<?xml version=\"1.0\" encoding=\"utf-16\"?>"\
"<Condition>"\
"<ID>000</ID>"\
"</Condition>";
可是发送过去的数据还是空的,没有序列化上

初次使用gsoap,对wsdl也是不太熟悉,问题可能描述不太清楚
加载中
0
蠢猪
真的是对c++无语了,调个webservice这么多问题
0
蠢猪
真的不想放弃,真想把这个问题解决,真的不想换java
0
蠢猪


<xs:element name="FUNC">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
有谁遇到过  输入参数为空结构体的?


谁能告诉我wsdl这样定义符合规范吗?一个复杂类型FUC里面什么都没有


0
CoserSeu
CoserSeu

还不如抛弃gsoap,直接包装soap对象后post过去,将返回的字符串写个parser解析。

0
蠢猪

此问题已解决

原因是

<xs:element name="FUNC">

<xs:complexType>

<xs:sequence/>

</xs:complexType>


</xs:element>

wsdl地址是错的,上面那个据说是内部wcf调用的,实际上webservice调用的是有参数的。

返回顶部
顶部