Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
Hello everybody, I'va a cgi soap web server and I've a problem for returning special chars.
With this script, there is no problem :
#!/usr/bin/perl -w use CGI::Carp 'fatalsToBrowser'; my $soap_transport = SOAP::Transport::HTTP::CGI->dispatch_to('my_serve +r'); $soap_transport->serializer->encoding('UTF-8'); $soap_transport->handle(); =begin WSDL _RETURN $string _DOC fonction de test du web service =cut sub test { my $response = "xxx"; return $response; }
response is :
<soap:Envelope soap:encodingStyle="http://www.w3.org/2003/05/soap-enco +ding" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap +enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w +3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins +tance"> <soap:Body> <testResponse xmlns="https://my_server_url"> <s-gensym3 xsi:type="xsd:string">xxx</s-gensym3> </testResponse> </soap:Body> </soap:Envelope>
but when I try to return special chars :
=begin WSDL _RETURN $string _DOC fonction de test du web service =cut sub test { my $response = "ייי"; return $response; }
response is :
<soap:Envelope soap:encodingStyle="http://www.w3.org/2003/05/soap-enco +ding" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap +enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w +3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins +tance"> <soap:Body> <testResponse xmlns="https://my_server_url"> <s-gensym3 xsi:type="xsd:base64Binary">w6nDqcOp</s-gensym3> </testResponse> </soap:Body> </soap:Envelope>
We can see that the string type is now base64Binary
If I try to encode string in utf8, the problem persists :
#!/usr/bin/perl -w use CGI::Carp 'fatalsToBrowser'; use utf8; my $soap_transport = SOAP::Transport::HTTP::CGI->dispatch_to('saint_kr +o'); $soap_transport->serializer->encoding('UTF-8'); $soap_transport->handle(); =begin WSDL _RETURN $string _DOC fonction de test du web service =cut sub test { my $response = "ייי"; utf8::encode($response); return $response; }
response is still :
<soap:Envelope soap:encodingStyle="http://www.w3.org/2003/05/soap-enco +ding" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap +enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w +3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins +tance"> <soap:Body> <testResponse xmlns="https://my_server_url"> <s-gensym3 xsi:type="xsd:base64Binary">w6nDqcOp</s-gensym3> </testResponse> </soap:Body> </soap:Envelope>
Can someone tell me what is the solution for encode response to keep string type and prevent base64 conversion ?
Thanks
|
|---|