car je pensais que ca allais supprimer les erreurs de tout mon string dun coup plutot que de voir un par un .
Merci infiniment
Je tiens a ajouter que le code marche parfaitement en java .
C'est c# qui me ait de sproblemes .
Je tiens a ajouter aussi que avant dajouter cette ligne
J'avais ajouter ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part responseString = responseString.Replace("&", "&").Replace("\"", """).Replace(">", ">").Replace("<", "<").Replace("'", "'");
mais lerreur subvenue etait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int i = 0; int l = responseString.Length; while (i <= l) { int j = i + 1; int k = i + 2; if (responseString[i] == '=' && responseString[j] == '"') i = i + 2; else if (responseString[i] == '"' && responseString[j] >= 'a' && responseString[j] <= 'z') { responseString = responseString.Insert(j, " "); i = i + 2; } else i = i + 1; }
donc jen avais marre de faire ligne par ligne surtt que javais aucun moyen de savoir ou etait la ligne 30,position 25 .
Code : Sélectionner tout - Visualiser dans une fenêtre à part + $exception {"An error occurred while parsing EntityName. Line 30, position 25."} System.Exception {System.Xml.XmlException}
Mercii
Non. Si ton XML est foireux de base, quelque soit le langage que tu utilises, ça va te faire n'importe quoi.
De plus, HTML, même si cela ressemble à du XML, n'est pas du XML. Si tu veux pouvoir manipuler du HTML comme du XML, alors il faut que tu aies du XHTML. Ce que j'ai l'impression, c'est que ton code java utilise un parser HTML. Tu essaies de le convertir en C# en utilisant un parser XML. Du coup, ça coince, et c'est normal.
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
Voici le code en Java.
Merci Bcpppppppppp !!!!!!!!!!!!!
Code java : 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 import org.w3c.dom.Document; import org.xml.sax.InputSource; import com.creditguard.xpo.client.XpoRequest; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) { if (args.length != 7) { log("Arguments Error. Please apply: [userName] [password] [serverName] [terminalNumber] [token] [Folder] [FileName]"); return; } String int_in = "<ashrait><request><command>doDeal</command><version>1001</version><language>Eng</language><mayBeDuplicate>0</mayBeDuplicate><doDeal><terminalNumber>" + args[3] + "</terminalNumber><cardId>" + args[4] + "</cardId><cardExpiration/><transactionType>Debit</transactionType><creditType>RegularCredit</creditType><currency>ILS</currency><transactionCode>Phone</transactionCode><total/><validation>cardNo</validation><user>mytestj201</user></doDeal></request></ashrait>"; String user = args[0]; String password = args[1]; String serverName = args[2]; XpoRequest xpoReq = new XpoRequest(); String response = xpoReq.runRequest(int_in, user, password, serverName); if (response.equals("The client could not retrieve the XPO Web Service answer.")) { log("Problem connecting to Credit Guard. please check [serverName]. Error: " + response); return; } Document doc = null; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(response)); doc = builder.parse(is); } catch (Exception e) { log("Problem parsing answer from Credit Guard. Error: " + e.getMessage()); return; } doc.getDocumentElement().normalize(); String resultCode = doc.getElementsByTagName("result").item(0).getTextContent(); String resultDescription = doc.getElementsByTagName("message").item(0).getTextContent(); if (!resultCode.equals("000")){ log("Request Faild. Error code: " + resultCode + ". Description: " + resultDescription); return; } String resultCard = doc.getElementsByTagName("cardNo").item(0).getTextContent(); String expDate = doc.getElementsByTagName("cardExpiration").item(0).getTextContent(); String[] lines = { "[token]", "Card = " + resultCard, "ExpDate = " + expDate, "Result = " + resultCode, "Description = " + resultDescription }; if (!args[5].endsWith("\\") && (!args[5].endsWith("/"))) args[5] += "\\"; File file = new File(args[5]); if (!file.exists()) { if (!file.mkdir()) { log("Directory [" + args[5] + "] has failed to be created."); return; } } file = new File(file, args[6]); FileWriter fw = null; try { fw = new FileWriter(file); for (int i = 0; i < lines.length; i++) { fw.write(lines[i] + "\n"); } fw.close(); } catch (IOException ex) { log("File [" + args[5] + args[6] + "] has failed to be created. Error: " + ex.getStackTrace()); log(ex.getMessage()); return; } log("File [" + args[5] + args[6] + "] created successfully"); } public static void log(String msg) { //First print in for me System.out.println(msg); //set datetime DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); String time = dateFormat.format(date); FileOutputStream fop = null; File file; try { String currentDir = System.getProperty("user.dir"); file = new File(currentDir + "\\NBCreditGuard_Log.txt"); fop = new FileOutputStream(file, true); // if file doesnt exists, then create it if (!file.exists()) { file.createNewFile(); } // get the content in bytes byte[] contentInBytes = (time + " " + msg + "\r\n").getBytes(); fop.write(contentInBytes); fop.flush(); fop.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fop != null) { fop.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
C#
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Xml; namespace NBCreditGuard { class Program { static void Main(string[] args) { if (args.Length != 7) { ///////////il y a ecrit toker=5eme argument faire gaff ds lexception log("Arguments Error. Please apply: [userName] [password] [serverName] [terminalNumber] [token] [Folder] [FileName]"); return; } HttpWebResponse response; XmlDocument xmlDoc = new XmlDocument(); try { response = createMPITransaction(args[0], args[1], args[2], args[3], args[4]); string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); //int i = 0; int l = responseString.Length; //while (i <= l) { // int j = i + 1; int k = i + 2; // if (responseString[i] == '=' && responseString[j] == '"') i = i + 2; // else if (responseString[i] == '"' && responseString[j] >= 'a' && responseString[j] <= 'z') { // responseString = responseString.Insert(j, " "); i = i + 2; // } else i = i + 1; //} // responseString = responseString.Replace("&", "&").Replace("\"", """).Replace(">", ">").Replace("<", "<").Replace("'", "'"); // xmlDoc.LoadXml(responseString); xmlDoc.Load(responseString); } catch (Exception ex) { log("Problem connecting to Credit Guard. Error: " + ex.Message); return; } string Results = xmlDoc.GetElementsByTagName("result").Item(0).InnerText; string ResultType = xmlDoc.GetElementsByTagName("message").Item(0).InnerText; if (!Results.Equals("000")) { log("Request Faild. Error code: " + Results + ". Description: " + ResultType); return; } string ResultCard = xmlDoc.GetElementsByTagName("cardNo").Item(0).InnerText; string ResultExpDate = xmlDoc.GetElementsByTagName("cardExpiration").Item(0).InnerText; if (!Directory.Exists(args[5])) { try { Directory.CreateDirectory(args[5]); } catch (Exception ex) { log("Directory [" + args[5] + "] has failed to be created. Error: " + ex.Message); return; } } string[] lines = { "[token]", "Card = " + ResultCard, "ExpDate = " + ResultExpDate, "Result = " + Results, "Description = " + ResultType }; try { if (!args[5].EndsWith("\\") && !(args[5].EndsWith("/"))) args[5] += "\\"; } catch (Exception ex) { log(ex.Message); } try { System.IO.File.WriteAllLines(args[5] + args[6], lines); } catch (Exception ex) { log("File [" + args[5] + args[6] + "] has failed to be created. Error: " + ex.Message); return; } log("File [" + args[5] + args[6] + "] created succefuly"); } private static HttpWebResponse createMPITransaction(string user, string password, string server, string terminal, string token) { string postString = "user=" + user + "&password=" + password + "&int_in=<ashrait><request><command>doDeal</command><version>1001</version><language>Eng</language><mayBeDuplicate>0</mayBeDuplicate><doDeal><terminalNumber>" + terminal + "</terminalNumber><cardId>" + token + "</cardId><cardExpiration/><transactionType>Debit</transactionType><creditType>RegularCredit</creditType><currency>ILS</currency><transactionCode>Phone</transactionCode><total/><validation>cardNo</validation><user/></doDeal></request></ashrait>"; // create a request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; // turn our request string into a byte stream byte[] postBytes = Encoding.GetEncoding("UTF-8").GetBytes(postString); // this is important - make sure you specify type this way request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; request.Timeout = 3000; Stream requestStream = request.GetRequestStream(); //// now send it requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); // grab te response and print it out to the System.Diagnostics.Debug along with the status code HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return response; } private static void log(String msg) { System.Diagnostics.Debug.WriteLine(msg); FileStream fs = File.Open(Directory.GetCurrentDirectory() + "\\NBCreditGuard_Log.txt", FileMode.Append); DateTime date = DateTime.Now; Byte[] info = new UTF8Encoding(true).GetBytes(date.ToString() + " " + msg + "\r\n"); fs.Write(info, 0, info.Length); fs.Close(); } } }
Bonjour,
J'ai l'impression que le problème ne vient pas du traitement de la réponse (car en java, c'est bien du XML qui est parsé), mais de la réponse elle-même !
Avec le code que vous nous avez fourni, la réponse attendue est du style
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <root> <result>...</result> <message>...</message> <cardNo>...</cardNo> ... </root>
Hors, rien de tout cela dans l'extrait que vous nous avez fourni. Il s'agit d'un code HTML avec la présence d'un formulaire pour login/mot de passe. Comme si l'identification n'était pas réussi et donc que la requête était redirigée vers un formulaire d'authentification.
Donc, pour vérifier tout cela, il faut :
- Récupérer la réponse obtenue via le code Java et la mettre dans un fichier ;
- Récupérer la réponse obtenue via le code C# et la mettre dans un fichier ;
- Comparer les fichiers.
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
Merci infiniment de ta patience.
J'essai d'executer mon programme en java en ayant telecharger netbeans pour ainsi debugger mais il s'arrete a ce niveau
le code en java n'a pas ete ecrit par moi ... je comprend pas pk il me fais une erreur ici?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import com.creditguard.xpo.client.XpoRequest;
Merci bcp ....
Ps: Quel fichier as tu recu en executant java ?
Merci
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
J'ai l'impression que tu essaies d'obtenir d'un serveur web une page puis que tu veux l'analyser au moyen d'un parser xml. Étant donnée rigueur bien connue du html je pense que tu vas au devant des ennuis. Quel est le problème que tu essaies de résoudre au départ ?
Deja Merci Beaucoup de l'interet que tu portes a mon probleme.
En fait mon travail est de resoudre les problemes (mon boss me donne un programme et en 2 mots je dois me debrouiller , je suis toute nouvelle) .
Donc il m'a donner le programme en me demandant de resoudre le probleme il ma dit que ce n'etait pas normal que ca ne marchait pas .
le programme est celui-cu en c#.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Xml; namespace NBCreditGuard { class Program { static void Main(string[] args) { if (args.Length != 7) { ///////////il y a ecrit toker=5eme argument faire gaff ds lexception log("Arguments Error. Please apply: [userName] [password] [serverName] [terminalNumber] [token] [Folder] [FileName]"); return; } HttpWebResponse response; XmlDocument xmlDoc = new XmlDocument(); try { response = createMPITransaction(args[0], args[1], args[2], args[3], args[4]); string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); xmlDoc.LoadXml(responseString); } catch (Exception ex) { log("Problem connecting to Credit Guard. Error: " + ex.Message); return; } string Results = xmlDoc.GetElementsByTagName("result").Item(0).InnerText; string ResultType = xmlDoc.GetElementsByTagName("message").Item(0).InnerText; if (!Results.Equals("000")) { log("Request Faild. Error code: " + Results + ". Description: " + ResultType); return; } string ResultCard = xmlDoc.GetElementsByTagName("cardNo").Item(0).InnerText; string ResultExpDate = xmlDoc.GetElementsByTagName("cardExpiration").Item(0).InnerText; if (!Directory.Exists(args[5])) { try { Directory.CreateDirectory(args[5]); } catch (Exception ex) { log("Directory [" + args[5] + "] has failed to be created. Error: " + ex.Message); return; } } string[] lines = { "[token]", "Card = " + ResultCard, "ExpDate = " + ResultExpDate, "Result = " + Results, "Description = " + ResultType }; try { if (!args[5].EndsWith("\\") && !(args[5].EndsWith("/"))) args[5] += "\\"; } catch (Exception ex) { log(ex.Message); } try { System.IO.File.WriteAllLines(args[5] + args[6], lines); } catch (Exception ex) { log("File [" + args[5] + args[6] + "] has failed to be created. Error: " + ex.Message); return; } log("File [" + args[5] + args[6] + "] created succefuly"); } private static HttpWebResponse createMPITransaction(string user, string password, string server, string terminal, string token) { string postString = "user=" + user + "&password=" + password + "&int_in=<ashrait><request><command>doDeal</command><version>1001</version><language>Eng</language><mayBeDuplicate>0</mayBeDuplicate><doDeal><terminalNumber>" + terminal + "</terminalNumber><cardId>" + token + "</cardId><cardExpiration/><transactionType>Debit</transactionType><creditType>RegularCredit</creditType><currency>ILS</currency><transactionCode>Phone</transactionCode><total/><validation>cardNo</validation><user/></doDeal></request></ashrait>"; // create a request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; // turn our request string into a byte stream byte[] postBytes = Encoding.GetEncoding("UTF-8").GetBytes(postString); // this is important - make sure you specify type this way request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; request.Timeout = 3000; Stream requestStream = request.GetRequestStream(); //// now send it requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); // grab te response and print it out to the System.Diagnostics.Debug along with the status code HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return response; } private static void log(String msg) { System.Diagnostics.Debug.WriteLine(msg); FileStream fs = File.Open(Directory.GetCurrentDirectory() + "\\NBCreditGuard_Log.txt", FileMode.Append); DateTime date = DateTime.Now; Byte[] info = new UTF8Encoding(true).GetBytes(date.ToString() + " " + msg + "\r\n"); fs.Write(info, 0, info.Length); fs.Close(); } } }
et les parametres envoyes sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1.user 2.mot de passe 3.url du site pour entrer puis ca 8803375 1085330375065080 .\ TOKEN712892689884.$$$
J'ai limpression que la ligne en gras pose probleme mais je ne comprend pas pk .
Merci infiniment
J'avais essaye avec ca .
mais ca ma laisse qq erreurs que je n'arrive vraiment pas a resoudre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 responseString = responseString.Replace("&", "&").Replace("\"", """).Replace(">", ">").Replace("<", "<").Replace("'", "'");
Merci beaucoup
Ce n'est pas parce qu'une erreur survient sur une ligne que c'est cette ligne la fautive. En l'occurrence, ici, ce sont les données qui devraient être du XML mais qui ne l'est pas. Le problème se situe donc avant.
Je pense que c'est une erreur. Tu as un code Java qui envoi des paramètres (on ne sait pas comment) et qui récupère une réponse fonctionnelle.
Tu as un code C# qui envoie ces mêmes paramètres en POST mais qui n'a pas une réponse fonctionnelle.
Reprenons le code Java : xpoReq.runRequest(int_in, user, password, serverName).
On ne sait pas comment sont passés int_in, user et password. En GET, en POST, via un en-tête dans la requête ? Un mixte de ces possibilités ? En HTTP ou HTTPS ?
La class XpoRequest ne semble pas très connue par Google. Est-ce une classe interne chez vous ? Il faudrait y jeter un oeil si possible... ou à sa documentation.
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
En effet en Java je n'ai pas reussi a trouver d'ou provenait la class xporequest . Tous ces programmes existaient deja ce n'est pas moi qui les ai ecrit donc maintenant je nessaie pas de comparer mais dessaeyr de regler le probleme de nouveau .
Je boss aevc visual studio les parametres sont envoyes par "properties" qui sont automatiquement renvoyes des le debut du programme au main (args).
Mercii de ton aide
L'objectif n'est pas de comparer pour comparer, mais de comparer pour trouver la source de l'erreur. De ce que vous nous avez donné comme informations, la source pour moi se situe plutôt au niveau de la requête et de son envoi que du traitement de la réponse (cf. mon commentaire plus haut). Vous pouvez donc faire tous les traitements que vous voulez sur la réponse, si le problème est bien sur la requête cela ne résoudra pas votre problème. Faire la comparaison permettra de déterminer où se situe l'erreur et donc d'aiguiller les recherches.
Je parle de comment sont passés les paramètres lors de l'appel du webservice, pas sur le comment ils sont récupérés par l'application.
François DORIN
Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
Site internet | Profils Viadéo & LinkedIn
---------
Page de cours : fdorin.developpez.com
---------
N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager