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>
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|