【发布时间】: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 诊断,还有一个问题,它被 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 触发。
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 团队分享您的想法,同时我会继续尝试修改服务器类。