2010-11-18 89 views
1

好我的WSDL服務器期待這是一個電話:PHP的肥皂頭SETENV正確

<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 SOAP調用等於此:

<?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); 
} 

回答

0

至於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"> 

如果你看根元素信封 的xmlns:SOAP-ENV = 「http://schemas.xmlsoap.org/soap/envelope/」 ---->這行分配SOAP-ENV前綴到http://schemas.xmlsoap.org/soap/envelope/命名空間。

所以SOAP-ENV:Envelope元素解析爲http://schemas.xmlsoap.org/soap/envelope/命名空間

在你的PHP調用唯一缺少的是http://impl.escoles.webservice.jovtitus.dasc.gencat.net

你可以給你映射的細節命名空間聲明 - 有需要某種映射獲取映射到您的PHP SOAP調用中的這個名稱空間。比如你使用的是什麼PHP SOAP庫,以及你使用什麼來生成SOAP調用 - 通常你使用一些序列化程序將PHP對象轉換爲SOAP元素

+0

這就是我如何映射soap調用:$ clau = new SoapVar($ param,SOAP_ENC_OBJECT,null,'http://impl.escoles.webservice.jovtitus.dasc.gencat.net'); $ result = $ client-> login($ clau); – david 2010-11-18 15:42:00

+0

我已編輯上述問題以添加有關我的解決方案的更多信息。我希望它有幫助 – david 2010-11-19 11:14:05