2010-11-18 7 views
1

PHP SOAPヘッダーのsetenv私のWSDLサーバーがコールとしてこれを期待している[OK]を

<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が適用されていないいくつかの名前空間があることがわかりました。どうして? 私はそれはそれはimpl:

誰も私を助けることができるでなければなりませんesc:と何もなければなりませんns1:を持っていますか?私は私が使用しているtehの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要素は、あなたのPHPの呼び出しに唯一欠けているものはhttp://impl.escoles.webservice.jovtitus.dasc.gencat.net

の名前空間宣言であるhttp://schemas.xmlsoap.org/soap/envelope/名前空間

に解決、あなたのマッピングの詳細を与えることができます - に必要ないくつかのマッピングがありますこの名前空間を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

+0

上記の質問を編集して、私の解決策に関する詳細を追加しました。私はそれが助けて欲しい – david

関連する問題