cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: Comment acceder au contexte authentication depuis le flowscript
Date Fri, 19 Aug 2005 08:36:50 GMT
Marc Salvetti wrote:

> <snip/>
>
> Desolé de ces mails à repetition mais je crois approcher de la solution :
>
>> Une autre chose que je ne comprend pas, c'est pourquoi et a quel 
>> endroit du code setXml() est appelé au moment du releaseComponent() ?
>>
> En fait, si je met en commentaire l'appel a setXML, l'erreur 
> disparait, ce qui voudrait dire que le code ne plante pas au moment du 
> releaseComponent() comme le dit le n° de ligne de l'erreur initiale, 
> mais bien au moment de l'appel a setXML
>
> Deuxieme chose, j'ai fait une petite fct de test  :
> function test(contextName, path){


Petite remarque au passage : cette méthode pour passer les paramètres 
est "deprecated" depuis qu'on a réaliser qu'il y avait une grosse 
différence sémantique entre l'utilisation des paramètres par position 
dans JavaScript alors qu'ils sont passés par leur nom dans la sitemap. 
En gros, il n'y a pas de relation entre le nom du paramètre dans la 
sitemap et le nom dans la déclaration de fonction. Changer l'ordre des 
<map:parameter> dans la sitemap change l'ordre des paramètres d'appel de 
la fonction.

Cet façon de procéder sera supprimée dans Cocoon 2.2 et est signalée 
dans la version courant dans le fichier deprecated.log.

L'approche "future-proof" est d'utiliser "cocoon.parameters":
function test() {
  var contextName = cocoon.parameters['contextName'];
  var path = cocoon.parameters['path'];

>    var manager = 
> cocoon.getComponent(Packages.org.apache.cocoon.webapps.authentication.AuthenticationManager.ROLE);

>
>    try{
>        var user = manager.isAuthenticated("cfmhandler");
>        var ctx = user.getContext();
>        var frag = ctx.getXML(path);
>        cocoon.log.debug("cart : " + frag.getChildNodes().getLength());
>    } finally {
>        cocoon.releaseComponent(manager);
>    }
> }
>
> que j'appelle directement a partir de la sitemap comme ceci :
>
>        <map:match pattern="test">
>            <map:act type="auth-protect">
>                <map:parameter name="handler" value="cfmhandler"/>
>                <map:call function="test">
>                    <map:parameter name="contextName" 
> value="authentication"/>
>                    <map:parameter name="path" 
> value="authentication/cart"/>
>                </map:call>
>            </map:act>
>        </map:match>
>
> Et ce code marche, a savoir j'ai bien un message ds le log cart : 1 et 
> pas d'erreur


Bon, et si tu mets un ctx.setXML juste après le ctx.getXML, ça plante 
toujours?

> Donc, ca veut dire que
> -Sylvain a bien senti le probleme ;)
> -le contexte se perd quelquepart entre l'appel la sitemap et l'appel 
> de ma fonction saveCartDoc
>
> Ce qui reste a comprendre, c'est ou et pourquoi ce contexte devient 
> inaccessible depuis le flow alors que l'appel a la fonction d'origine 
> est bien encadré par le auth-protect ?


Ouais, that's the question...

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message