Getting heap size error while deserializing json respone in apex

ساخت وبلاگ

Vote count: 0

I am using third party service to get data using rest API. But sometimes it retu more than 6 MB data. They don't have API to provide data in chunks. I am already using future method to increase heap size limit to 12 MB.

With below code, I am facing heap size error at the time of de-serialization of data.

@future (callout=true)
public static void CreateProjects(set<ID> setOfProjectID)
{ HttpRequest request; HttpResponse response = new HttpResponse(); Map<Id,Opportunity> mapOfIdAndProjectToCreate = new Map<Id,Opportunity>([SELECT Id, Name, projectId__c, Mercatus_Project__c FROM Opportunity WHERE ID IN :setOfProjectID]); Map<string,Mercatus_Custom_Setting__c> mercatusCustomSettings = Mercatus_Custom_Setting__c.getAll(); Integer customerId; List<Opportunity> lstOppToUpdate = new List<Opportunity>(); if(!mapOfIdAndProjectToCreate.isEmpty()) { for(Id OpportunityID : mapOfIdAndProjectToCreate.keySet()) { Opportunity oppCreated = new Opportunity(); oppCreated = mapOfIdAndProjectToCreate.get(OpportunityID); try { String projectId; String requestBody = createRequestBodyForProject(mapOfIdAndProjectToCreate.get(OpportunityID)); HttpRequest req = CreateHttpRequest(MercatusConstant.CreateProjectURL,requestBody,'POST'); Http http = new Http(); HTTPResponse resp = new HTTPResponse(); if(!Test.IsRunningTest()) { resp = http.send(req); System.debug('heap size after api call '+Limits.getHeapSize()); } if(resp.getStatusCode() == 200) { string responseBody = String.valueOf(resp.getBody()); resp = new HTTPResponse(); Map<String, Object> mapKeyVal = (Map<String, Object>)System.JSON.deserializeUntyped(responseBody); Map<String, Object> data = (Map<String, Object>)mapKeyVal.get('data'); projectId = String.valueOf(data.get('projectId')); oppCreated.projectId__c = projectId; lstOppToUpdate.add(oppCreated); } } Catch(Exception ex) { System.debug('Error In Sync - CreateProjects method Updated - '+ ex.getMessage() + ex.getStackTraceString()); } } } UPDATE lstOppToUpdate;
}
public static HttpRequest CreateHttpRequest(String apiUrl, String requestBody, String method)
{ Map<String,String> mercatusApiConfigs = GetAllConfigSettings(); HttpRequest req = new HttpRequest(); req.setEndpoint(apiUrl); req.setMethod(method); req.setTimeout(120000); req.setHeader('Content-Type', 'application/json'); req.setHeader('Authorization', mercatusApiConfigs.get('Mercatus Access Token')); System.debug('Authorization Token'+ mercatusApiConfigs.get('Mercatus Access Token')); if(String.isNotEmpty(requestBody)) { req.setBody(requestBody); } retu req;
}
asked 2 mins ago

back soft...
ما را در سایت back soft دنبال می کنید

برچسب : نویسنده : استخدام کار backsoft بازدید : 262 تاريخ : پنجشنبه 27 اسفند 1394 ساعت: 1:20