问题标签 [soaplite]

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 回答
1600 浏览

perl - Perl soap::lite 和复杂数据

我正在使用 perl soap::lite 来构建 Web 服务客户端。该实现适用于简单的方法,例如需要单个标量参数。EG,以下工作正常。

我需要调用一个方法,该方法需要一组更复杂的参数(几个标量加上一个键值对数组)。我想我应该使用 SOAP::Data 模块来正确序列化我的数据,但无法让它工作。即使是“简单”的方法(如上面的方法)似乎也不起作用。EG(仅显示从上面脚本更改的行):

产量:

关于如何解决这个问题的任何想法?非常感谢 !这里的参考是我的脚本中调用的方法的 wsdl

完整的 WSDL 如下所示 - 分成 3 个文件。主 WSDL 文件:

绑定文件(提取)

操作定义

0 投票
2 回答
513 浏览

perl - 有没有办法让同一个 Perl 库的两个版本并行?

我想迁移我的应用程序使用的 perl 库 (SOAP::Lite)。为了让最终用户尽可能顺利地进行迁移,我希望这个库的两个版本(旧版本和新版本)能够并行工作。

目标是让最终用户在需要时自行迁移他们的脚本(如果需要)。所以基本上,对于旧脚本,用户无需更改任何内容,而新脚本将使用新版本编写。

有谁知道如何进行?

0 投票
2 回答
2098 浏览

perl - SOAP::Lite 连接到 SSL 服务器

我对 Perl 完全陌生。我用 C# 编写了一个在 Windows 机器上运行的 Web 服务,并使用 SOAP::Lite 从 Linux 机器上的 Perl 脚本调用它。我的代码使用http://处理程序工作正常。我现在正试图让它与它一起工作https://

代码是:

当我运行发布的代码时,我收到错误“500 Can't connect to TestServer:443 at line 36”。服务器端的网络跟踪显示客户端发送 SYN,服务器发送 SYN/ACK,客户端发送和 ACK,然后客户端立即发送 FIN/ACK。

我已经尝试了各种方法来让它发挥作用。我试过了:

  • 取消注释该行#$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;会导致“500 无法连接到 TestServer:443(证书验证失败)。网络跟踪显示至少部分 HTTPS 协商正在工作。
  • 取消注释该行proxy($proxy, ssl_opts => [ SSL_verify_mode => 0 ] )有效,但这当然不会验证服务器的身份。
  • 取消注释该行-> proxy($proxy, ssl_opts => [SSL_ca_file => $ServerCACert])也会给出“证书验证失败”错误。
  • 将路径更改为$ENV{HTTPS_CA_FILE}在第 36 行给出错误“SSL_ca_file /home/myusername/TestServer_CA_cert.ceeer 不存在”。我认为这是一个好兆头;该代码正在查找我告诉它用于服务器身份验证的证书。
  • 取消注释$ENV{HTTPS_CA_DIR}$ENV{HTTPS_CA_FILE}行会给出错误“仅应给出 SSL_ca_path 或 SSL_ca_file”。

我已将我的 CA 证书导入 Linux 机器上的 Firefox 并成功浏览到我的测试服务器而没有收到 SSL 警告,然后从 Firefox 中删除了证书并浏览回来并收到了 SSL 警告,所以我有理由相信证书我的文件很好。

有人对如何修复此代码有任何想法吗?我应该检查 CA 证书本身的某些属性吗?我觉得令人费解的是,Firefox 信任使用该 CA 证书签署 SSL 证书的服务器没有问题,但我无法说服 Perl 也这样做。

任何反馈表示赞赏。请记住:我绝对是 Perl n00b。在我用 Google 搜索如何从 Perl 调用 Web 服务之前,我对 Perl 的唯一了解是“Larry Wall”。

谢谢!

更新:

应下面 Steffen Ullrich 的要求,我运行了以下命令:

我收到的输出是:

0 投票
1 回答
176 浏览

perl - SOAP::Lite 将参数作为类传递

我有下一个架构:

请告诉我我必须如何在方法 paymentUpdate 中发送参数(在 Perl 中)?

写什么?如何创建和发送所需的类型(paymentUpdate)?

0 投票
1 回答
2428 浏览

xml - EWS SOAP 请求失败

我正在使用 PERL 和 SOAP::Lite 对 MS Exchange Web 服务进行肥皂调用。我已经弄清楚了身份验证并正在使用 Oauth 令牌进行调用。我正在尝试调用此处记录的 GetInboxRules 。

基本上电话需要看起来像这样。

我的第一次尝试使用了以下代码:

这产生了以下 XML 以及 500 内部服务器错误说明:

“请求未通过架构验证:命名空间“ http://schemas.microsoft.com/exchange/services/2006/messages ”中的元素“GetInboxRules”具有无效的子元素“MailboxSmtpAddress”。预期的可能元素列表:“MailboxSmtpAddress”在命名空间' http://schemas.microsoft.com/exchange/services/2006/messages '"

我已经在设置名称空间,但为了尝试解决这个问题,我通过向 MailboxSmtpAddress 元素添加 uri 规范来指定名称空间my $som = $client->call('GetInboxRules', SOAP::Data->name('MailboxSmtpAddress')->value('eg7636@foo.com')->uri('http://schemas.microsoft.com/exchange/services/2006/messages'));

这产生了:

然后是 400 Bad Request 响应。我猜测错误的请求响应是因为 MailboxSmtpAddress 标记中包含 url,但我不知道如何指定命名空间。

这是我第一次使用 SOAP,因此非常感谢任何建议。

0 投票
1 回答
259 浏览

perl - Soap::Lite Perl 基本查询

我们得到了以下内容xml,需要翻译成 Perl。

我们的尝试:

我们得到不匹配的标签parser.pm

0 投票
0 回答
344 浏览

php - 将 PHP SoapClient 转换为 Perl SOAP::Lite

我正在编写一个使用 Five9 API 的 Web 应用程序。我有一个使用 API 打印出第一个用户的电子邮件的工作 php 脚本。我的应用程序在 Perl 中,我试图避免使用 PHP 脚本。我曾尝试使用 SOAP::Lite,但遇到了困难。这是我的工作 PHP 脚本。

这是我迄今为止使用 perl 和 SOAP::Lite 所做的工作

如果有人有使用 perl 和 SOAP 的经验,任何见解将不胜感激。

0 投票
1 回答
1586 浏览

xml - SOAP::Lite Perl 模块发送错误的 SOAP 信封命名空间

我在编写 SOAP/XML 客户端以与一家名为 Domainbox 的公司提供的 API 通信时遇到问题。我正在使用 SOAP::Lite 模块/库在 Perl 中编写客户端。我收到以下错误消息:

可能的 SOAP 版本不匹配:信封命名空间http://schemas.xmlsoap.org/soap/envelope/是意外的。期待http://www.w3.org/2003/05/soap-envelope

这是因为库使用 SOAP 1.1 命名空间发送 SOAP 信封,而服务器需要 SOAP 1.2。

但我无法提出解决方案,我尝试明确设置 $soap->soapversion('1.2'); 在 SOAP::Lite 对象中,但这只会影响在响应消息中收到的信封,而不影响客户端发送的信封。

服务器正在运行 ASP.net,并且似乎不想接受 SOAP 版本 1.1 消息。

默认情况下查询soapversion()方法它返回版本1.1,当我将它更改为1.2时它返回1.2但在内部它显然在某处忽略了这一点。

WSDL 似乎没有正确定义 xmlns:soap 或 xmlns:soap12 但 SOAP::Lite 也没有使用这些命名空间。我会提供一个链接,但我不能在这里发布超过两个。

我也尝试使用 SOAP::Lite 的 service() 方法,但这根本没有区别。

这是我正在使用的代码:

额外的:

信封中的 xmlns:soap 属性设置为http://schemas.xmlsoap.org/soap/envelope,无论类中的 soapversion 设置如何。我认为这是 Perl 模块中的错误或导致它的 WSDL 的一些奇怪之处。这是 WSDL:http ://sandbox.domainbox.net/?WSDL

XML 请求消息:

XML 响应消息:

更新:

谢谢鲍罗丁,你是正确的。SOAP::Lite 模块似乎没有将soapversion 参数传递给SOAP::Lite::Serializer 对象。我现在使用下面的代码来初始化 SOAP 对象,它工作得很好。

我应该指出,我还必须调整我的代码以适应 Domainbox 所需的 XML 格式,但我现在得到了有效的响应。

我现在唯一的问题是如何处理 SOAP::Lite::SOM 作为消息结果返回的哈希引用。我认为这需要一个单独的问题。

0 投票
1 回答
51 浏览

perl - Net::Kashflow - 不适用于 utf8 描述

我知道这是一个非常古老的 Perl 模块(自上次更新以来大约 5 年前)。我发现它对我正在做的项目很有用,它需要在 Perl 中。我发现这对做基础很有帮助,而不是从下往上开始。我已经用它修复了一些错误 - 但这个我无法弄清楚

有问题的模块是:https ://github.com/simoncozens/Net-KashFlow

该问题的一个示例用法是:

此项目被添加,但“描述”值被转换为:

7enzIGZvbyBiYXIgdGVzdA==

如果您使用正常的 az 0-9 它可以正常工作(并且显示正确)。问题似乎是它的编码为base64,然后在另一端没有被正确解码。我的猜测是 KashFlow 不会“修复”这个问题,所以它确实需要为此完成。我对 SOAP::Lite 模块并不十分熟悉(同样,它似乎是一个相当古老的模块!),但这就是它所使用的。

这是我认为处理在发票中添加新“行”的部分:

你可以在这里看到结构:

https://securedwebapp.com/api/service.asmx?op=InsertInvoiceLine

在对此进行研究之后,建议您告诉SOAP::Lite不要使用(假设)将 utf8 转换为 base64,例如:

结构是:

所以看起来像它的Body > InsertInvoiceLine > InvLine > Description .. 但我不确定我怎么能告诉它不要编码那个特定的字符串。

任何建议将不胜感激。虽然它不是一个主要的显示停止器(因为所有数据都在系统中),但按预期查看项目名称会更好/更容易:)

谢谢!

0 投票
1 回答
30 浏览

asp.net-web-api - 在 SOAP::Lite 中不识别元素的类型

我尝试通过方法“服务”传递 WSDL URL 从 SOAP::Lite lib (perl) 调用 WebApi (ASP.Net):

我已收到答案,但响应中的所有元素都被处理为“字符串”,但不是其他的;例如,我期望1or0用于 bool 类型,但获取字符串truefalse.