SOAP web服务始终在除一个客户端之外的所有客户端中返回状态500

SOAP web服务始终在除一个客户端之外的所有客户端中返回状态500

我希望有人可以帮助我并就此给我一些提示。

因此,我目前用 Java 开发了一个 portlet 应用程序,它依赖于远程 SOAP 基 webservice。该应用程序发布 xml 以从中获取数据,处理数据,然后将其发布回 webservice。

但出于某种原因,我无法从中获得“正确”的响应或至少是一些预期的结果。我总是得到一个带有代码 500(内部服务器错误)的 SOAP 响应和一些 SOAP 错误消息(由 Web 服务的主机/开发人员定义)。我还确切地知道我应该期待什么响应。

我可以访问文档和 wsdl 文档,因此我非常确定我的请求主体(在 text/xml 中)是正确的。
此外,我设法通过使用 SOAP 客户端从 web 服务获取正确的响应http://www.soapclient.com/soaptest.html(定义 wsdl 并使用生成的 HTML 表单)。但是,当使用任何其他客户端(如 SoapUI、Wizdler(Chrome 扩展程序)或 Postman)或用 Java 实现调用时,我得到的是“状态 500”。
在过去的项目中,至少 SoapUI 对我有用。我还尝试将请求 xml 文档作为一行或美化的 xml 发布,但没有效果。

我无法访问托管 web 服务的服务器,因此无法查看日志等。需要注意的一点是 web 服务使用 https。

另一件事是,文档和托管商的员工告诉我将一个参数附加到 URL,如下所示:'https://主机:端口/path_to_wsdl'-nohostverify 但是我无法明白如何操作,因为没有其他指定。

也许有人以前遇到过类似的问题或对这个问题有所了解。

答案1

我自己解决了这个问题(诚然,这个问题已经过去了一段时间,所以我的解决方案来得相当晚)。对于任何有类似问题的人:

事实证明,Web 服务并不期望纯 xml。请求的相关部分必须是“String”类型,这意味着 soap 主体中的特定 xml 元素不包含其他(常规)xml 元素,而是包含所有特殊字符编码为 HTML 数字的必要 xml 元素。

例子:

<soapenv:Envelope>
   <soapenv:Header/>
   soapenv:Body>
      <urn:webserviceNode>
          <requestContent xsi:type="xsd:String">
              &lt;subnode_A xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
                  &lt;subnode_A1&gt;some_string&lt;/subnode_A1&gt;
                  &lt;subnode_A2&gt;another_string&lt;/subnode_A2&gt;
              &lt;/subnode_A&gt;
          </requestContent>
      </urn:webserviceNode>
   </soapenv:Body>
</soapenv:Envelope>

直到我检查成功请求的响应并发现 Web Soap 客户端屏蔽了 html 编码的 xml 字符后,我才意识到这一点。请注意,此处的引号(以及我们德国的变音符号)也受到影响。

因此,我“仅”需要替换 soap 请求部分中的所有特殊字符,即可发出成功的请求。

我不知道这是否常见,但我怀疑这是一种常见的做法,而且我想不出为什么有必要实现这样的网络服务。

无论如何,案子已经结了。

相关内容