1

ローカル マシンでセールスフォース ドキュメントを取得するために、セールスフォース API を使用しています。ドキュメントは base64 でエンコードされています。Object 型として返されます。デコードしてローカル マシンに保存しようとすると、「java.lang.ArrayIndexOutOfBoundsException: -84」エラーが発生します。配列の存在しないインデックスにアクセスしようとすると発生することはわかっていますが、ここでは行っていません。コモンズ ライブラリを使用しています。

あなたの誰かが私を助けたり、ファイルをデコードして私のローカルマシンに保存するためのより良い方法を提案してくれませんか.

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();
}
4

0 に答える 0