No se puede decodificar un objeto codificado en Base64
Frecuentes
Visto 1,678 veces
1
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();
}
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java object salesforce base64 decode or haz tu propia pregunta.
Cualquier posibilidad de que pueda proporcionar el stacktrace. ¿O incluso los datos que está decodificando? - BevynQ
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) - Shahid Ali
¿Cuál es el trato con la llamada de serialización allí? ¿Por qué no solo Base64 decodifica el propio docBody? - amrcn_werewolf