Saluti.
Massimiliano Masserelli wrote:
> On Mon, Jun 23, 2003 at 04:22:34PM +0200, Alessandro Forghieri wrote:
>
>> Soap::Lite ha a bordo XML::Parser::Lite che e' un parser in puro
>> perl. Per qualunque compito un po' serio e' assai meglio usare altri
>> parser... Se installato, ad esempio, SOAP::Lite usa XML::Parser,
>> basta su expat, che e' gia' un bel salto in avanti.
>
> XML::Parser giurerei fosse installato, ma non ne sono sicurissimo.
> Sini? Tu ricordi meglio?
Se hai perl 5.8 dovrebbe essere installato.
>
>> Poi meglio non leggere i file N volte ;)
>
> Ti ringrazio per l'importante ragguaglio.
Prego, approfitta pure... ne ho tanti cosi', e tutti gratis. :-)
> Peccato che se hai elementi
> multi valore (cioe`, un nodo che contiene un array, per dire)
> SOAP::Lite si diletti a rappresentare in memoria soltanto l'ultimo
> valore incontrato. A me facevano comodo anche gli altri. Mi rendo
> conto di avere delle pretese...
Gia', ma si puo' fare di meglio.
Bisogna leggere un chilo di documentazione, pero'... all'anima
dell'interoperabilita'.
Il fatto e' che SOAP::Lite ritorna i risultati in un hash e se (ad esempio
da .NET)
viene ritornata un arraylist (codificata come una sequenza di <anyType/>)
ogni valore sovrascrive
il precedente... se si usa il metodo ->result, cioe'.
Se invece ci si ferma un attimo prima...
[...]
my $method = SOAP::Data->name('AuthorizedViews')
->attr({xmlns => $uri});
my @parms=(
SOAP::Data->name(user=>"guest"),
SOAP::Data->name(password=>""),
SOAP::Data->name(company=>undef()),
SOAP::Data->name(role=>undef()),
);
my $cr=$soap->call($method => @parms);
print "Result::", join("\n",$cr->valueof("//anyType")),"\n";
[...]
L'espressione da passare a 'valueof' e' in sintassi XPath (e buon
divertimento
se il tipo e' complesso).
(P.S: questa acrobazia mi e' costata quasi 3 ore... pare che non si riesca
ad
avere uno standard d'invocazione remota senza infilarci tre modi di codifica
di
parametri e risultati tra loro diversi e tutti perfettamente leciti....)
Cheers,
alf
|