Perl模块无法获得正确的Web服务输出

时间:2015-05-22 21:56:29

标签: json perl client perl-module

有人可以验证此代码段并指出我可能做错了吗?

这是我创建并执行SOAP调用的代码。

my $soap = SOAP::Lite->new()->proxy($proxy)->ns('http://example.com', 'ser')->getInfo(
  SOAP::Data->name(chronicId    => $ticket_num)->prefix('ser'),
  SOAP::Data->name(sourceSystem => $sourceSystem)->prefix('ser'),
  SOAP::Data->name(outputFormat => $outputFormat)->prefix('ser'),
  SOAP::Data->name(uid          => $uid)->prefix('ser'),
  SOAP::Data->name(username     => $username)->prefix('ser'),
  SOAP::Data->name(guid         => $guid)->prefix('ser')
);

$results = $soap->call($method);

当我使用测试脚本执行上述代码时,这是我得到的结果。

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <ns:getChronicInfoResponse xmlns:ns="http://example.com">
      <ns:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
        {
          "UID":"abc1234",
          "GUID":"",
          "CHRONICID":123,
          "OUTPUTFORMAT":"json",
          "USERNAME":"xyz",
          "STATUS_SUB_CODE_NAME":"Active",
          "SOURCESYSTEM":"abc",
          "STATUS_NAME":"Open"
        }
      </ns:return>
    </ns:getChronicInfoResponse>
  </soapenv:Body>
</soapenv:Envelope>

然而,当我尝试将Web服务器响应读入变量并将其打印出来时,我得到的只是1(它不是空的)没有别的。输出应该是JSON,如上所示,然后我需要解析。

任何猜测我可能做错了什么?我是Perl的新手,所以这可能是一个愚蠢的事情。

1 个答案:

答案 0 :(得分:1)

抱歉,我错过了更新。我可以使用转储器在这里看到一个正确的响应,似乎我在对结果进行打印时收到十六进制值,这是不正确的。

转储器返回一个JSON字符串,如 -

&#13;
&#13;
{
          'return' => '{"ATTUID":"pm304a","GUID":"d353f542-43f6-421b-9573-4c9c39ce77e3","CHRONICID":420,"OUTPUTFORMAT":"json","USERNAME":"m91619","STATUS_SUB_CODE_NAME":"Active","SOURCESYSTEM":"Oasis","STATUS_NAME":"Open"}'
        };
&#13;
&#13;
&#13;

现在我正在尝试使用JSON解析这个json:XS - decode_json,但最终出现了一个错误,上面写着

  

格式错误的JSON字符串既不是数组,对象,数字,字符串或原子,......

我认为那是因为&#39;返回&#39;在字符串中,也许我可以将其剥离然后传递给解码?