【发布时间】:2019-08-20 16:07:33
【问题描述】:
目前我正在使用某些基于 SOAP 的 Web 服务;我想使用 SOAP::Lite 与这些服务进行通信。
在第一次测试中,一切正常;直到我的数据中有一个 & 符号 (&)。
执行请求时,我使用以下 sn-p 执行此操作:
my $or_client = SOAP::Lite->new(
proxy => '...',
readable => 1,
autotype => 0,
);
my $or_response = $or_client->call(
'aMethod',
SOAP::Data->name('company_name')->value('ACME'),
...
);
当我启用跟踪(添加行SOAP::Lite->import(trace => 'debug');)时,我可以看到以下数据发送到服务器:
<soap:Envelope
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
...>
<soap:Body>
<ns:aMethod>
<company_name>ACME</company_name>
...
</ns:aMethod>
</soap:Body>
</soap:Envelope>
这没有任何问题。但是当我的数据对象的值包含特殊字符时:
SOAP::Data->name("company_name")->value("ACME & Co.")
然后我收到 500 Internal Server 错误;带有错误字符串“意外字符''(代码32)(缺少名称?)...”
我检查了发送到 SOAP 服务的 XML,发现我在“ACME & Co”中的“&”不是以正确的方式转义的 XML:
<company_name>ACME & Co.</company_name>
有什么特殊的选项我必须打开吗?还是我必须在将其设置为value 之前为自己进行 XML 转义?
【问题讨论】: