Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/06/2006, 11h35   #1
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Par défaut Accès aux champs du request header

Pour une application XMLRAD 2005 r2 sur serveur Apache + tomcat java :

J'ai besoin de récupérer la valeur de champs additionnels ( autres que referer, host, etc.. ) qui sont insérés dans le request header par un module d'authentification externe.
Le framework ne les met pas par défaut dans le context.

Je ne trouve rien dans l'environnement java pour cela...
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 14h02   #2
Membre régulier
 
Inscription : janvier 2003
Messages : 207
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 207
Points : 94
Points : 94
Envoyer un message via MSN à rgarnier
La solution que nous avont adoptée est de modifier le framework, dans XmlApp.pas, procédure InternalDispatchRequest.

Tu as accès ici aux propriétés de l'objet request Request.GetFieldByName('Mapropriété')
__________________
Renaud
W2003 / XP /VISTA
SQL SERVER / ORACLE
ADO
rgarnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 16h01   #3
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Le problème est que je ne trouve pas l'équivalent dans l'environnement java...
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 16h15   #4
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
en Delphi ou .NEt tu as GetServerVariable à partir de XMLRequest.
mais en Java il n'est pas exposé

par contre tu peux y accéder dans la servlet avec les méthodes Java classique.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 16h35   #5
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Peux tu être un peu plus concret stp ?
( un exemple serait le bienvenu... )
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 19h55   #6
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
bin d'après la doc J2EE:
http://java.sun.com/products/servlet...va.lang.String)

donc dans le donc dans la méthode service de la servlet:

Code :
1
2
3
4
5
6
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException
	{
                String myHeader = request.getHeader("MyHeaer");
                // ...
		XMLApplication.dispatchRequest(request, response);
	}
mais le problème c'est que la on est hors XMLRAD...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 21h32   #7
Membre éprouvé
 
Inscription : mars 2002
Messages : 516
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 516
Points : 483
Points : 483
Envoyer un message via MSN à Sylvain James
Citation:
mais le problème c'est que la on est hors XMLRAD...
Sans vouloir tomber dans le prosélytisme, je pense que c'est aussi un avantage de pouvoir faire ça.
Ca prouve l'ouverture du framework XMLCLX aux autres frameworks qu'il cotoie. Et le problème en question est finalement réglé de manière assez propre.
En revanche il faut répéter ce code dans le dispatch de chaque application.
__________________
.NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

Mon Blog : http://blog.developpez.com/index.php?blog=89
Mes Articles : http://sjames.developpez.com/
Rubrique XMLRAD: http://xmlrad.developpez.com
Sylvain James est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 10h10   #8
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
disons qu'on a la souplesse d'utiliser les techniques classiques Java, mais c'est pas bine intégré à XMLRAD qui devrait pouvoir donner accès aux Server Variables. Qui est possible en Delphi.
ca devrait être exposé pour la prochaine version
enfin s'il y a vraiment besoin, on peut recompiler le XMLCLX.dll pour Java si Clisson a Delphi avec une exposition des Server Variables...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 15h22   #9
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
merci mais effectivement " le problème c'est que la on est hors XMLRAD..."

Je cherche où stocker la valeur de request.getHeader("MyHeaer"); pour pouvoir ensuite le mettre dans le context par exemple.

Je sèche un peu...
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 16h40   #10
Membre éprouvé
 
Inscription : mars 2002
Messages : 516
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 516
Points : 483
Points : 483
Envoyer un message via MSN à Sylvain James
tu peux faire un truc dans le genre :

Context.SetValue('MyHeader', request.getHeader('MyHeaer'));
__________________
.NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

Mon Blog : http://blog.developpez.com/index.php?blog=89
Mes Articles : http://sjames.developpez.com/
Rubrique XMLRAD: http://xmlrad.developpez.com
Sylvain James est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 16h59   #11
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Dans les .java correspondants aux modules xmlRad, on a accès à context et à xmlRequest mais qui ne connaît pas de méthode getHeader().

Dans le XmlServerServlet.java on a accès au paramètre request de la méthode service, qui connaît getHeader(), mais pas au context...

Mon problème est de faire communiquer ces deux mondes!
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 22h49   #12
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
il n'y a pas de moyen sur et simple pour le faire si ce n'est d'exposer une fonction dans XMLCLX.dll
peux tu recompiler avec Delphi ? le projet est dans Delos\XMLCLX\Source\J2EE
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 10h35   #13
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
La compilation - avec Delphi 7 - s'arrête sur l'erreur :

JavaXMLComponent.pas(801): Indentificateur non déclaré : 'XMLRequest'
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 23h17   #14
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
ok, tu peux compiler donc faut jsute savoir faire
dans XMLCLX.inc tu actives le define Java
[$DEFINE JAVA}

ensuite dans JavaStubs.pas tu va pouvoir rajouter ce qeu tu veux...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 09h29   #15
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
une fois que t'arrive a recompiler, tu vas pouvoir ajouter des choses dans JavaStubs.pas:

déclarer une fonction GetServerVariable dans les methods Stubs dans la partie XMLRequest:
Code :
function Java_xmlclx_XMLRequest_getServerVariable(Env: PJNIEnv; JXMLRequest: JObject; JName: JString): JString; stdcall;
rajouter le nom dans les exports:
Code :
1
2
3
Java_xmlclx_XMLRequest_sendFile,
Java_xmlclx_XMLRequest_getServerVariable,
  // XMLCollection
et l'implémenter:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Java_xmlclx_XMLRequest_getServerVariable(Env: PJNIEnv; JXMLRequest: JObject; JName: JString): JString;
var
  XMLRequest: IXMLRequest2;
  Name: WideString;
  Res: WideString;
begin
  Result := nil;
  try
    XMLRequest := IXMLRequest(GetIntField(Env, JXMLRequest, 'nativeObject', 'I')) as IXMLRequest2;
    if XMLRequest = nil then
      raise Exception.Create('Java_xmlclx_XMLRequest_getServerVariable - XMLRequest is nil');
    Name := JStringToString(Env, JName);
    Res := CallJavaStringMethod(Env, XMLRequest.Request, 'HttpServletRequest.getHeader', [Name]);
    Result := StringToJString(Env, PChar(string(Res)));
  except on E: Exception do
   	RaiseJavaException(Env, E.Message);
  end;
end;
une fois recompilé, tu pourras faire dans les gestionnaires d'événements traditionnels:

Code :
 context.setValue("MyHeader", xmlRequest.getServerVariable("MyHeader"));
j'ai pas testé, donc dis moi si t'obtiens quelque chose...
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 11h27   #16
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
D'abord merci beaucoup
Tout ça se recompile très bien à part un petit cast :

Res := CallJavaStringMethod(Env, JObject(XMLRequest.Request), 'HttpServletRequest.getHeader', [Name]);

Par contre, on n'a pas accès après à la méthode getServerVariable dans xmlRequest...
Ne manque-t-il pas la déclaration d'interface dans xmlclx.jar ? ( que je ne peux pas modifier ... )
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 11h59   #17
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
ah oui bien vu, manque ca !

il faut que tu recompiles le .jar.
un .jar etant un zip tu l'extract dans un répertoire, tu modifies le XMLRequest.java pour rajouter la déclaration de la méthode en native:

Code :
native public String getServerVariable(String name);
puis tu recrer le un .jar a partir de toutes les sources

je m'apercois aussi que pour ton cast c'est pas correct
il faut:
Code :
Res := CallJavaStringMethod(Env, TJavaRequest(XMLRequest.Request).FRequest, 'HttpServletRequest.getHeader', [Name]);
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 16h52   #18
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Après quelques difficultés pour recompiler xmlclx.jar, la méthode getSerVariable est visible.
Par contre, la ligne
Res := CallJavaStringMethod(Env, JObject(XMLRequest.Request), 'HttpServletRequest.getHeader', [Name]);

provoque l'erreur :
Violation d'accès... dasn le module jvm.dll

le cast que tu as proposé
Res := CallJavaStringMethod(Env, TJavaRequest(XMLRequest.Request).FRequest, 'HttpServletRequest.getHeader', [Name]);
ne se compile pas ( type incompatibles JObject et TJavaRequest )
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 10h25   #19
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
je confirme que ce que je t'ai donné est correct et compile
attention c'est paa seulement le cast que j'ai changé:

Code :
Res := CallJavaStringMethod(Env, TJavaRequest(XMLRequest.Request).FRequest, 'HttpServletRequest.getHeader', [Name]);
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2006, 00h33   #20
Membre à l'essai
 
Inscription : janvier 2003
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 95
Points : 23
Points : 23
Ca marche!
Ca m'apprendra à lire correctement, j'aurais gagné du temps...

Merci encore.
clisson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h39.


 
 
 
 
Partenaires

Hébergement Web