No se puede decodificar un objeto codificado en Base64

Estoy usando la API de Salesforce para obtener un documento de Salesforce en mi máquina local. El documento está codificado en base64. Se devuelve como un tipo de objeto. Cuando trato de decodificarlo para guardarlo en mi máquina local, da un error 'java.lang.ArrayIndexOutOfBoundsException: -84'. Sé que ocurre cuando intentamos acceder a un índice inexistente en una matriz, pero no lo haré aquí. Estoy usando la biblioteca de commons.

¿Alguien de ustedes podría ayudarme o sugerir una mejor manera de decodificar y almacenar el archivo en mi máquina local?

import org.apache.commons.codec.binary.Base64; //and other imports
private void querySample() {
    try {
        // Set query batch size
        partnerConnection.setQueryOptions(250);

        // SOQL query to use
        String soqlQuery = "SELECT Name, Body, BodyLength FROM Document LIMIT 1";
        // Make the query call and get the query results
        QueryResult qr = partnerConnection.query(soqlQuery);

        boolean done = false;
        SObject document;
        Object docName;
        Object docBody;
        Object bodyLength;
        byte[] encoded;
        byte[] decoded;
        int loopCount = 0;
        // Loop through the batches of returned results
        while (!done) {
            System.out.println("Records in results set " + loopCount++
                    + " - ");
            SObject[] records = qr.getRecords();
            // Process the query results
            for (int i = 0; i < records.length; i++) {
                document = records[i];
                docName = document.getField("Name");
                docBody = document.getField("Body");            //Body is base 64
                bodyLength = document.getField("BodyLength");

                encoded = serialize(docBody);
                Integer size = Integer.parseInt((String) bodyLength);

                decoded = new byte[size];   

                decoded = Base64.decodeBase64(encoded); //<-- Getting error here

                String path = "D:\\myImage.png";
                OutputStream out1 = new BufferedOutputStream(
                        new FileOutputStream(path));
                out1.write(decoded);

            }
            if (qr.isDone()) {
                done = true;
            } else {
                qr =   partnerConnection.queryMore(qr.getQueryLocator());
            }

        }
    } catch (ConnectionException ce) {
        ce.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    System.out.println("\nQuery execution completed.");

}

public static byte[] serialize(Object obj) throws IOException {
    ByteArrayOutputStream b = new ByteArrayOutputStream();
    ObjectOutputStream o = new ObjectOutputStream(b);
    o.writeObject(obj);
    return b.toByteArray();
}

preguntado el 29 de septiembre de 13 a las 22:09

Cualquier posibilidad de que pueda proporcionar el stacktrace. ¿O incluso los datos que está decodificando? -

en org.apache.commons.codec.binary.Base64.isBase64(Base64.java:137) en org.apache.commons.codec.binary.Base64.discardNonBase64(Base64.java:478) en org.apache.commons.codec .binary.Base64.decodeBase64(Base64.java:374) en SFTPMain.querySample(SFTPMain.java:115) en SFTPMain.main(SFTPMain.java:32) -

¿Cuál es el trato con la llamada de serialización allí? ¿Por qué no solo Base64 decodifica el propio docBody? -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.