Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: SOAP-Lite Empty Strings

by Anonymous Monk
on May 04, 2012 at 09:05 UTC ( [id://968892]=note: print w/replies, xml ) Need Help??


in reply to SOAP-Lite Empty Strings

See Re: Suppressing nil attribute in empty SOAP tag and Re: I do not understand how to write a SOAP server. and switch away from SOAP::Lite :) because this is eew

#!/usr/bin/perl -- use strict; use warnings; use SOAP::Lite; my $param = SOAP::Data->type("xsd:string")->name( "EmptyEmptorIsEmpty" )->value( '' ); ## track down sub tag #~ use Devel::TraceCalls { Package => 'SOAP::Serializer' }; #~ SOAP::Serializer->envelope( method => 'DoThis', $param ); exit; my $soap = SOAP::Lite ->proxy( 'http://localhost/blah/DummyService', timeout => 0.00001, ); $soap->transport->add_handler("request_send", \&pp_dump ); $soap->serializer( MySerializer->new ); print pp( $soap->serializer()->envelope( method => 'DoThis', $param ), ), "\n\n"; $soap->call( 'DoThis', $param ); sub pp { use XML::Twig; open my($fh), '>', \my $str; no warnings 'newline'; XML::Twig->new( qw! pretty_print record ! )->parse( @_ )->print( $fh ); return $str; } sub pp_dump { { my $content = $_[0]->content(''); $_[0]->content( pp($content) ); } print $_[0]->as_string,"\n"; return; } BEGIN { package MySerializer; @MySerializer::ISA = 'SOAP::Serializer'; BEGIN { $INC{'MySerializer.pm'} = __FILE__; } my $closer = 'EmptyEmptorIsEmpty'; sub tag { my $self = shift; my $tag = shift; my $ret = $self->SUPER::tag( $tag, @_ ); if( $tag eq $closer and not $ret =~ m{</\Q$closer\E>$} ){ chop $ret; chop $ret; return "$ret></$closer>"; } return $ret; } 1; } __END__ POST http://localhost/blah/DummyService HTTP/1.1 Accept: text/xml Accept: multipart/* Accept: application/soap User-Agent: SOAP::Lite/Perl/0.714 Content-Length: 448 Content-Type: text/xml; charset=utf-8 SOAPAction: "#DoThis" <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/enc +oding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns: +soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http:/ +/www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSche +ma-instance"> <soap:Body> <DoThis> <EmptyEmptorIsEmpty xsi:type="xsd:string"> </EmptyEmptorIsEmpty> </DoThis> </soap:Body> </soap:Envelope>

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://968892]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (3)
As of 2024-04-25 02:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found