Bonjour,

J'ai une applet sur une page web.
Je l'appelle via javascript en lui passant 3 paramètres:
Le 2 et 3 n'ont pas d'importance pour l'instant, le premier est un string en base 64 d'un fichier pdf (pour le forum raccourci en JVBERi0xLjQKJ[...]MAolJUVPRgoA).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
var result = document.getElementById('SignPdf').SignPdf("JVBERi0xLjQKJ[...]MAolJUVPRgoA",null,null);
j'arrive côté java:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public byte[] SignPdf(String streamStr, String reasonP, String locationP) {
        this.lbl_Message.setText("avant base64 to bytes");
        String streamStr64 = streamStr;
        this.lbl_Message.setText(streamStr64);
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            unsignedBytes = decoder.decodeBuffer(streamStr64);
        } catch (IOException ex) {
            this.lbl_Message.setText(ex.getMessage()+" ||| "+ex.toString());
        }
        this.lbl_Message.setText("après base64 to bytes. nbr:"+unsignedBytes.length);
j'ai plusieurs debug qui me permette de voir que je reste callé dans le décodage. rien ne se passe, je ne passe jamais dans mon catch.
la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.lbl_Message.setText(streamStr64);
me permet de voir que j'ai bien récupéré l'entierté du paramètre, exactement comme je l'ai passé!


Si maintenant je passe ceci en javascript:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
var result = document.getElementById('SignPdf').SignPdf(null,null,null);
avec mon code java transformé comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public byte[] SignPdf(String streamStr, String reasonP, String locationP) {
        this.lbl_Message.setText("avant base64 to bytes");
        //String streamStr64 = streamStr;
        String streamStr64 = "JVBERi0xLjQKJ[...]MAolJUVPRgoA";
        this.lbl_Message.setText(streamStr64);
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            unsignedBytes = decoder.decodeBuffer(streamStr64);
        } catch (IOException ex) {
            this.lbl_Message.setText(ex.getMessage()+" ||| "+ex.toString());
        }
        this.lbl_Message.setText("après base64 to bytes. nbr:"+unsignedBytes.length);
tout fonctionne bien, la transformation en bytes fonctionne!
je n'y comprends rien, pour moi ça devrait faire exactement la même chose.
Ma ligne de debug ou j'affiche dans un textField le contenu de ma variable prouve que je me retrouve exactement dans la même situation avant la transformation stream64->bytes

je deviens fou, aidez-moi

ps: j'ai aussi essayé d'utiliser une librairie externe pour décoder le base64 -> bytes, même comportement ça ne doit pas venir de là (ça fonctionne d'ailleurs dans un des 2 modes)