【问题标题】:PHP SOAP server for SAP client has configuration issues in WSDLSAP 客户端的 PHP SOAP 服务器在 WSDL 中存在配置问题
【发布时间】:2019-08-23 13:40:54
【问题描述】:

我已经使用 NuSOAP 库编写了一个 ws SOAP 服务器,它工作得很好,但是由于客户端应该是一个 SAP 实现,所以在尝试从 SAP 访问它时会出现一些问题。 我的 WSDL 是由 nusoap 自动生成的,包含以下定义

<definitions targetNamespace="https://example.com/ws/" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:tns="https://example.com/ws/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
    <types>
        <xsd:schema elementFormDefault="qualified" targetNamespace="https://example.com/ws/">
        <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
        <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>

此 WSDL 已通过 soap-ui 5.5 验证,它适用于 php 客户端,但不适用于 SAP。 第一次我必须从rpc/encoding风格切换到document/literal,我可以通过更改nusoap服务器类中的一些配置值来实现它。

无论如何,根据 SAP 诊断,还有一个问题,它被 &lt;xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/&gt; 触发。

SAP 中的错误是Incorrect value: Unknown namespace http://schemas.xmlsoap.org/soap/encoding/ 我已经测试了该网址并且是正确的。 此外,我试图从肥皂服务器类中删除该行但没有成功,因为我找到了它并在 class.soap_server.php 的第 1106 行发表了评论

$this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/soap/encoding/'][0] = array('location' => '', 'loaded' => true);

但它对生成的 wsdl 没有任何影响。

任何想法都将不胜感激。提前谢谢你。

【问题讨论】:

  • 您没有说明如何在 SAP 端使用 WSDL,所以我假设您正在通过事务代码 SE80 或 SPROXY 创建客户端代理。您可以轻松地将 WSDL 下载到您的笔记本电脑,在本地对其进行编辑,然后使用此本地编辑的 WSDL 文件创建客户端代理。
  • Ey Sandra,谢谢您的意见。我不知道 SAP 团队如何管理他们的连接,因为这不是我的区域,但他们只是让我知道错误代码。所以你告诉我 SAP 可以通过本地编辑 wsdl 文件来管理连接,可以吗?再次感谢您。
  • 我确认。创建 SAP 客户端代理是一个经典问题,因为 SAP WSDL 解析器无法处理所有可能性,而且消息不够明确。 SAP note/KBA 944029(ABAP 代理生成支持的 XML 模式)解释了一些限制(但不是全部)。唯一的解决方案是 SAP 人员将 WSDL 调整到 SAP 允许的范围内,而不是 Web 服务提供商更改 WSDL!请记住,我的回答只有在 SAP 团队生成 ABAP 客户端代理时才有效。
  • 非常感谢 Sandra,我会与 SAP 团队分享您的想法,同时我会继续尝试修改服务器类。

标签: php sap nusoap


【解决方案1】:

我必须从 rpc/encoding 风格切换到 document/literal

SAP 不支持 Web 服务中的 RPC 样式,因此出现错误。

这里是解释如何调整它的 SAP 说明

https://launchpad.support.sap.com/#/notes/856597/Offline version

attach 示例解释了注释中包含的 WSDL 格式,以防您没有 S-login 访问注释。

【讨论】:

  • 感谢@Suncatcher 的回复。我不是这个主题的专家,但我在任何 complexType 定义中都选择了document/literal,其中 NuSOAP 有一个用于 usestyle 的占位符,但我认为这还不够。无论如何,显然 SAP 的违规行都在导入命名空间。 ``` schemas.xmlsoap.org/soap/encoding/"> schemas.xmlsoap.org/wsdl/">``` 因为被认为是“未知命名空间”
猜你喜欢
  • 2010-12-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多