|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Stanislav Yadykin 2:4615/59.31 05 Sep 2004 12:01:54 To : All Subject : Проблема с SOAP::Header в SOAP::Lite -------------------------------------------------------------------------------- Может кто связывался с SOAP::Header в пакете SOAP::Lite и подскажет, как правильно отдавать SOAP-ENV:Header при компоновке ответа для Delphi? В чем, собственно, проблема. Delphi, при компоновке запроса к серверу на SOAP::Lite отдает вот такой XML: <?xml version="1.0"?> <SOAP-ENV:Envelope 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" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="http://www.sample.com/DP/SOAP"> <NS1:TSSID xsi:type="NS1:TResult"> <value xsi:type="xsd:int">13</value> </NS1:TSSID> </SOAP-ENV:Header> <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <NS2:SendLogin xmlns:NS2="http://www.sample.com/DP/SOAP"> <user xsi:type="xsd:string">user</user> <password xsi:type="xsd:string">pass</password> </NS2:SendLogin> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Т.е. Namespaces в SOAP-ENV:Header для объекта TResult присутствуют и описаны правильно, SOAP::Lite прекрасно понимает этот запрос и я имею доступ к переменной TSSID. SOAP::Lite, отвечая отдает вот такой XML: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:namesp2="http://namespaces.soaplite.com/perl" ^^^^^^^^ (1) xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <namesp1:TResult xmlns:namesp1="http://www.sample.com/DP/SOAP" xsi:type="namesp2:TResult"> ^^^^^^^^^ (2) <value xsi:type="xsd:int">12345</value> </namesp1:TResult> </SOAP-ENV:Header> <SOAP-ENV:Body> <namesp3:SendLoginResponse xmlns:namesp3="http://www.sample.com/DP/SOAP"> <s-gensym5 xsi:type="xsd:string">userpass</s-gensym5> </namesp3:SendLoginResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Откуда берется (1) и , соответственно, как указать SOAP::Header тип для (2) как из пространства имен http://www.sample.com/DP/SOAP? Вот как в данный момент я отпарвляю ответ: =============== package DP::SOAP; use SOAP::Lite; our(@ISA); use strict; use warnings; @ISA = qw(SOAP::Server::Parameters); sub SendLogin { my $self = shift; my $user = shift; my $password = shift; my $env = pop; my $ssid = $env->headerof('//TSSID'); my $res = TResult->new(12345); my $h = SOAP::Header->new; return $user.$password, SOAP::Header->name('TResult' => $res)->uri('http://www.sample.com/DP/SOAP'); } package TSSID; use strict; use warnings; sub new { my $pkg = shift; my $hash = {}; my $self = bless ($hash, $pkg); $self->{value} = shift; return $self; } sub value { my $self = shift; return $self->{value}; } package TResult; use strict; use warnings; sub new { my $pkg = shift; my $hash = {}; my $self = bless ($hash, $pkg); $self->{value} = shift; return $self; } sub value { my $self = shift; return $self->{value}; } ================= Stanislav ... А ведь все еще только начинается! --- xto@ukr.net * Origin: -- (2:4615/59.31) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/3357413ae88f.html, оценка из 5, голосов 10
|