PHP:找不到或未识别SOAP Header元素的子节点

时间:2011-03-10 10:24:42

标签: php soap header

我正在尝试使用php客户端调用SOAP Adonix X3 Web服务。

为了测试,我使用了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 个答案:

答案 0 :(得分:2)

您遇到的问题是因为X3 Web服务无法在没有命名空间引用的情况下识别标头参数

此外,您应该使用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);

祝你好运

的Al。