Perl + SOAP :: Lite

时间:2010-08-05 19:25:44

标签: perl soap soaplite

这是我尝试使用SOAP :: Lite建模的SOAP文档。

<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<GetOrderByPartnerOrderID xmlns="http://api.geotrust.com/webtrust/query">
    <Request>
        <QueryRequestHeader>
            <PartnerCode>partnercode</PartnerCode>
            <AuthToken>
                <UserName>username</UserName>
                <Password>password</Password>
            </AuthToken>
        </QueryRequestHeader>
        <PartnerOrderID>partnerid</PartnerOrderID>
    </Request>
</GetOrderByPartnerOrderID>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

以下是我用于对此文档进行建模的Perl代码。

my $params = SOAP::Data->name("Request" =>
               \SOAP::Data->value => (
                   \SOAP::Data->name("QueryRequestHeader" => 
                       \SOAP::Data->value(
                          SOAP::Data->name("PartnerCode" => $partnercode),
                          SOAP::Data->name("AuthToken" => 
                             \SOAP::Data->value(
                                 SOAP::Data->name("UserName" => $username), 
                                 SOAP::Data->name("Password" => $password)
                              )
                           )
                        )
                   ),
                   \SOAP::Data->name("PartnerOrderID" => $poid)
                );

但是,此代码生成的SOAP文档(我使用带跟踪的SOAP :: Lite)如下:

<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
    <GetOrderByPartnerOrderID xmlns="http://api.geotrust.com/webtrust/query">
        <Request>
            <QueryRequestHeader>
                <PartnerCode>partnercode</PartnerCode>
                <AuthToken>
                    <UserName>username</UserName>
                    <Password>password</Password>
                </AuthToken>
            </QueryRequestHeader>
        </Request>
        <Request>
            <PartnerOrderID>partnerid</PartnerOrderID>
        </Request>
    </GetOrderByPartnerOrderID>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

由于某种原因,它会关闭Request标记,然后再次打开它。它似乎应该是一个简单的解决方案,但我已经尝试了我能想到的一切,但无法弄明白。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

想出来。有\SOAP::Data->value => (而不是\SOAP::Data->value(