jdesktop XmlHttpRequest sans flux retour
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 :
Code:
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");
} |
Pour se faire, j'ai utilisé la classe XmlHttpRequest de Jdesktop de cette façon :
Code:
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);
} |
Le PropListener fait :
Code:
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());
}
}
} |
Au résultat j'obtiens :
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.