SOAP :: Lite Неразрешенный префикс 'xxxx' для элемента 'yyyy' - PullRequest
1 голос
/ 13 марта 2012

всем!

У меня проблемы с анализом ответа на SOAP-запрос с помощью библиотеки SOAP: Lite в perl.

Вот XML-запрос, который я отправляю с SOAP:

SOAP::Transport::HTTP::Client::send_receive: HTTP::Request=HASH(0x9c62028)
SOAP::Transport::HTTP::Client::send_receive: POST https://109.235.185.235:8443/tvrauto         
HTTP/1.1
Accept: text/xml
Accept: multipart/*
Accept: application/soap
Content-Length: 571
Content-Type: text/xml; charset=utf-8
SOAPAction: "soapenv#PutCoord"

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ws="soapenv" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
  <ws:PutCoord>
    <ObjectID>79032058458</ObjectID>
    <Coord time="2010-01-29T01:28:01Z" lon="37.754689" lat="55.6586458" speed="20.1" dir="301" valid="1"/>
  </ws:PutCoord>
</soapenv:Body>
</soapenv:Envelope>

Вот XML-ответ с удаленного сервера:

<?xml version="1.0" encoding="windows-1251"?>
  <soapenv:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope">
    <soapenv:Header/>
      <soapenv:Body>
         <ws:PutCoordResponse>
            <ObjectID>79032058458</ObjectID>
         </ws:PutCoordResponse>
      </soapenv:Body>
  </soapenv:Envelope>

Вот список ошибок из SOAP :: Lite:

Unresolved prefix 'soapenv' for element 'Envelope'
Wrong SOAP version specified. Supported versions:
  1.1 (http://schemas.xmlsoap.org/soap/envelope/)
  1.2 (http://www.w3.org/2003/05/soap-envelope)
Unresolved prefix 'soapenv' for element 'Header'
Unresolved prefix 'soapenv' for element 'Body'
Unresolved prefix 'ws' for element 'PutCoordResponse'

Вот код Perl:

#!/usr/bin/perl

use SOAP::Lite  +autodispatch;
use SOAP::Lite  +trace;

use SOAP::Transport::HTTP;

sub SOAP::Transport::HTTP::Client::get_basic_credentials { 
  return 'yyyyyy' => 'xxxxxxxxxx';
}

$soap = SOAP::Lite  
  -> uri('soapenv') 
  -> proxy('https://109.235.185.235:8443/tvrauto');

$soap->default_ns('https://109.235.185.235:8443','soapenv');
$soap->ns('soapenv', 'ws');
$soap->envprefix('soapenv');
$soap->uri('soapenv');
$soap->soapversion('1.2');

$xml=<<XML;
  <ObjectID>79032058458</ObjectID>
  <Coord time="2010-01-29T01:28:01Z" lon="37.754689" lat="55.6586458" speed="20.1" dir="301" valid="1"/>
XML


$params=SOAP::Data->type('xml' => $xml);

print $soap->PutCoord($params)->result;
print "\n";

Вопрос в том, как избежать ошибки «Unreolved prefix».Я пытался играть с Uris и пространством имен в разных комбинациях, но не получил результата.

И связанный вопрос - в чем проблема с SOAP-версией?Как я вижу - сервер не вернул нам информацию о версии.

Заранее спасибо.Извините за глупые вопросы - я совсем не знаком с SOAP :( Жду вашего ответа.

1 Ответ

0 голосов
/ 24 января 2013

Не использовать

$ soap-> soapversion ( '1,2');

Использование

$ soap-> soapversion ( '1,1');

...