Java SDK Samples - Bulk Write Operations

Upload File
              
              
package samples.src.com.zoho.crm.api.bulkwrite;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.zoho.crm.api.HeaderMap;

import com.zoho.crm.api.bulkwrite.SuccessResponse;

import com.zoho.crm.api.bulkwrite.APIException;

import com.zoho.crm.api.bulkwrite.ActionResponse;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations.UploadFileHeader;

import com.zoho.crm.api.util.Choice;

import com.zoho.crm.api.bulkwrite.BulkWriteResponse;

import com.zoho.crm.api.bulkwrite.CallBack;

import com.zoho.crm.api.bulkwrite.FieldMapping;

import com.zoho.crm.api.bulkwrite.FileBodyWrapper;

import com.zoho.crm.api.bulkwrite.RequestWrapper;

import com.zoho.crm.api.bulkwrite.Resource;

import com.zoho.crm.api.bulkwrite.ResponseHandler;

import com.zoho.crm.api.bulkwrite.ResponseWrapper;

import com.zoho.crm.api.bulkwrite.Result;

import com.zoho.crm.api.util.APIResponse;

import com.zoho.crm.api.util.Model;

import com.zoho.crm.api.util.StreamWrapper;

public class BulkWrite
{
    
    /**
     * Upload File
     * This method is used to upload a CSV file in ZIP format for bulk write API. The response contains the file_id.
     * Use this ID while making the bulk write request.
     * @param orgID The unique ID (zgid) of your organization obtained through the Organization API.
     * @param absoluteFilePath The absolute path to the file you want to upload.
     * @throws Exception
     */
    public static void uploadFile(String orgID, String absoluteFilePath) throws Exception
    {
        //example
        //String absoluteFilePath = "/Users/user_name/Documents/Leads.zip";
        //String orgID = "673573045";
        
        //Get instance of BulkWriteOperations Class
        BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
        
        //Get instance of FileBodyWrapper class that will contain the request file
        com.zoho.crm.api.bulkwrite.FileBodyWrapper fileBodyWrapper = new com.zoho.crm.api.bulkwrite.FileBodyWrapper();
        
        //Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
        StreamWrapper streamWrapper = new StreamWrapper(absoluteFilePath);
        
        //FileInputStream stream = new FileInputStream(absoluteFilePath);
        
        //Get instance of StreamWrapper class that takes file name and stream of the file to be attached as parameter
        //StreamWrapper streamWrapper = new StreamWrapper("Leads.zip", stream);
        
        //Set file to the FileBodyWrapper instance
        fileBodyWrapper.setFile(streamWrapper);
        
        //Get instance of HeaderMap Class
        HeaderMap headerInstance = new HeaderMap();
        
        //To indicate that this a bulk write operation
        headerInstance.add(UploadFileHeader.FEATURE, "bulk-write");
        
        headerInstance.add(UploadFileHeader.X_CRM_ORG, orgID);
        
        //Call uploadFile method that takes FileBodyWrapper instance and headerInstance as parameter
        APIResponse response = bulkWriteOperations.uploadFile(fileBodyWrapper, headerInstance);
        
        if(response != null)
        {
            //Get the status code from response
            System.out.println("Status Code: " + response.getStatusCode());
            
            //Check if expected response is received
            if(response.isExpected())
            {
                //Get object from response
                ActionResponse actionResponse = response.getObject();
                
                //Check if the request is successful
                if(actionResponse instanceof SuccessResponse)
                {
                    //Get the received SuccessResponse instance
                    SuccessResponse successResponse = (SuccessResponse)actionResponse;
                    
                    //Get the Status
                    System.out.println("Status: " + successResponse.getStatus().getValue());
                    
                    //Get the Code
                    System.out.println("Code: " + successResponse.getCode().getValue());
                    
                    System.out.println("Details: " );
                    
                    //Get the details map
                    for(Map.Entry entry : successResponse.getDetails().entrySet())
                    {
                        //Get each value in the map
                        System.out.println(entry.getKey() + ": " + entry.getValue());
                    }
                    
                    //Get the Message
                    System.out.println("Message: " + successResponse.getMessage().getValue());
                }
                //Check if the request returned an exception
                else if(actionResponse instanceof APIException)
                {
                    //Get the received APIException instance
                    APIException exception = (APIException) actionResponse;
                    
                    if(exception.getStatus() != null)
                    {
                        //Get the Status
                        System.out.println("Status: " + exception.getStatus().getValue());
                    }
                    
                    if(exception.getCode() != null)
                    {
                        //Get the Code
                        System.out.println("Code: " + exception.getCode().getValue());  
                    }
                    
                    if(exception.getMessage() != null)
                    {
                        //Get the Message
                        System.out.println("Message: " + exception.getMessage().getValue());
                    }
                    
                    System.out.println("Details: " );
                    
                    if(exception.getDetails() != null)
                    {
                        //Get the details map
                        for(Map.Entry entry : exception.getDetails().entrySet())
                        {
                            //Get each value in the map
                            System.out.println(entry.getKey() + ": " + entry.getValue());
                        }
                    }
                    
                    if(exception.getErrorMessage() != null)
                    {
                        //Get the ErrorMessage
                        System.out.println("ErrorMessage: " + exception.getErrorMessage().getValue());
                    }
                    
                    //Get the ErrorCode
                    System.out.println("ErrorCode: " + exception.getErrorCode());
                    
                    if(exception.getXError() != null)
                    {
                        //Get the XError
                        System.out.println("XError: " + exception.getXError().getValue());
                    }
                    
                    if(exception.getInfo() != null)
                    {
                        //Get the Info
                        System.out.println("Info: " + exception.getInfo().getValue());
                    }
                    
                    if(exception.getXInfo() != null)
                    {
                        //Get the XInfo
                        System.out.println("XInfo: " + exception.getXInfo().getValue());
                    }
                    
                    //Get the HttpStatus
                    System.out.println("HttpStatus: " + exception.getHttpStatus());
                }
            }
            else
            {//If response is not as expected
                
                //Get model object from response
                Model responseObject = response.getModel();
                
                //Get the response object's class
                Class extends Model> clas = responseObject.getClass();
                
                //Get all declared fields of the response class
                java.lang.reflect.Field[] fields = clas.getDeclaredFields();
                
                for(java.lang.reflect.Field field : fields)
                {
                    //Get each value
                    System.out.println(field.getName() + ":" + field.get(responseObject));
                }
            }
        }
    }
}
 
Create a Bulk Write Job
              
              
package samples.src.com.zoho.crm.api.bulkwrite;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.zoho.crm.api.HeaderMap;

import com.zoho.crm.api.bulkwrite.SuccessResponse;

import com.zoho.crm.api.bulkwrite.APIException;

import com.zoho.crm.api.bulkwrite.ActionResponse;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations.UploadFileHeader;

import com.zoho.crm.api.util.Choice;

import com.zoho.crm.api.bulkwrite.BulkWriteResponse;

import com.zoho.crm.api.bulkwrite.CallBack;

import com.zoho.crm.api.bulkwrite.FieldMapping;

import com.zoho.crm.api.bulkwrite.FileBodyWrapper;

import com.zoho.crm.api.bulkwrite.RequestWrapper;

import com.zoho.crm.api.bulkwrite.Resource;

import com.zoho.crm.api.bulkwrite.ResponseHandler;

import com.zoho.crm.api.bulkwrite.ResponseWrapper;

import com.zoho.crm.api.bulkwrite.Result;

import com.zoho.crm.api.util.APIResponse;

import com.zoho.crm.api.util.Model;

import com.zoho.crm.api.util.StreamWrapper;

public class BulkWrite
{
    /**
     * Create BulkWrite Job
     * This method is used to create a bulk write job.
     * @param moduleAPIName The API Name of the record's module.
     * @param fileId The ID of the uploaded file to create BulkWrite Job.
     */
    public static void createBulkWriteJob(String moduleAPIName, String fileId) throws Exception
    {
        //example
        //String moduleAPIName = "Leads";
        //String fileId  = "34770616121001";
        
        //Get instance of BulkWriteOperations Class
        BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
        
        //Get instance of RequestWrapper Class that will contain the request body
        RequestWrapper requestWrapper = new RequestWrapper();
        
        //Get instance of CallBack Class
        CallBack callback = new CallBack();
        
        // To set valid callback URL.
        callback.setUrl("https://www.example.com/callback");
        
        //To set the HTTP method of the callback URL. The allowed value is post.
        callback.setMethod(new Choice("post"));
        
        //The Bulk Write Job's details are posted to this URL on successful completion of job or on failure of job.
        requestWrapper.setCallback(callback);
        
        //To set the charset of the uploaded file
        requestWrapper.setCharacterEncoding("UTF-8");
        
        //To set the type of operation you want to perform on the bulk write job.
        requestWrapper.setOperation(new Choice("upsert"));
        
        List resource = new ArrayList();
        
        //Get instance of Resource Class
        Resource resourceIns = new Resource();
        
        // To set the type of module that you want to import. The value is data.
        resourceIns.setType(new Choice("data"));
        
        //To set API name of the module that you select for bulk write job.
        resourceIns.setModule(moduleAPIName);
        
        //To set the file_id obtained from file upload API.
        resourceIns.setFileId(fileId);
        
        //True - Ignores the empty values.The default value is false. 
        resourceIns.setIgnoreEmpty(true);
        
        // To set a field as a unique field or ID of a record. 
        resourceIns.setFindBy("Email");
        
        List fieldMappings = new ArrayList();
        
        FieldMapping fieldMapping;
        
        //Get instance of FieldMapping Class
        fieldMapping = new FieldMapping();
        
        //To set API name of the field present in Zoho module object that you want to import. 
        fieldMapping.setAPIName("Last_Name");
        
        //To set the column index of the field you want to map to the CRM field.
        fieldMapping.setIndex(0);
        
        fieldMappings.add(fieldMapping);

        fieldMapping = new FieldMapping();
        
        fieldMapping.setAPIName("Email");
        
        fieldMapping.setIndex(1);
        
        fieldMappings.add(fieldMapping);
        
        fieldMapping = new FieldMapping();
        
        fieldMapping.setAPIName("Company");
        
        fieldMapping.setIndex(2);
        
        fieldMappings.add(fieldMapping);
        
        fieldMapping = new FieldMapping();
        
        fieldMapping.setAPIName("Phone");
        
        fieldMapping.setIndex(3);
        
        fieldMappings.add(fieldMapping);
        
        fieldMapping = new FieldMapping();
        
        fieldMapping.setAPIName("Website");
        
        //fieldMapping.setFormat("");
        
        //fieldMapping.setFindBy("");
        
        Map defaultValue = new HashMap();
        
        defaultValue.put("value", "https://www.zohoapis.com");
        
        //To set the default value for an empty column in the uploaded file.
        fieldMapping.setDefaultValue(defaultValue);
        
        fieldMappings.add(fieldMapping);
        
        resourceIns.setFieldMappings(fieldMappings);
        
        resource.add(resourceIns);
        
        requestWrapper.setResource(resource);
       
        //Call createBulkWriteJob method that takes RequestWrapper instance as parameter 
        APIResponse response = bulkWriteOperations.createBulkWriteJob(requestWrapper);
        
        if(response != null)
        {
            //Get the status code from response
            System.out.println("Status Code: " + response.getStatusCode());
            
            //Check if expected response is received
            if(response.isExpected())
            {
                //Get object from response
                ActionResponse actionResponse = response.getObject();
                
                //Check if the request is successful
                if(actionResponse instanceof SuccessResponse)
                {
                    //Get the received SuccessResponse instance
                    SuccessResponse successResponse = (SuccessResponse)actionResponse;
                    
                    //Get the Status
                    System.out.println("Status: " + successResponse.getStatus().getValue());
                    
                    //Get the Code
                    System.out.println("Code: " + successResponse.getCode().getValue());
                    
                    System.out.println("Details: " );
                    
                    //Get the details map
                    for(Map.Entry entry : successResponse.getDetails().entrySet())
                    {
                        //Get each value in the map
                        System.out.println(entry.getKey() + ": " + entry.getValue());
                    }
                    
                    //Get the Message
                    System.out.println("Message: " + successResponse.getMessage().getValue());
                }
                //Check if the request returned an exception
                else if(actionResponse instanceof APIException)
                {
                    //Get the received APIException instance
                    APIException exception = (APIException) actionResponse;
                    
                    //Get the Status
                    System.out.println("Status: " + exception.getStatus().getValue());
                    
                    //Get the Code
                    System.out.println("Code: " + exception.getCode().getValue());
                    
                    System.out.println("Details: " );
                    
                    //Get the details map
                    for(Map.Entry entry : exception.getDetails().entrySet())
                    {
                        //Get each value in the map
                        System.out.println(entry.getKey() + ": " + entry.getValue());
                    }
                    
                    //Get the Message
                    System.out.println("Message: " + exception.getMessage().getValue());
                }
            }
            else
            {//If response is not as expected
                
                //Get model object from response
                Model responseObject = response.getModel();
                
                //Get the response object's class
                Class extends Model> clas = responseObject.getClass();
                
                //Get all declared fields of the response class
                java.lang.reflect.Field[] fields = clas.getDeclaredFields();
                
                for(java.lang.reflect.Field field : fields)
                {
                    //Get each value
                    System.out.println(field.getName() + ":" + field.get(responseObject));
                }
            }
        }
    }
}
 
Get Bulk Write Job Details
              
              
package samples.src.com.zoho.crm.api.bulkwrite;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.zoho.crm.api.HeaderMap;

import com.zoho.crm.api.bulkwrite.SuccessResponse;

import com.zoho.crm.api.bulkwrite.APIException;

import com.zoho.crm.api.bulkwrite.ActionResponse;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations.UploadFileHeader;

import com.zoho.crm.api.util.Choice;

import com.zoho.crm.api.bulkwrite.BulkWriteResponse;

import com.zoho.crm.api.bulkwrite.CallBack;

import com.zoho.crm.api.bulkwrite.FieldMapping;

import com.zoho.crm.api.bulkwrite.FileBodyWrapper;

import com.zoho.crm.api.bulkwrite.RequestWrapper;

import com.zoho.crm.api.bulkwrite.Resource;

import com.zoho.crm.api.bulkwrite.ResponseHandler;

import com.zoho.crm.api.bulkwrite.ResponseWrapper;

import com.zoho.crm.api.bulkwrite.Result;

import com.zoho.crm.api.util.APIResponse;

import com.zoho.crm.api.util.Model;

import com.zoho.crm.api.util.StreamWrapper;

public class BulkWrite
{
    /**
     * Get BulkWriteJob Details
     * This method is used to get the details of a bulk write job performed previously.
     * @param jobId The unique ID of the bulk write job.
     * @throws Exception
     */
    public static void getBulkWriteJobDetails(Long jobId) throws Exception
    {
        //example
        //Long jobId = 34770615615003l;
        
        //Get instance of BulkWriteOperations Class
        BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
        
        //Call getBulkWriteJobDetails method that takes jobId as parameter
        APIResponse response = bulkWriteOperations.getBulkWriteJobDetails(jobId);
        
        if(response != null)
        {
            //Get the status code from response
            System.out.println("Status Code: " + response.getStatusCode());
            
            if(Arrays.asList(204,304).contains(response.getStatusCode()))
            {
                System.out.println(response.getStatusCode() == 204? "No Content" : "Not Modified");
                return;
            }
            
            //Check if expected response is received
            if(response.isExpected())
            {
                //Get object from response
                ResponseWrapper responseWrapper = response.getObject();
                
                if(responseWrapper instanceof BulkWriteResponse)
                {
                    //Get the received BulkWriteResponse instance
                    BulkWriteResponse bulkWriteResponse = (BulkWriteResponse) responseWrapper;
                    
                    //Get the Job Status of each bulkWriteResponse
                    System.out.println("Bulk write Job Status: " + bulkWriteResponse.getStatus());
                    
                    //Get the CharacterEncoding of each bulkWriteResponse
                    System.out.println("Bulk write CharacterEncoding: " + bulkWriteResponse.getCharacterEncoding());
                    
                    List resources = bulkWriteResponse.getResource();
                    
                    if(resources != null)
                    {
                        for(Resource resource : resources)
                        {
                            //Get the Status of each Resource
                            System.out.println("Bulk write Resource Status: " + resource.getStatus().getValue());
                            
                            //Get the Type of each Resource
                            System.out.println("Bulk write Resource Type: " + resource.getType().getValue());
                            
                            //Get the Module of each Resource
                            System.out.println("Bulk write Resource Module: " + resource.getModule());
                            
                            List fieldMappings = resource.getFieldMappings();
                            
                            if(fieldMappings != null)
                            {
                                for(FieldMapping fieldMapping : fieldMappings)
                                {
                                    //Get the APIName of each FieldMapping
                                    System.out.println("Bulk write Resource FieldMapping Module: " + fieldMapping.getAPIName());
                                    
                                    if(fieldMapping.getIndex() != null)
                                    {
                                        //Get the Index of each FieldMapping
                                        System.out.println("Bulk write Resource FieldMapping Index: " + fieldMapping.getIndex().toString());
                                    }
                                    
                                    if(fieldMapping.getFormat() != null)
                                    {
                                        //Get the Format of each FieldMapping
                                        System.out.println("Bulk write Resource FieldMapping Format: " + fieldMapping.getFormat());
                                    }
                                    
                                    if(fieldMapping.getFindBy() != null)
                                    {
                                        //Get the FindBy of each FieldMapping
                                        System.out.println("Bulk write Resource FieldMapping FindBy: " + fieldMapping.getFindBy());
                                    }
                                    
                                    if(fieldMapping.getDefaultValue() != null)
                                    {
                                        //Get all entries from the keyValues map
                                        for(Map.Entryentry : fieldMapping.getDefaultValue().entrySet())
                                        {
                                            //Get each value from the map
                                            System.out.println(entry.getKey() + ": " + entry.getValue());
                                        }
                                    }
                                }
                            }
                            
                            com.zoho.crm.api.bulkwrite.File file = resource.getFile();
                            
                            if(file != null)
                            {
                                //Get the Status of each File
                                System.out.println("Bulk write Resource File Status: " + file.getStatus().getValue());
                                
                                //Get the Name of each File
                                System.out.println("Bulk write Resource File Name: " + file.getName());
                                
                                //Get the AddedCount of each File
                                System.out.println("Bulk write Resource File AddedCount: " + file.getAddedCount().toString());
                                
                                //Get the SkippedCount of each File
                                System.out.println("Bulk write Resource File SkippedCount: " + file.getSkippedCount().toString());
                                
                                //Get the UpdatedCount of each File
                                System.out.println("Bulk write Resource File UpdatedCount: " + file.getUpdatedCount().toString());
                                
                                //Get the TotalCount of each File
                                System.out.println("Bulk write Resource File TotalCount: " + file.getTotalCount().toString());
                            }
                            
                            System.out.println("Bulk write Resource FindBy: " + resource.getFindBy());
                        }
                    }
                    
                    
                    CallBack callback = bulkWriteResponse.getCallback();
                    
                    if(callback != null)
                    {
                        //Get the CallBack Url
                        System.out.println("Bulk write CallBack Url: " + callback.getUrl());
                        
                        //Get the CallBack Method
                        System.out.println("Bulk write CallBack Method: " + callback.getMethod().getValue());
                    }
                    
                    //Get the ID of each BulkWriteResponse
                    System.out.println("Bulk write ID: " + bulkWriteResponse.getId().toString());
                    
                    Result result = bulkWriteResponse.getResult();
                    
                    if(result != null)
                    {
                        //Get the DownloadUrl of the Result
                        System.out.println("Bulk write DownloadUrl: " + result.getDownloadUrl());
                    }
                    //Get the CreatedBy User instance of each BulkWriteResponse
                    com.zoho.crm.api.users.User createdBy = bulkWriteResponse.getCreatedBy();
                    
                    //Check if createdBy is not null
                    if(createdBy != null)
                    {
                        //Get the ID of the CreatedBy User
                        System.out.println("Bulkread Created By User-ID: " + createdBy.getId());
                        
                        //Get the Name of the CreatedBy User
                        System.out.println("Bulkread Created By user-Name: " + createdBy.getName());
                    }
                    
                    //Get the Operation of each BulkWriteResponse
                    System.out.println("Bulk write Operation: " + bulkWriteResponse.getOperation());
                    
                    //Get the CreatedTime of each BulkWriteResponse
                    System.out.println("Bulk write File CreatedTime: " + bulkWriteResponse.getCreatedTime().toString());
                }
                //Check if the request returned an exception
                else if(responseWrapper instanceof APIException)
                {
                    //Get the received APIException instance
                    APIException exception = (APIException) responseWrapper;
                    
                    //Get the Status
                    System.out.println("Status: " + exception.getStatus().getValue());
                    
                    //Get the Code
                    System.out.println("Code: " + exception.getCode().getValue());
                    
                    System.out.println("Details: " );
                    
                    //Get the details map
                    for(Map.Entry entry : exception.getDetails().entrySet())
                    {
                        //Get each value in the map
                        System.out.println(entry.getKey() + ": " + entry.getValue());
                    }
                    
                    //Get the Message
                    System.out.println("Message: " + exception.getMessage().getValue());
                }
            }
            else
            {//If response is not as expected
                
                //Get model object from response
                Model responseObject = response.getModel();
                
                //Get the response object's class
                Class extends Model> clas = responseObject.getClass();
                
                //Get all declared fields of the response class
                java.lang.reflect.Field[] fields = clas.getDeclaredFields();
                
                for(java.lang.reflect.Field field : fields)
                {
                    //Get each value
                    System.out.println(field.getName() + ":" + field.get(responseObject));
                }
            }
        }
    }
}
 
Download Result
              
              
package samples.src.com.zoho.crm.api.bulkwrite;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.zoho.crm.api.HeaderMap;

import com.zoho.crm.api.bulkwrite.SuccessResponse;

import com.zoho.crm.api.bulkwrite.APIException;

import com.zoho.crm.api.bulkwrite.ActionResponse;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations;

import com.zoho.crm.api.bulkwrite.BulkWriteOperations.UploadFileHeader;

import com.zoho.crm.api.util.Choice;

import com.zoho.crm.api.bulkwrite.BulkWriteResponse;

import com.zoho.crm.api.bulkwrite.CallBack;

import com.zoho.crm.api.bulkwrite.FieldMapping;

import com.zoho.crm.api.bulkwrite.FileBodyWrapper;

import com.zoho.crm.api.bulkwrite.RequestWrapper;

import com.zoho.crm.api.bulkwrite.Resource;

import com.zoho.crm.api.bulkwrite.ResponseHandler;

import com.zoho.crm.api.bulkwrite.ResponseWrapper;

import com.zoho.crm.api.bulkwrite.Result;

import com.zoho.crm.api.util.APIResponse;

import com.zoho.crm.api.util.Model;

import com.zoho.crm.api.util.StreamWrapper;

public class BulkWrite
{
    /**
     * Download BulkWrite Result
     * This method is used to download the result of the bulk write job as a CSV file.
     * @param downloadUrl The URL present in the download_url parameter in the response of Get Bulk Write Job Details.
     * @param destinationFolder The absolute path where downloaded file has to be stored.
     * @throws Exception
     */
    public static void downloadBulkWriteResult(String downloadUrl, String destinationFolder) throws Exception
    {
        //example
        //String downloadUrl = "https://download-accl.zoho.com/v2/crm/6735/bulk-write/347706122009/347706122009.zip";
        //String destinationFolder = "/Users/user_name/Documents";
        
        //Get instance of BulkWriteOperations Class
        BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
        
        //Call downloadBulkWriteResult method that takes downloadUrl as parameter
        APIResponse response = bulkWriteOperations.downloadBulkWriteResult(downloadUrl);
        
        if(response != null)
        {
            //Get the status code from response
            System.out.println("Status Code: " + response.getStatusCode());
            
            if(Arrays.asList(204,304).contains(response.getStatusCode()))
            {
                System.out.println(response.getStatusCode() == 204? "No Content" : "Not Modified");
                return;
            }
            
            //Check if expected response is received
            if(response.isExpected())
            {
                //Get object from response
                ResponseHandler responseHandler = response.getObject();
                
                if(responseHandler instanceof FileBodyWrapper)
                {
                    //Get object from response
                    FileBodyWrapper fileBodyWrapper = (FileBodyWrapper)responseHandler;
                    
                    //Get StreamWrapper instance from the returned FileBodyWrapper instance
                    StreamWrapper streamWrapper = fileBodyWrapper.getFile();
                    
                    //Create a file instance with the absolute_file_path
                    File file = new File(destinationFolder + File.separatorChar + streamWrapper.getName());
                    
                    //Get InputStream from the response
                    InputStream is = streamWrapper.getStream();
                    
                    //Create an OutputStream for the destination file
                    OutputStream os = new FileOutputStream(file);
                    
                    byte[] buffer = new byte[1024];
                    
                    int bytesRead;
                    
                    //read the InputStream till the end
                    while((bytesRead = is.read(buffer)) != -1)
                    {
                        //write data to OutputStream
                        os.write(buffer, 0, bytesRead);
                    }
                    
                    //Close the InputStream
                    is.close();
                    
                    //Flush and close the OutputStream
                    os.flush();
                    
                    os.close();
                }
                //Check if the request returned an exception
                else if(responseHandler instanceof APIException)
                {
                    //Get the received APIException instance
                    APIException exception = (APIException) responseHandler;
                    
                    if(exception.getStatus() != null)
                    {
                        //Get the Status
                        System.out.println("Status: " + exception.getStatus().getValue());
                    }
                    
                    if(exception.getCode() != null)
                    {
                        //Get the Code
                        System.out.println("Code: " + exception.getCode().getValue());
                    }
                    
                    if(exception.getDetails() != null)
                    {
                        System.out.println("Details: " );
                        
                        //Get the details map
                        for(Map.Entry entry : exception.getDetails().entrySet())
                        {
                            //Get each value in the map
                            System.out.println(entry.getKey() + ": " + entry.getValue());
                        }
                    }
                    
                    if(exception.getMessage() != null)
                    {
                        //Get the Message
                        System.out.println("Message: " + exception.getMessage().getValue());
                    }
                    
                    if(exception.getXError() != null)
                    {
                        //Get the Message
                        System.out.println("XError: " + exception.getXError().getValue());
                    }
                    
                    if(exception.getXInfo() != null)
                    {
                        //Get the Message
                        System.out.println("XInfo: " + exception.getXInfo().getValue());
                    }
                    
                    if(exception.getHttpStatus() != null)
                    {
                        //Get the Message
                        System.out.println("Message: " + exception.getHttpStatus());
                    }
                }
            }
            else
            {//If response is not as expected
                
                //Get model object from response
                Model responseObject = response.getModel();
                
                //Get the response object's class
                Class extends Model> clas = responseObject.getClass();
                
                //Get all declared fields of the response class
                java.lang.reflect.Field[] fields = clas.getDeclaredFields();
                
                for(java.lang.reflect.Field field : fields)
                {
                    //Get each value
                    System.out.println(field.getName() + ":" + field.get(responseObject));
                }
            }   
        }
    }
}