我正在开发一个与第 3 方集成的 SOAP 应用程序。我觉得这个第三方的 WSDL 很奇怪。我对 SOAP 很陌生,所以如果它没有损坏,我不想去要求他们修复它。以下是我注意到的一些我认为错误的事情,尽管我确信它在技术上是一个有效的文档(因此我在标题中写了“最佳实践”)。另外,我使用 gSOAP 作为我的 SOAP 库,这可能就是为什么我认为其中一些东西很奇怪(我对 gSOAP 的了解甚至比对 SOAP 的了解还要新)。
它们在同一个 WSDL 中为 SOAP 1.1 和 SOAP 1.2 指定了接口。这会导致 gSOAP 生成两倍于它需要的类,因为我只打算使用 1.2。
他们所有的命名空间都是
http://tempuri.org
. 那不应该是这样的,对吧?尽管定义了一堆 RPC 调用,但它们的 WSDL 使用文档格式。我正在考虑要求他们切换到 RPC 格式,因为 gSOAP 似乎不会生成将 C++ 类型参数用于文档格式的方法。相反,它为每个 API 函数的输入和响应数据创建一个新类。如果我不能解决这个问题,我将不得不编写另一层包裹 gSOAP 的东西,以便为我的应用程序的其余部分提供合理的 API。此外,AFAICT,如果他们切换到 RPC,将来回传输的 XML 将与现在完全相同,所以我认为这并不困难。
元素具有 minOccurs = 0 但是当我在没有它们的情况下提交请求时,我得到返回的错误表明它们是必需的(有时甚至是空指针异常的堆栈跟踪)。如果需要,他们应该将它们指定为 minOccurs = 1,对吗?
几乎所有的 Web 服务函数都指定了一个响应,其中包括一个表示成功的整数(实际上是一个布尔值)和一个错误消息字符串。他们应该为此使用 SOAP 错误吗?我认为如果它是一个错误,我的应用程序会更容易处理,因为 gSOAP 会让我很容易地解决这个问题(并简单地打印错误消息)。
当然,我不希望这家第 3 方公司仅仅因为我要求他们就改变他们的 WSDL。至少我会学到一些东西……据我所知,这些都不是错误的,甚至没有问题。谢谢你的帮助。