Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] SOAP Redirection

Posted by yamsuz on 02/12/2012 14:28

Bonjour,

Je viens de voir que visiblement la redirection était faisable en soap.

J'ai essayé mais j'ai toujours une erreur.

Voici la fonction que j'ai fait

//fichier default.soap.php
class defaultCtrl extends jController {
 
    /** 
     * Test with a simple parameter
     * @param string $name
     * @return string
     */
    function hello() {
	$rep = $this->getResponse('redirect');
				
        $rep->action = 'lo~ctrListeClients:hello';
	$rep->params = array('name' => $this->param('name'));
	
        return $rep;
    }
}

//fichier ctrListeClients.soap.php
class ctrListeClientsCtrl extends jController {
 
    /** 
     * Test with a simple parameter
     * @param string $name
     * @return string
     */
    function hello() {
        $rep = $this->getResponse('soap');
		
        $rep->data = "Hello " . $this->param('name');
        return $rep;
    }
}

Je n'arrive pas à mettre en place la redirection avec du soap.

J'ai essayé dans l'action de préciser le type soap.

Il n'y a que lorsque je repasse en mode classic que je n'ai pas d'erreur, mais ça ne renvoi rien.

Merci de me donner un petit coup de main

  [Opened] SOAP Redirection

Reply #1 Posted by laurentj on 02/13/2012 15:35

Bonjour,

J'ai essayé mais j'ai toujours une erreur.

Dire simplement que tu as une erreur, ça ne va pas nous aider à t'aider :-p Un peu plus d'explication serait le bienvenue, en particulier, quelle est cette erreur...

  [Opened] SOAP Redirection

Reply #2 Posted by yamsuz on 02/13/2012 18:34

Bonjour,

Voici l'erreur à l'écran

SoapFault Object ( [message:protected] => A technical error has occured (code: 200). Sorry for this inconvenience. 
[string:Exception:private] => [code:protected] => 0 [file:protected] => [Client]www\soap\index.php 
[line:protected] => 22 [trace:Exception:private] => Array ( [0] => Array ( [file] => 
[Client]www\soap\index.php [line] => 22 [function] => __soapCall 
[class] => SoapClient [type] => -> [args] => Array ( [0] => hello [1] => Array ( [0] => Sylvain ) ) ) ) 

[previous:Exception:private] => [faultstring] => A technical error has occured (code: 200). 
Sorry for this inconvenience. 
[faultcode] => 200 [xdebug_message] => ( ! ) SoapFault: A technical error has occured (code: 200). 
Sorry for this inconvenience. in [Client]www\soap\index.php on line 22 Call Stack 
#TimeMemoryFunctionLocation 10.0007676336{main}( )..\index.php:0 
20.2670683984SoapClient->__soapCall( )..\index.php:22 ) 

Dans le fichier Erreur.log (coté serveur)

[8]	Undefined property: jResponseRedirect::$data	/lib/jelix/core/jSoapCoordinator.class.php	111
	/ws/soap.php?service=lo%7Edefault
array (   'module' => 'lo',   'action' => 'default:hello',   'name' => 'Sylvain', )

	0	jSoapHandler->__call()	[php] : 
	1	jSoapHandler->hello()	[php] : 
	2	SoapServer->handle()	/lib/jelix/core/jSoapCoordinator.class.php : 52
	3	jSoapCoordinator->processSoap()	/www/soap.php : 23

Merci du coup de main

  [Opened] SOAP Redirection

Reply #3 Posted by laurentj on 02/15/2012 10:49

ah ok. Il semble qu'il y ait eu un oubli de prise en charge des réponses de redirection dans jSoapCoordinator..

Dans lib/jelix/core/jSoapCoordinator.class.php, dans la méthode call de jSoapHandler, remplace

        $this->coord->process($this->coord->request);
        return $this->coord->response->data;

par

        $this->coord->process($this->coord->request);
        $response = $this->coord->response;
        if (($c = get_class($response)) == 'jResponseRedirect'
                || $c == 'jResponseRedirectUrl')
            return null;
        return $this->coord->response->data;

je ne suis pas sûr de la modification et pas moyen de tester là. Tu peux vérifier ?

  [Opened] SOAP Redirection

Reply #4 Posted by yamsuz on 02/15/2012 13:20

Bonjour,

Je viens de tester avec ce code :

/** 
     * Test with a simple parameter
     * @param string $name
     * @return string
     */
function Redirection() {
     $rep = $this->getResponse('redirect');
						
     $rep->action = 'lo~ctrListeClients:hello@soap';
     $rep->params = array('name' => $this->param('name'));

     return $rep;
    }

J'ai fait un test avec la redirection, mais visiblement j'ai toujours une erreur, par contre je n'ai aucune erreur dans le fichier de log.

J'ai pas trop le temps de voir réellement ce qu'il se passe. J'essayerai si je peux ce soir.

Merci du coup de main.

  [Opened] SOAP Redirection

Reply #5 Posted by laurentj on 02/15/2012 15:16

mais visiblement j'ai toujours une erreur

laquelle ? Et c'est quoi ton client soap ? Supporte-t-il les redirections (il semble que certains clients soap ne prennent pas en charge correctement les redirections)

  [Opened] SOAP Redirection

Reply #6 Posted by yamsuz on 02/15/2012 16:13

J'ai utilisé un client Php (le code donné dans la doc de Jelix), copier - coller avec php 5.3.8

  [Opened] SOAP Redirection

Reply #7 Posted by laurentj on 02/15/2012 22:53

J'ai fait quelques tests. Ma correction semble au moins éliminer un problème. Je l'ai incorporé dans la branche 1.3.

J'ai ajouté un test unitaire pour tester la redirection. Et Il semble que SoapClient de PHP ne tient pas compte des redirections HTTP.

De plus, il faut utiliser la réponse redirectUrl parce que la réponse redirect (donc utilisation de jUrl::get()) ne renvoi pas une url soap comme il faut (un bug qu'il faudrait corriger).

    $rep = $this->getResponse('redirectUrl');
    $url = new jUrl($this->request->urlScript, array('service'=>'testapp~soap', 'method'=>'hello'));
    $rep->url = $this->request->getServerURI().$url->toString();
    return $rep;
 
Page
  1. SOAP Redirection