2010-11-18 4 views
1

Ok mon serveur wsdl attend cela comme un appel:tête de savon php setenv correct

<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> 

mais mon appel de savon php est égal à ceci:

<?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> 

est pratiquement le même, mais je trouvé qu'il y a des espaces de noms que mon php ne s'applique pas. Pourquoi? Je ns1: où il doit être esc: et rien où il doit être impl:

quelqu'un peut me aider?

Je Teh y compris code php J'utilise:

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

Répondre

0

En ce qui NS1: et esc: est concerné, il n'y a pas de problème.

ns1: et esc: sont les préfixes de l'espace de noms. Dans l'élément racine, vous spécifiez le préfixe pour l'espace de noms donné et plus tard dans l'élément référez-vous aux éléments appartenant à cet espace de noms via le préfixe spécifié.

Par exemple dans votre serveur appel prévu dans l'élément racine l'espace de noms http://escoles.webservice.jovtitus.dasc.gencat.net est donné le préfixe esc. donc l'élément esc: login est résolu à être dans cet espace de noms.

Dans l'appel généré par PHP, l'espace de noms http://escoles.webservice.jovtitus.dasc.gencat.net reçoit le préfixe ns1. donc l'élément ns1: login est résolu dans le même espace de noms ce qui est bien.

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

si vous regardez l'élément racine enveloppe xmlns: SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" ----> cette ligne assigne préfixe SOAP-ENV à http://schemas.xmlsoap.org/soap/envelope/ espace de noms.

si SOAP-ENV: élément d'enveloppe décide de http://schemas.xmlsoap.org/soap/envelope/ espace de noms

la seule chose qui manque dans votre appel PHP est la déclaration d'espace de noms http://impl.escoles.webservice.jovtitus.dasc.gencat.net

Pouvez-vous donner des détails sur vos applications - il y a une cartographie nécessaire pour obtenir cet espace de noms mappé dans votre appel PHP SOAP. Détails comme quelle bibliothèque PHP SOAP utilisez-vous et qu'est-ce que vous utilisez pour générer l'appel SOAP - normalement, vous utilisez des sérialiseurs pour convertir des objets PHP en éléments SOAP

+0

Voici comment mappel l'appel de savon: $ clau = new SoapVar ($ param, SOAP_ENC_OBJECT, null, 'http://impl.escoles.webservice.jovtitus.dasc.gencat.net'); $ resultat = $ client-> login ($ clau); – david

+0

J'ai modifié la question ci-dessus pour ajouter plus d'informations concernant ma solution. J'espère que ça aide – david

Questions connexes