问题标签 [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 回答
236 浏览

multithreading - SOAP::Lite - 在 mod_perl 中使用 1.1 和 1.2 版的客户端

我有几个 SOAP::Lite 客户端在 Apache hhtpd 的 mod_perl 下运行。他们中的一些人使用 1.1 的肥皂服务器,而他们中的一些人使用 1.2 的服务器。所以我有如下代码:

这适用于独立客户端,但是当我在 mod_perl 下运行代码时,我似乎被该soapversion 方法有副作用所刺痛:

这就是我认为会发生的事情:

基本上,该soapversion调用重新定义了$SOAP::Constants. 而且由于这是 mod_perl,它$SOAP::Constants是全局的,并且在每个服务器线程之间共享(我相信。如果我错了,请纠正我)。这导致了竞争条件:大多数时候,代码行或多或少地按照上面看到的顺序执行。但是偶尔(实际上大约 2% 的调用)执行顺序是:

因此,$soap1->method1()使用 set 作为适合版本 1.2 调用的$SOAP::Constants方法 - 导致多个命名空间出错,特别是:

这对 1.1 来说是错误的 - 谁更喜欢:

如果我能以某种方式$SOAP::Constants本地化到服务器线程或类似的东西,我想一切都会好起来的。但任何解决方案将不胜感激。

0 投票
3 回答
598 浏览

perl - SOAP::Lite,参数寻址

我正在使用SOAP::LiteWSDL 定义的 Web 服务。

我的要求(工作正常)就是这样。

我的 perl 代码。

这也行得通。

但我喜欢命名/寻址我的参数 p1 和 p2 以获得更大的灵活性。

我用哈希试过了

还有SOAP::Data.

但它不是那样工作的。

期望字符串值而不是SOAP::Data引用

任何想法如何命名我的参数?

编辑

我喜欢使用 wsdl 服务。那么我怎么知道服务函数如何期望它们的参数呢?这就是我问题的核心。我考虑了解决方法的参数命名。

0 投票
1 回答
654 浏览

perl - 使用 SOAP::Lite 在“方法”元素中定义命名空间

我正在使用 SOAP::Lite 连接到外部服务。经过多次反复试验和与另一家公司的沟通,我发现了问题所在。

我的代码如下所示:

这将产生以下 xml:

url_link有效的网址在哪里)

我需要定义额外的命名空间。我已经通过添加->ns(namespace, prefix)到我的代码来做到这一点。但是,这会将额外的命名空间添加到“ envelope”标记中。公司通知我,命名空间需要在“ CreateAssignment”标签上。事实上,当我进行适当的更改并使用 SOAP UI 运行它时,它运行良好。

我尝试将“ CreateAssignment”标记添加到我的 xml 并在call()没有方法的情况下运行该函数。SOAP::Lite 将 xml 包装在一个通用标记中。

我已经阅读了 SOAP::Lite 文档,我问过搜索引擎,我问过同事,但没有人给出答案。

有没有办法强制 SOAP::Lite 将命名空间声明放在我需要的地方?

如果没有,使用什么模块更好?

0 投票
1 回答
175 浏览

perl - Perl SOAP::Lite 添加 CDATA

我正在使用SOAP::Lite模块调用 Web 服务,如下所示:

那没起效。所以我使用 SOAPUI 工具调用 Web 服务来查看 xml 结构。

然后我在调试模式下运行我的代码(使用 SOAP::Lite 'debug'),查看创建的 xml 并与 SOAPUI 工具的 xml 进行比较。唯一的区别是 SOAPUI xml 包含 CDATA 标记,如下所示:

搜了一下发现是用CDATA来防止特殊字符引起的错误

如何使用 Perl 代码添加此标签?

0 投票
1 回答
488 浏览

perl - 发送非常具体的 SOAP::Lite 请求

我的公司使用了很多内部 API,这些 API 使用非常具体的标题和格式要求。我是 SOAP::Lite 的新手,我正试图让它在公司的框架内工作。

尝试#1: 理想情况下,我希望能够只获取原始 XML 模板(见文章底部),填充一些占位符变量,然后使用以下代码将其发送到端点:

但是,这会导致我的标头和请求部分被包含在它自己的“信封”、“正文”和“InquireEnterpriseOrderDataRequest”中,被服务拒绝。

尝试#2: 接下来我尝试将我的请求分成两部分:标头和请求并使用SOAP::DataSOAP::Header发送它们:

除了 InquireEnterpriseOrderDataRequest blob 不包含似乎需要的 xsi:schemaLocation、xmlns 或 xmlns:xsi 值之外,这产生了与所需内容非常相似的请求。

尝试#3: 现在我正抓紧救命稻草,所以我还尝试使用以下内容精细地创建我自己的 XML:

这里的问题是我不知道如何包含 xsi:schemaLocation、xmlns 和 xmlns:xsi 值或添加标题信息。

当然,我想采用最简单的实现方式,但欢迎提出任何建议!提前致谢!

要求的请求格式:

0 投票
1 回答
143 浏览

perl - 基本 SOAP::Lite 用法

我无法使用最基本的 SOAP::Lite 示例。

最初,我收到关于版本不匹配的错误,所以我soapversion('1.2')根据这个问题添加了。

我不再收到版本错误,而是得到:result = $VAR1 = 'Error';

0 投票
2 回答
193 浏览

xml - 使用 SOAP::Lite 客户端处理发送响应缺少命名空间规范的服务器

我正在编写一个 SOAP::Lite 客户端来使用 SOAP 服务器,该服务器有时会发送缺少命名空间规范的响应。这是我第一次用 SOAP 做任何事情,所以我根本不是很了解。这是一个示例响应:

注意使用没有规范的“xsi”命名空间。'xsd' 也应该有一个?SOAP::Lite 给了我这个错误信息:

鉴于我无法控制服务器,我将如何在客户端中使用 SOAP::Lite 解决此问题?我有什么方法可以告诉 SOAP::Lite 假设我提供的命名空间?

0 投票
1 回答
571 浏览

perl - 如何修复 WSDL 文件格式不正确(无效令牌)问题

我创建了 WSDL 文件,用 PERL 肥皂方法连接文件。执行后我收到以下错误消息

/usr/lib/x86_64-linux-gnu/perl5/5.26/XML/Parser.pm 第 187 行的第 1 行第 1 列第 1 字节格式不正确(无效令牌)。”。

请让我知道必须解决此问题。查看下面的源代码。

肥皂客户端.pl

肥皂服务器.pl

市场.wsdl

最后运行soap-client.pl 文件返回以下错误信息。

/usr/lib/x86_64-linux-gnu/perl5/5.26/XML/Parser.pm 第 187 行的第 1 行第 1 列第 1 字节格式不正确(无效令牌)。”。

0 投票
2 回答
85 浏览

perl - Perl,将元素附加到现有的 SOAP::Data 元素

我正在为 Perl (v5.24.1) SOAP::Lite 苦苦挣扎。我正在尝试将元素添加到现有的 Data 元素。

假设我有以下构造:

但现在我想添加 'N' 个Items元素,我想根据条件在循环中添加这个,这只是一个例子,我尝试了以下方法:

现在尝试添加元素

或者

返回是: 现在禁止对标量进行实验性推送....

最后,当元素加入时,我想发送它们,但我不确定这是否可行:

任何帮助将非常感激 ....

0 投票
1 回答
763 浏览

perl - 使用 Perl 的 Soap::Lite 调用简单的 Soap API

我正在尝试使用 SOAP::Lite 模块进行简单的 API 调用(至少这是我开始时的想法)。我在这里使用公开可用的 SOAP API 之一来添加两个数字。我收到以下错误:

服务器无法识别 HTTP Header SOAPAction: http://tempuri.org/#Add的值。

我在 SOAP::Lite 中启用了调试,看来我的请求格式不正确。我怀疑 intA 和 intB 中指定的类型 (xsi:type="xsd:int") 引起了问题。

调试请求:

这是我的 Perl 代码:

注意:我尝试在 SOAPUI 工具中加载 WSDL,并且 API 在那里工作正常。

更新

正如@simbabque 建议的那样,我尝试使用 LWP::ConsoleLogger 进行调试

标题如下所示:

我不知道#是从哪里来的。也许我会尝试 SOAP::Simple 看看它是否有帮助。

干杯