php мыло заголовок setenv правильный - PullRequest
1 голос
/ 18 ноября 2010

Хорошо, мой wsdl-сервер ожидает это как вызов:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:esc="http://escoles.webservice.jovtitus.dasc.gencat.net" xmlns:impl="http://impl.escoles.webservice.jovtitus.dasc.gencat.net">
    <soapenv:Header/>
    <soapenv:Body>
       <esc:login>
          <esc:in0>
             <!--Optional:-->
             <impl:password>++</impl:password>
             <!--Optional:-->
             <impl:user>++</impl:user>
          </esc:in0>
       </esc:login>
    </soapenv:Body>
 </soapenv:Envelope>

но мой php мыльный вызов равен этому:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://escoles.webservice.jovtitus.dasc.gencat.net">
<SOAP-ENV:Body>
<ns1:login>
<ns1:in0>
<password>+++</password>
<user>+++</user>
</ns1:in0>
</ns1:login>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

Практически то же самое, но я обнаружил, что есть некоторые пространства имен, которые мой php не применяет. Зачем? У меня есть ns1:, где оно должно быть esc: и ничего, где оно должно быть impl:

Кто-нибудь может мне помочь?

Я включаю php код, который использую:

$login = "+++++++";
$password = "+++++++++";

$enllaç = "http://preproduccio.www14.gencat.cat/jov_titus/AppJava/services/EscolesWebService";
$impl   = 'http://impl.escoles.webservice.jovtitus.dasc.gencat.net';
$esc    = 'escoles.webservice.jovtitus.dasc.gencat.net';

$aOptions = array( "uri"=> $esc, 'location' => $enllaç,'trace'=>1 );

class loginRequest {
    private $password;
    private $user;

    public function __construct($password, $user)
    {
        $this->password     =   $password;
        $this->user         =   $user;
    }
}

$x = new loginRequest($password, $login);
$param = array('in0' => $x);


try {
    $client = new SoapClient($enllaç.'?wsdl', $aOptions);
    $clau = new SoapVar($param, SOAP_ENC_OBJECT, null, 'http://impl.escoles.webservice.jovtitus.dasc.gencat.net'); 
    $result = $client->login($clau);
    echo "REQUEST:\n" .htmlentities($client->__getLastRequest()). "<br /><br />";
} catch (SoapFault $fault) {
    trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}

1 Ответ

0 голосов
/ 18 ноября 2010

Что касается ns1: и esc: проблем нет.

ns1: и esc: являются префиксом для пространства имен. В корневом элементе вы указываете префикс для данного пространства имен, а затем в элементе ссылаетесь на элементы, принадлежащие этому пространству имен, через указанный префикс.

Например, на вашем сервере ожидаемый вызов в корневом элементе пространства имен http://escoles.webservice.jovtitus.dasc.gencat.net имеет префикс esc. поэтому элемент esc: login разрешен в этом пространстве имен.

В сгенерированном вызове PHP пространству имен http://escoles.webservice.jovtitus.dasc.gencat.net присваивается префикс ns1. поэтому элемент ns1: login разрешен в том же пространстве имен, что нормально.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://escoles.webservice.jovtitus.dasc.gencat.net"> 

если вы посмотрите на корневой элемент Envelope xmlns: SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" ----> эта строка назначает префикс SOAP-ENV для http://schemas.xmlsoap.org/soap/envelope/ пространства имен.

поэтому SOAP-ENV: элемент огибающей преобразуется в http://schemas.xmlsoap.org/soap/envelope/ пространство имен

единственное, чего не хватает в вашем вызове PHP - это объявление пространства имен http://impl.escoles.webservice.jovtitus.dasc.gencat.net

Можете ли вы дать подробную информацию о ваших сопоставлениях - для отображения этого пространства имен при вызове PHP SOAP требуется некоторое сопоставление. Подробности, например, какую библиотеку PHP SOAP вы используете и что вы используете для генерации вызова SOAP - обычно вы используете некоторые сериализаторы для преобразования объектов PHP в элементы SOAP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...