Bonjour,
Je dois reproduire le comportement d'une page "Internet Explorer" depuis un applicatif Java lourd. Cette page IE fait un appel Ajax de cette façon :
Pour se faire, j'ai utilisé la classe XmlHttpRequest de Jdesktop de cette façon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 var URL_ROUTER = "http://mnHost/maRessource/xxx"; var MSXMLDOM = "MSXML2.DOMDocument.4.0"; var XMLHTTP = "MSXML2.XMLHTTP.4.0"; try { var sReq = "<Request>blabla en XML avec des parametres et tout et tout.</Request>"; var iHttpObj = new ActiveXObject(XMLHTTP); var iHttpReq = new ActiveXObject(MSXMLDOM); iHttpReq.async=false; iHttpReq.loadXML(sReq); iHttpObj.Open("POST",URL_ROUTER, false); iHttpObj.Send(iHttpReq); alert(iHttpObj.responseText); } catch(e) { alert("echec"); }
Le PropListener fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 String URL_router = "http://mnHost/maRessource/xxx"; String requestStr = "<Request>blabla en XML avec des parametres et tout et tout.</Request>"; XmlHttpRequest request = new XmlHttpRequest(); ByteArrayInputStream bais = new ByteArrayInputStream(requestStr .getBytes()); Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().parse(bais); PropListener listener = new TestScripters().new PropListener(); listener.setRequest(request); request.addOnReadyStateChangedListener(listener); request.open(Method.POST, new URL(URL_router), false); request.send(doc); SimpleDocument retDoc = request.getResponseXML(); if (retDoc == null) { System.out.println("Le document retour est null"); } else { System.out.println("Balise englobante : " + retDoc.getDocumentElement().getNodeName()); } String txt = request.getResponseText(); if (txt == null) { System.out.println("Pas de texte retour"); } else { System.out.println("Texte = " + txt); } String staTxt = request.getStatusText(); if (staTxt == null) { System.out.println("Pas de status retour"); } else { System.out.println("Status = " + staTxt); }
Au résultat j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 private XmlHttpRequest request; public XmlHttpRequest getRequest() { return request; } public void setRequest(XmlHttpRequest aRequest) { request = aRequest; } public void propertyChange(PropertyChangeEvent aEvt) { System.out.println("Property " + aEvt.getPropertyName() + "=" + aEvt.getNewValue()); if ("readyState".equals(aEvt.getPropertyName())) { if ("RECEIVING".equals(aEvt.getNewValue()) || "LOADING".equals(aEvt.getNewValue())) { System.out.println("Status=" + request.getStatus()); System.out.println("Status=" + request.getStatusText()); System.out.println("Réponse=" + request.getResponseText()); } } }
Property readyState=OPEN
Property readyState=SENT
Le document retour est null
Texte =
java.lang.IllegalStateException: You cannot call getStatusText() unless readySta
te == RECEIVING || LOADING
at org.jdesktop.swingx.html.HttpRequest.getStatusText(HttpRequest.java:2
15)
Il semble donc que ma requete XmlHttpRequest ne cherche jamais à se mettre en réception de données. Bien entendu, dasn IE, je recois une lfux XML en sortie de ma requete.
Voyez-vous le mal quelque part ??
D'avance merci.
Partager