当前位置: 首页 > 知识库问答 >
问题:

SOAP::Lite(WSDL)响应未正确反序列化(引用)

端木皓君
2023-03-14

我对SOAP响应有问题,希望有人能帮助我。

当SOAP响应被SOAP::Lite模块反序列化时,我认为出了问题。在SOAP-响应中有一些“正常”节点和被引用的节点。但它不正确的反序列化。

SOAP响应:

    <?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:SOAP_GetFirmenlisteResponse xmlns:ns1="http://www.4d.com/namespace/default">
    <ERRORNUM xsi:type="xsd:int">0</ERRORNUM>
    <ERRORTEXT xsi:type="xsd:string">
</ERRORTEXT>
    <LISTE_KDLF_NR_ALS_IDS href="#ref-1"/>  <LISTE_SUCHNAMEN href="#ref-2"/>    <LISTE_LFD_NR href="#ref-3"/>   <LISTE_TIMESTAMP_GEAENDERT href="#ref-4"/>  <LISTE_TIMESTAMP_ERZEUGT href="#ref-5"/>
</ns1:SOAP_GetFirmenlisteResponse>
<SOAP-ENC:Array id="ref-1" SOAP-ENC:arrayType="xsd:string[4]">
<item1>19288</item1>
<item2>19289</item2>
<item3>60107</item3>
<item4>71897</item4>
</SOAP-ENC:Array>
<SOAP-ENC:Array id="ref-2" SOAP-ENC:arrayType="xsd:string[4]">
<item1>Blabla1</item1>
<item2>Blabla2</item2>
<item3>Bla München</item3>
<item4>Blaürm BÄR</item4>
</SOAP-ENC:Array>
<SOAP-ENC:Array id="ref-3" SOAP-ENC:arrayType="xsd:int[4]">
<item1>-8423</item1>
<item2>-8426</item2>
<item3>-8425</item3>
<item4>-8428</item4>
</SOAP-ENC:Array>
<SOAP-ENC:Array id="ref-4" SOAP-ENC:arrayType="xsd:string[4]">
<item1>2015-11-23T09:32:23</item1>
<item2>2015-11-26T14:55:52</item2>
<item3>2015-11-26T08:07:26</item3>
<item4>2015-11-27T09:26:25</item4>
</SOAP-ENC:Array>
<SOAP-ENC:Array id="ref-5" SOAP-ENC:arrayType="xsd:string[4]">
<item1>2015-11-23T09:30:54</item1>
<item2>2015-11-26T14:52:06</item2>
<item3>2015-11-25T10:33:27</item3>
<item4>2015-11-27T09:24:05</item4>
</SOAP-ENC:Array>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

结果哈希的转储:

$VAR1 = {
          'ARRAY(0x2c16e08)' => undef,
          '0' => '',
          'ARRAY(0x2f42168)' => [
                                  'Blabla1',
                                  'Blabla2',
                                  "Bla M\x{fc}nchen",
                                  "Bla\x{fc}rm B\x{c4}R"
                                ],
          'ARRAY(0x2f39680)' => [
                                  '2015-11-23T09:32:23',
                                  '2015-11-26T14:55:52',
                                  '2015-11-26T08:07:26',
                                  '2015-11-27T09:26:25'
                                ]
        };

Perl代码:

#!/usr/bin/perl

use Data::Dumper;
use SOAP::Lite +trace => [ transport => \&log_message ];

sub log_message {
   my ($in) = @_;
   my ($cont) = $in->content;
   $cont =~ s/></>\n</g;
   print "\n-------------------------------------------------\n";
   print $cont;
   print "\n-------------------------------------------------\n";
}

my $soap    = SOAP::Lite->service('http://192.168.0.13:8181/4dwsdl');

$soap->envprefix('SOAP-ENV');
$soap->encprefix('SOAP-ENC');
$soap->soapversion('1.1');


my %result  = $soap->SOAP_GetFirmenliste(
                                    '00',
                                    'SOAPTest',
                                    'soaptest',
                                    '0000-00-00',
                                    '2015-10-01'
                                    );

print Dumper(\%result);


exit 0;

共有1个答案

傅志诚
2023-03-14

我很确定你的问题是:

my %result  = $soap->SOAP_GetFirmenliste(

因为打印的结果表明它返回的第一个元素是数组ref(正在转换为字符串)。

恐怕我不能直接告诉它会返回什么,我建议尝试:

my $result = $soap -> SOAP_GetFirmenliste( 

然后打印转储程序$result

这应该准确地显示您得到的是什么样的数据结构——它不会是散列。

 类似资料:
  • 根据这里描述的内容,我应该使用JSR-310表示而不是数字表示来序列化对象。但是,我得到了数字表示。可能有什么问题? 我是这样配置我正在使用的映射器的: 这是我得到的反序列化示例 对于以下事例类:

  • 我是SOAP::Lite的新手,正在尝试快速入门。我有一个支持SOAP的JAMA服务器(需求收集应用程序),我正在查看它的WSDL。 我需要的SOAP::Lite信息在WSDL中可用吗(特别是代理和命名空间/uri)? WSDL包含以下内容: 作为将来的参考,我确实让它大部分工作正常,下面是代码: 我运行的PERL代码是: 我传递给getVersion()的参数肯定是错误的,这是否足以导致函数不返

  • 我以前从未使用过JSON,我想序列化

  • 问题内容: 我一直在尝试将对象序列化为CSV,但是该对象包含,并且不能在对象上使用。 预期样本输出 : 实际输出 : 这是我的代码 :(其中大多数是2个POJO) 我尝试的一切似乎都没有任何效果,但找不到有效的解决方案。 抱歉,我无缘无故留下的毫无意义的注释,如果您回答了代码,请随时删除它们。 问题答案: 从错误中,我想相信这与您的模式有关,该模式的列取自on 而不是值。 您可能想在其中添加,但是

  • 我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法

  • 奇怪的是下面的测试用例会失败。有人知道为什么吗?