/ / SOAP :: Lite передає аргумент як клас - perl, soaplite

SOAP :: Lite передає аргумент як клас - perl, soaplite

У мене є наступна схема:

   <xs:schema        xmlns:tns="http://common.balance.contract.kernel.bgbilling.bitel.ru/"     xmlns:ns1="http://common.bitel.ru"   xmlns:xs="http://www.w3.org/2001/XMLSchema"    version="1.0"targetNamespace="http://common.balance.contract.kernel.bgbilling .bitel.ru/">
<xs:import namespace="http://common.bitel.ru" s    chemaLocation="http://xxx:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=1"/>
<xs:element name="BGException" type="tns:BGException"/>
…
<xs:element name="paymentUpdate" type="tns:paymentUpdate"/>
<xs:element name="paymentUpdateResponse" type="tns:paymentUpdateResponse"/>
<xs:complexType name="BGException">
<xs:sequence>
<xs:element name="message" type="xs:string" minOccurs="0"/>
<xs:element name="tag" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="payment">
<xs:complexContent>
<xs:extension base="tns:abstractBalanceBean">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="abstractBalanceBean" abstract="true">
<xs:complexContent>
<xs:extension base="ns1:id">
<xs:sequence>
<xs:element name="comment" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="contractId" type="xs:int" use="required"/>
<xs:attribute name="date" type="xs:dateTime"/>
<xs:attribute name="sum" type="xs:decimal"/>
<xs:attribute name="summa" type="xs:decimal"/>
<xs:attribute name="timeChange" type="xs:dateTime"/>
<xs:attribute name="typeId" type="xs:int" use="required"/>
<xs:attribute name="userId" type="xs:int" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="paymentUpdate">
<xs:sequence>
<xs:element name="payment" type="tns:payment" minOccurs="0"/>
<xs:element name="distribution" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

Скажіть, будь ласка, як я повинен надсилати аргументи в методі PaymentUpdate (у Perl)?

$client->call("paymentUpdate"=>SOAP::Data->type("namesp1:paymentUpdate")->...

На чому писати? Як створити та надіслати бажаний тип (paymentUpdate)?

Відповіді:

0 для відповіді № 1

Використовуйте атрибут, ось рішення:

$wsdl = "http://xxxxxxxxxxxxxx:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?wsdl";
@comment = ("<comment>$comment</comment>");
$authoriz = "Basic ".encode_base64("login:password");
#$SOAP::Constants::PREFIX_ENV = "SOAP-ENV";
#$SOAP::Constants::PREFIX_ENC = "SOAP-ENC";
$client = SOAP::Lite->new(service=>$wsdl);
$client->proxy($wsdl);
$client->ns("http://common.balance.contract.kernel.bgbilling.bitel.ru/","ns1");
$client->outputxml("true");
$client->transport->http_request->headers->push_header("Authorization" => $authoriz );
$soap = $client->service($wsdl."?wsdl");
my $pm = SOAP::Data->new(name=>"payment");
$pm->type("ts:payment");
$pm->attr({ id => "$id", contractId=>"$cid", date=>"$dt", sum=>"$sum",    summa=>"$sum", typeId=>"3", userId=>"0"});
$pm->value(@comment);
print $client->call("paymentUpdate",$pm);