web-services - gSOAP 和一般 SOAP 问题

标签 web-services soap xsd wsdl gsoap

我正在使用 gSOAP 从 WSDL 文档创建 C++ 代码。问题是当我在 WSDL 文件上运行 wsdl2h 工具时,gSOAP 给出错误。这些错误都与命名空间问题有关。例如

警告:在架构 urn:tr069 中找不到元素“GetRPCMethods”类型““http://www.broadband-forum.org/cwmp/cwmp-1-2.xsd”:GetRPCMethods”

我在下面粘贴了命名空间定义和如何使用它们的示例。有人知道我哪里出错了吗?

urn:tr069 应该引用当前文档。

<s0:definitions 
    name="tr069"
    xmlns:s0="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:s1="urn:tr069"
    xmlns:s2="http://schemas.xmlsoap.org/wsdl/soap/"
    targetNamespace="urn:tr069">

<s0:types>

<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:tns="urn:tr069" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd1="http://www.broadband-forum.org/cwmp/cwmp-1-2.xsd"
    targetNamespace="urn:tr069">

  <xsd:import namespace="urn:dslforum-org:cwmp-1-2" schemaLocation="cwmp-1-2.xsd" />
  <xsd:element name="GetRPCMethods" type="xsd1:GetRPCMethods" />
</xsd:schema>
</s0:types>
<s0:message name="GetRPCMethods">
     <s0:part element="s1:GetRPCMethods" name="GetRPCMethods" />
</s0:message>
</s0:definitions>

我还有一些其他问题,据我了解,目标命名空间不必指向真实位置,它只是指向当前文档的约定,这是正确的吗?另外,在 cwmp-1-2.xsd 中,有一个名为 GetRPCMethods 的元素,其中包含一个包含另一个元素的序列。最好的做法是像上面那样使用整个元素(GetRPCMethods)作为消息的一部分,还是应该在消息中定义 GetRPCMethods 的特定部分?

谢谢。

最佳答案

问题出在<schema>中定义的元素。标签。首先,我删除了 <schema> 中所有定义的元素。标签,因为无论如何它们都是完全没有必要的。然后,我将消息部分中元素的命名空间从 s1 更改为 xsd1,以使用 cwmp-1-2.xsd 中的元素,而不是我在 <schema> 中定义的元素。标签。

至于我的其他问题,targetNameSpace 不必指向真正的 uri,它只是此文档的命名空间的名称。对于我的第二个问题,我认为使用整个架构元素作为消息的一部分可能是最好也是最简单的。

关于web-services - gSOAP 和一般 SOAP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156945/

相关文章:

c# - 检查代码是否从 Windows 窗体应用程序调用

java - 用于过滤 SOAP 消息的 JXPath

python - 使用 Python 和 suds 0.4 的 SAXParseException?

xml - 使用什么算法根据 XSD 验证 XML?

java - 从架构中检索根元素

java - 如何从独立的 java 文件调用 JAX WS?

objective-c - 操作无法完成。 ( cocoa 错误 : 3840.)

java - 使用 PHP Soap 服务器和 Java 客户端的 Web 服务

wcf - 如何在 WCF 中接受基类型的集合

java - org.xml.sax.SAXParseException : cvc-complex-type. 2.4.c: 匹配的通配符是严格的