Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Отключение типов на серверной стороне SOAP::Lite


Автор: Zester 25.12.2012, 15:21
Подскажите, как отключить автотипизацию тегов в ответном сообщении сервера веб-службы (SOAP::Lite)?

На SOAP-клиенте отключаю автотипизацию так:
Код

use SOAP::Lite; # Библиотека SOAP

# Настроить SOAP
my $soap = SOAP::Lite
  -> ns('http://localhost/AnPackage', 'ns4')
  -> proxy('http://localhost/cgi-bin/AnService.cgi');

# Отключить простановку XML-типов в тегах сообщений
$soap->autotype(0);


На SOAP-сервере как это сделать не знаю. smile 

Автор: Zester 27.12.2012, 13:27
Связался через форум http://PerlMonks.org со специалистами по Perl.
В процессе длинной дискуссии на английском языке ситуация прояснилась.
В общем, отвечу сам себе:
Да, на SOAP-сервере отключить типы в RESPONSe можно. Например, так:

Код

My::CGI::Handler->dispatch_to('AnPackage')->handle;

BEGIN {
    package My::CGI::Handler;
    use vars qw(@ISA);
    @ISA = qw(SOAP::Transport::HTTP::CGI);

    sub handle {
        my $self = shift;
        $self->serializer->autotype(0);
и т.д.....................

т.е. достаточно конструкции 
Код

$self->serializer->autotype(0);
, чтобы
вот такой ответ:
Код

<soap:Body>
  <createRequestResponse xmlns="http://localhost/AnPackage" soapenc:arrayType="xsd:anyType[3]" xsi:type="soapenc:Array">
    <requestNumber xsi:type="xsd:string">1-13</requestNumber>
  </createRequestResponse>
</soap:Body>


превратился в такой:
Код

<soap:Body>
  <createRequestResponse xmlns="http://localhost/AnPackage">
    <requestNumber>1-13</requestNumber>
  </createRequestResponse>
</soap:Body>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)