Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

eBay -- Download Data using FileTransferService

See more eBay Examples

Demonstrates how to download a data file using the eBay File Transfer API.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Gzip;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.HttpRequest;
import com.chilkatsoft.chilkat2.HttpResponse;
import com.chilkatsoft.chilkat2.Mime;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.Xml;
import com.chilkatsoft.chilkat2.Zip;
import com.chilkatsoft.chilkat2.ZipEntry;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example assumes the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // Use a previously obtained access token.  The token should look something like this:
        // "AgAAAA**AQA ..."
        String accessToken = "EBAY_ACCESS_TOKEN";

        Http http = new Http();

        HttpRequest req = new HttpRequest();

        req.setHttpVerb("POST");
        req.setPath("/FileTransferService");
        req.setContentType("application/xml");

        // Build the XML body for the request.
        Xml xml = new Xml();
        xml.setTag("downloadFileRequest");
        xml.addAttribute("xmlns", "http://www.ebay.com/marketplace/services");
        xml.updateChildContent("taskReferenceId", "50013004806");
        xml.updateChildContent("fileReferenceId", "50015579016");

        req.loadBodyFromString(xml.getXml(), "utf-8");

        // The XML body looks like this:

        //     <?xml version="1.0" encoding="UTF-8"?>
        //     <downloadFileRequest xmlns="http://www.ebay.com/marketplace/services">
        //     <taskReferenceId>50013004806</taskReferenceId>
        //     <fileReferenceId>50015579016</fileReferenceId>
        //     </downloadFileRequest>

        req.addHeader("X-EBAY-SOA-OPERATION-NAME", "downloadFile");
        req.addHeader("X-EBAY-SOA-SECURITY-TOKEN", accessToken);

        HttpResponse resp = new HttpResponse();
        try {
            http.httpSReq("storage.sandbox.ebay.com", 443, true, req, resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        int statusCode = resp.getStatusCode();
        System.out.println("Response status code = " + statusCode);

        BinData responseBody = new BinData();
        resp.getBodyBd(responseBody);

        // We can save the response body to a file for examination if we get an unanticipated response.
        // (It's binary, so it won't open well in a text editor.)
        responseBody.writeFile("qa_output/response.mime");

        if (statusCode != 200) {
            System.out.println("Failed.");
            return;
        }

        // The response body looks like this:

        //     --MIMEBoundaryurn_uuid_2B668636C1E17A4D4114925305818684241
        //     Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
        //     Content-Transfer-Encoding: binary
        //     Content-ID: <0.urn:uuid:2B668636C1E17A4D4114925305818684242>
        //
        //     <?xml version='1.0' encoding='UTF-8'?>
        //     <downloadFileResponse xmlns="http://www.ebay.com/marketplace/services">
        //     <ack>Success</ack>
        //     <version>1.1.0</version>
        //     <timestamp>2017-04-18T15:49:41.868Z</timestamp>
        //     <fileAttachment>
        //         <Size>587</Size>
        //         <Data>
        //                 <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:urn:uuid:A37C3C73E994C267F11492530585522"/>
        //         </Data>
        //     </fileAttachment>
        //     </downloadFileResponse>
        //     --MIMEBoundaryurn_uuid_2B668636C1E17A4D4114925305818684241
        //     Content-Type: application/zip
        //     Content-Transfer-Encoding: binary
        //     Content-ID: <urn:uuid:A37C3C73E994C267F11492530585522>
        //
        //     <the binary bytes of the zip start here...>
        //

        // Load the binary response into a MIME object.
        Mime mime = new Mime();
        try {
            mime.loadMimeBd(responseBody);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Make sure we have 2 sub-parts.  The 1st sub-part is the XML response, the 2nd sub-part
        // is the zip containing the data.

        // Note: The 2nd sub-part can be a "zip" or "gzip".  These are two different file formats.
        // A zip is indicated with a Content-Type header equal to "application/zip",
        // whereas a gzip is indicated with a Content-Type header equal to "application/x-gzip"
        if (mime.getNumParts() != 2) {
            System.out.println("Expected the MIME to have 2 parts.");
            System.out.println("NumParts = " + mime.getNumParts());
            System.out.println("Failed.");
            return;
        }

        // Get the XML from the 1st MIME sub-part.

        Mime part0 = new Mime();
        try {
            mime.partAt(0, part0);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        String downloadResponseXml = part0.getBodyDecoded();
        Xml xmlResp = new Xml();
        xmlResp.loadXml(downloadResponseXml);
        System.out.println("Download Response XML:");
        System.out.println(xmlResp.getXml());

        System.out.println("----");

        // Now get the zip from the second part (index=1), unzip, and examine..

        Mime part1 = new Mime();
        try {
            mime.partAt(1, part1);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        BinData zipData = new BinData();
        part1.getBodyBd(zipData);

        // Check to see if we have a zip or gzip.
        StringBuilder sbContentType = new StringBuilder();
        sbContentType.append(part1.getContentType());

        Xml xmlFromZip = new Xml();

        if (sbContentType.contains("gzip", false)) {
            // This is a gzip compressed file.
            Gzip gzip = new Gzip();

            // in-place uncompress the data.
            // Note: The UncompressBd method was added in Chilkat v9.5.0.67
            try {
                gzip.uncompressBd(zipData);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }

            xmlFromZip.loadXml(zipData.getString("utf-8"));
        } else {
            // This is a zip archive.

            // Load the body into a Zip object.
            Zip zip = new Zip();
            try {
                zip.openBd(zipData);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }

            // Save the .zip to a file (so we can examine it for debugging if something is not as expected)
            zipData.writeFile("qa_output/ebay_data.zip");

            // The zip should contain a single XML file.
            if (zip.getNumEntries() != 1) {
                System.out.println("Expected the .zip to have 1 entry.");
                System.out.println("NumEntries = " + zip.getNumEntries());
                System.out.println("Failed.");
                return;
            }

            ZipEntry entry = new ZipEntry();
            try {
                zip.entryAt(0, entry);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }

            xmlFromZip.loadXml(entry.unzipToString(0, "utf-8"));
        }

        System.out.println("XML contained in the zip:");
        System.out.println(xmlFromZip.getXml());
        System.out.println("----");

        System.out.println("Success.");
    }
}