问题标签 [soapserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1173 浏览

php - php soapserver返回更好的可读关联数组

我正在使用 PHP SOAPSERVER 类。

作为响应,我发送关联 php 数组:

SOAP 返回是这样的:

这样的回报很难为人类分析(给定更大的数组)。首选形式是这样的:

这样的 SOAP 返回是否可能(不更改返回类型 - 数组)?如何?

我刚刚开始使用 SOAP,大多数教程都展示了如何返回简单类型,如字符串。

0 投票
1 回答
810 浏览

php - 将 wsdl 中的任何模式元素与 PHP SoapServer 一起使用

我似乎无法使用 PHP SoapServer 让 XSD 元素在我的 wsdl 中工作。根据我所阅读的所有内容,并了解其他几家公司如何实现“松散类型”wsdls。以下内容应该足以检索和发送记录信息。

不幸的是,似乎 php SoapServer 类丢弃了任何未严格定义的元素。我得到的是创建请求上的空记录并在检索/过滤请求上发送空记录,尽管在 SoapServer 处理之前这些字段显然就在那里。

如果我像这样专门定义缺少的字段...

那么一切都很好,这些字段会传递给客户端/从客户端传递。我错过了什么吗?我已经尝试了所有命名空间选项##any、##local 等以及 processContents 选项。我只想能够发送/返回记录的额外字段,无论它们是否在模式中详细说明。

0 投票
1 回答
287 浏览

php - 具有无限参数的wsdl操作

我必须为从另一个服务传递数据的 SoapServer 创建 WSDL。提供给我的数据具有以下结构:

这意味着我必须创建方法

不可能知道有多少参数将提供给我的操作。

作为一种解决方案,我正在尝试为不带参数的方法创建 WSDL,但在此方法内部使用该函数func_get_args()来获取所有参数。

不幸的是,我仍然无法创建正确的 WSDL,而且我不确定这是否可行。

我的网络服务应接收的精确数据(示例)如下:

您是否对此类 WSDL 有任何经验,或者对如何获得提供的数据结构有一些想法?

我虽然考虑考虑作为参数名称的可能性,所以其他数据可以用作复杂类型。也许 WSDL 提供了一些技巧......

0 投票
2 回答
6332 浏览

web-services - 带有 symfony2 的肥皂网络服务

我需要使用 symfony2 创建一个 Web 服务,我阅读了官方文章http://symfony.com/doc/current/cookbook/web_services/php_soap_extension.html 在示例中它创建了一个带有参数路由 .wsdl 文件的 SoapServer 实例,这是什么文件?我没有在 symfony 中找到太多关于肥皂的文档。请帮忙?

0 投票
1 回答
3559 浏览

php - 使用 PHP 的 SOAP 在服务器端修改发送的 XML

一个关于PHP的SoapClient和SoapServer,WSDL模式的问题。

比方说,我需要为 XML 的某个部分创建一个摘要,其中包含其中的数据。使用 SoapClient 很容易。我从类中重载__doRequest()方法SoapClient,对某些元素进行散列并将其作为元素附加<Hash></Hash><SOAP-ENV:Header/>. 然后我将生成的 XML 发送到 SOAPServer 调用parent::__doRequest()

我需要对响应 XML 做同样的事情。在服务器方面,我遇到了困难。似乎服务器只能将数据作为嵌套数组或对象发送,并且以某种方式插入到客户端的响应 XML 中。我尝试发送带有SoapServer' 响应的 XML,然后它返回空 XML。

我真的需要在服务器端解析和修改 XML(制作哈希、数字签名等),但到目前为止,无论我在哪里搜索,我都没有找到答案,所以我真的很感谢你的帮助。谢谢。

0 投票
1 回答
9199 浏览

php - 如何在soapServer 响应中返回自定义XML 响应?

我正在设置一个接受 XML 输入并且必须返回自定义 XML 输出的 SOAP Web 服务。所有这些都在 WSDL 中定义。我为此应用了soapServer(直到有人说它存在阻止我实现目标的错误:-))。

我还不能返回自定义 XML:我得到了一些似乎基于 WSDL 的结果,其标准根元素名称等于输入 XML 加“响应”。实际上,这也让我感到惊讶,所以作为一个附带问题,我想知道为什么会这样以及它是否会受到影响。当然,在创建响应时以某种方式使用 WSDL 定义是一件好事,但正如我所说,我不知道如何在响应中获取自定义 XML。

我做到了这一点:

WSDL

输入 XML

当前的PHP

上面使用的 XSLT 只是更改属性的一种方式——临时将根名称更改为服务器始终返回的名称(以防万一:-))

我希望返回 XML 类似于

但相反它是

在上面的 php 中调试 $dom 内容准确地显示了我尝试返回的 XML(当然,包装在 SOAP Envelope/Body 中,就像输入的一样):

我哪里错了?如何将自定义 XML 放入返回的 http 响应内容中?

0 投票
2 回答
4009 浏览

php - 如何填充复合消息并作为 SoapServer 响应 XML 返回?

我正在设置一个 SOAP Web 服务,它应该返回一个复合消息。
此消息的有效实例如下:

所有这些都在 wsdl 中整齐地定义:

我一直在服务器端 test_soap.php 无休止地工作以使其正确,但我没有成功。在返回 XML 之前正常工作的部分内容如下:

我几乎尝试了我能想到的所有方法来得到正确的响应,但我没有成功。我能够对之前仅包含一个部分的消息执行相同的操作(请参阅我最近的问题+答案)。
但是在这里,有两个消息部分,我没有成功。

$xml 内容的调试表明它正是我希望看到的返回,当然,在让肥皂服务器将其包装到 Envelope+Body 之后。

实际上,这种情况与只有一个消息部分的情况不同:只要我先剥离 XML 声明,然后返回它,我就可以从一个部分创建一个新的 SoapVar。在这里我不能这样做,因为返回值由两部分组成。

所以我想知道我现在应该做什么:

  1. 为响应消息声明一个类并填充并返回它
  2. 使用 SoapVar 和/或 SoapParam 执行一些魔术(请注意,我已经尝试了很多)
  3. 使用数组和 SoapVar 执行一些魔术(已经尝试了很多)
  4. 不知何故(如何?)向wsdl寻求帮助
  5. 完全不同的东西
  6. 用 SoapServer 退出整个噩梦,从头开始创建我自己的 http 响应

我感谢所有的帮助,所以所有的肥皂专家,不要犹豫,试着回答这个问题!

添加

作为临时解决方法,我编辑了 WSDL,将响应消息更改为只有一个部分。这允许我将预期的消息作为预期的两个部分的串联传递(或任何其他消息,因为 SoapVar 没有对返回的值进行消息定义的结构 WSDL 检查):

对此的特殊之处在于,连接当然不是有效的 XML,缺少周围的根元素,但 SoapVar 无论如何都能解析它。

就是这样:任何对 SoapVar 和 SoapParam / SoapServer 有详细了解的人都可以解释是否有可能返回两个消息部分?
并解释如何做到这一点?
或者,提供有关如何在其他 SOAP 设置中执行此操作的详细信息?

0 投票
2 回答
1789 浏览

php - 从 PHP SoapServer 返回一个 JSON 对象

如何强制我的 PHP SoapServer 发送 JSON 对象作为响应而不是 XML 文档?

谢谢。

0 投票
1 回答
1459 浏览

php - 当 wsdl 消息具有相同的部分名称时,SoapServer 不正确地映射函数

我不确定这是 php 错误(错误的实现)还是我的错误(对 SOAP 协议/SoapServer 的理解不佳,因为这是我第一次使用 SoapServer)

我注意到如果有两个或多个相同的操作wsdl:part(即使wsdl:message, operation 和 soapAction 不同), TheSoapServer总是会调用第一个函数。在这个例子中,我有两个函数multiply2,并且multiply4都有num(int) 作为输入参数。今天早些时候,如果我更改部件名称 (service1.wsdl),则功能映射正确。

虽然,我不介意使用不同的名称,但在我看来它就像一个错误。我错过了什么还是应该打开一个错误?

这是我创建的简单示例:

非常简单的php类

并且稍微改变了 SoapServer (增加了日志记录 -改编自这篇文章)但是当我使用普通的 SoapServer 时也会出现问题:

这是客户端代码:

service.wsdl并且service1.wsdl基本上是相同的文件,但有两个例外:

  1. 它们的端点不同(service.wsdl指向http://tests.simsimy.info/web/service.phpservice1.php指向http://tests.simsimy.info/web/service1.php每个端点使用适当的 wsdl 来加载SoapServer
  2. inservice.wsdl multiply2Requestmultiply4Request具有作为部件名称 - num,而 inservice1.wsdl名称不同 ( num2and num4)

这是 service.wsdl 的完整 wsdl

中的更改部分service1.wsdl

当我运行客户端代码时,我得到以下输出:

0 投票
2 回答
5830 浏览

web-services - 使用 wsdl 的 Perl Soap 服务

我正在尝试使用 SOAP::Lite 创建 SOAP 服务,但它不返回值。它在 soap_client.pl 第 6 行的 print 中给出了错误使用未初始化值 $result。

安装的 perl 模块:

阿帕奇模块:

肥皂服务器:math.pl

肥皂客户端:soap_client.pl

wsdl 文件:math.wsdl

当我运行soap_client.pl时,它给了我以下错误:在soap_client.pl第6行打印中使用未初始化的值$result。我已经尝试了2天,没有得到任何线索我做错了。