Bonjour,
Je ne savais pas trop où poster alors comme je suis débutante en java, j'ai supposé que ce post avait sa place ici.
Je vous explique mon problème : je suis en stage où je dois travailler à faire une signature xml en n'ayant jamais fait de Java avant... Pas évident
J'ai lu quelques tuto de base de Java mais pas évident de cibler ce que je dois apprendre tellement Java est vaste !
Donc me voilà rendu à essayer de faire du bidouillage pour comprendre le code qu'on me donne et savoir pourquoi ça marche pas ><
Bref, voici ce que j'ai 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 String mandate="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +"<document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pain.009.001.01\">\n" +"<MndtInitnReq> \n" +"<Mndt>\n" +"<MndtReqId>00081902E92D2109</MndtReqId>\n" +"<Cdtr>\n" +"<Nm>AtomShop TEST BRED 1</Nm>\n" +"<PstlAdr>\n" +"<TwnNm>41000 BLOIS</TwnNm>\n" +" </PstlAdr>\n" +" <Id>\n" +" <OrgId>\n" +" <BICOrBEI>55209179500781</BICOrBEI>\n" +" </OrgId>\n" +" </Id>\n" +" </Cdtr>\n" +" <Dbtr>\n" +" <Nm>Saita Chana</Nm>\n" +" </Dbtr>\n" +" <DbtrAcct>\n" +" <Id>\n" +" <IBAN>FR7614505000021234567890132</IBAN>\n" +" </Id>\n" +" </DbtrAcct>\n" +" <DbtrAgt>\n" +" <FinInstnId>\n" +" <BIC>CEPAFRPP450</BIC>\n" +" </FinInstnId>\n" +" </DbtrAgt>\n" +"</Mndt>\n" +" </MndtInitnReq>\n" +"</document>\n";Et voici ce que ça me donne en console :
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 private static void test_create_signature_enveloping2 (DigestMethod dm, SignatureMethod sm, KeyInfo ki, Key signingKey, KeySelector ks, boolean b64,String mandate) throws Exception { // create reference Reference ref; if (b64) { ref = fac.newReference("#object", dm, Collections.singletonList (fac.newTransform(Transform.BASE64, (TransformParameterSpec) null)), null, null); } else { ref = fac.newReference("#object", dm); } // create SignedInfo SignedInfo si = fac.newSignedInfo(withoutComments, sm, Collections.singletonList(ref)); Document doc = db.parse(new ByteArrayInputStream(mandate.getBytes())); System.out.println("Début du test1"); Element racine = doc.getDocumentElement(); NodeList liste = racine.getElementsByTagName("*"); for(int i=0; i<liste.getLength(); i++){ Element e = (Element)liste.item(i); System.out.println(e.toString()); } System.out.println("Début du test2"); DOMSource domSource = new DOMSource(doc); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(domSource, result); String stringResult = writer.toString(); System.out.println(stringResult);
Ma première question étant : Ce qui s'affiche au début correspond bien aux noeuds de mon document ?
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 Début du test1 [MndtInitnReq: null] [Mndt: null] [MndtReqId: null] [Cdtr: null] [Nm: null] [PstlAdr: null] [TwnNm: null] [Id: null] [OrgId: null] [BICOrBEI: null] [Dbtr: null] [Nm: null] [DbtrAcct: null] [Id: null] [IBAN: null] [DbtrAgt: null] [FinInstnId: null] [BIC: null] Début du test2 <?xml version="1.0" encoding="UTF-8"?><document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.009.001.01"> <MndtInitnReq> <Mndt> <MndtReqId>00081902E92D2109</MndtReqId> <Cdtr> <Nm>AtomShop TEST BRED 1</Nm> <PstlAdr> <TwnNm>41000 BLOIS</TwnNm> </PstlAdr> <Id> <OrgId> <BICOrBEI>55209179500781</BICOrBEI> </OrgId> </Id> </Cdtr> <Dbtr> <Nm>Saita Chana</Nm> </Dbtr> <DbtrAcct> <Id> <IBAN>FR7614505000021234567890132</IBAN> </Id> </DbtrAcct> <DbtrAgt> <FinInstnId> <BIC>CEPAFRPP450</BIC> </FinInstnId> </DbtrAgt> </Mndt> </MndtInitnReq> </document>
Deuxième question : pourquoi sont-ils marqués null alors qu'ils sont renseignés dans le XML ?
**************************************
Deuxième partie de mon problème :
Voici un code que l'on m'a donné pour la suite de ma signature :
Vous l'aurez bien compris, cela ne marche pas..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 XMLObject obj = fac.newXMLObject(Collections.singletonList (new DOMStructure(doc.appendChild(doc.getDocumentElement()))), // createTextNode(text))), "object", null, null); // create XMLSignature XMLSignature sig = fac.newXMLSignature (si, ki, Collections.singletonList(obj), null, null);
J'ai bien compris que la XML signature attend un XML Object en premier argument, mais j'ai pas trop compris ce que j'ai mis dans obj et pourquoi cela ne lui convient pas..
J'espère avoir été claire, si ce n'est pas le cas, n'hésitez pas à me demander des précisions.
Merci pour votre aide par avance,
Saita
Partager