PHP: Подузел элемента заголовка SOAP не найден или не распознан - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь вызвать веб-сервис Adonix X3 SOAP с помощью php-клиента.

Для тестирования я использовал SOAP UI, и он работал хорошо; это запрос xml:

   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:a="http://www.adonix.com/WSS"
    xmlns:XS="http://www.w3.org/2001/XMLSchema"
    xmlns:XI="http://www.w3.org/2001/XMLSchema-instance">
   <S:Header>
    <a:CAdxCallingContext>
        <a:codeLang XI:type="XS:string">FRA</a:codeLang>
        <a:codeUser XI:type="XS:string">ADM</a:codeUser>
        <a:password XI:type="XS:string">XXX</a:password>
        <a:poolAlias XI:type="XS:string">TEST</a:poolAlias>
        <a:requestConfig XI:type="XS:string">trace</a:requestConfig>
    </a:CAdxCallingContext>
   </S:Header>
   <S:Body>
      <a:runXml S:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <publicName XI:type="XS:string">RECH_OF</publicName>
         <inputXml XI:type="XS:string">
<![CDATA[
<PARAM>
<GRP ID="GRP1">
<FLD NAME="XITMREF">PSFIN00153</FLD>
<FLD NAME="XFLUX">recycle</FLD>
<FLD NAME="XOPENUM">15</FLD>
</GRP>
</PARAM>
]]>
</inputXml>
      </a:runXml>
   </S:Body>
</S:Envelope>

но пытается сделать тот же вызов в php:

    $sh_param = array(
                    'codeLang'    =>    'FRA',
                    'codeUser'    =>    'ADM',
                    'password'    =>    'XXX',
                    'poolAlias'    =>    'TEST',
                    'requestConfig '    =>    'trace'
                    );


$ns = 'http://www.adonix.com/WSS';


$headers = new SoapHeader($ns, 'CAdxCallingContext', $sh_param, false);

// Prepare Soap Client
$soapClient->__setSoapHeaders(array($headers));

$at_param2 = array(
                            'XITMREF'        => 'PSFIN00153',
                            'XFLUX'        => 'recycle',
                            'XOPENUM'        => '15'); 


// Setup the RemoteFunction parameters
$ap_param = array(
                    'publicName'     =>   'RECH_OF',
                    'inputXml'       =>  array($at_param2));


$info = $soapClient->__call("runXml", array($ap_param));

Я получаю следующую ошибку:

3 - Le Header element [http://www.adonix.com/WSS][CAdxCallingContext] du message Soap n'a pas de fils [codeLang].

это значит

The Header element [http://www.adonix.com/WSS][CAdxCallingContext] of the Soap message has no son [codeLang]

Кажется, сервер не находит подузел заголовка ...

Есть идеи?

Спасибо

1 Ответ

2 голосов
/ 28 апреля 2011

Проблема в том, что веб-служба X3 не может определить параметры заголовка без ссылки на пространство имен

Более того, вы должны использовать SoapVar вместо базового массива для построения правильного заголовка

Так что вы должны попробовать что-то вроде этого

 $ns = 'http://www.adonix.com/WSS';
 $headerParams = array('ns1:codeLang'      => 'FRA',
                       'ns1:codeUser'      => 'ADM',
                       'ns1:password'      => 'XXX',
                       'ns1:poolAlias'     => 'TEST',
                       'ns1:requestConfig' => 'trace');
 $soapStruct = new SoapVar($headerParams, SOAP_ENC_OBJECT);
 $header     = new SoapHeader($ns, 'CAdxCallingContext', $soapStruct, false);

Удачи

Ал.

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