【问题标题】:Perl module not getting correct web service outputPerl 模块未获得正确的 Web 服务输出
【发布时间】:2015-05-22 21:56:29
【问题描述】:

有人可以验证这个 sn-p 并指出我可能做错了什么吗?

这是我创建和执行 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 新手,所以这可能是一件愚蠢的事情。

【问题讨论】:

  • 您实际上是如何访问 ws 响应并尝试打印内容的?如果您怀疑那里有错误,您应该显示该代码。
  • 看起来响应正文是正确的。请展示您正在做什么以访问其中的 JSON,或者更确切地说,您正在做什么以每次获取 1
  • 除非您禁用了反序列化,否则您的变量 $results 将是一个 SOAP::SOM 对象。我建议你use Data::Dumpdd $results-&gt;body 这样你就可以更好地看到你有什么。如果您需要任何进一步的帮助,您还应该显示转储程序输出

标签: json perl client perl-module


【解决方案1】:

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

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

{
          '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"}'
        };

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

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

我认为那是因为字符串中的'return',也许我可以把它去掉然后传递给解码?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多