public with sharing class CalloutHandler {

@future (callout=true)
public static void createAccount(String id)
    Http http = new Http();
    HttpRequest req = new HttpRequest();
    String endPoint='https://portal/webapi/createorg.jsp';
    String accountinfo = getAccountDetail(id);
        HttpResponse response = http.send(req);  
        if(response.getStatusCode() !=200)
         System.debug('Status code return was not expected: '+ response.getStatusCode() +' '+response.getStatus());
          String constitid =response.getBody();
          //some stuff
  }catch(System.CalloutException e){


  • 1
    Take a look at these search results from this site. You must do the callout before you do any DML in the transaction.
    – Keith C
    Commented Jul 11, 2017 at 7:44
  • I have a web service call out that is working fine. The web service callout is triggered in an After Trigger, which call @future method in the above class , which then make the callout. In test class , In my testmethod for this, I start by setting up some test data(list of accouunt: accts) and inside Test.startTest and Test.stopTest , i mock the response first and then did dml operation : "insert accts". Commented Jul 11, 2017 at 7:45
  • I knew that inserts performed in test methods are not committed, thats why i am getting this error. but according to requirment, the callout is made from DML.( insert acc-> trigger -> call @future method -> call callout. Commented Jul 11, 2017 at 7:51
  • Add this extra detail to your question: are you saying you only get the error in your test case? If so include that in the question.
    – Keith C
    Commented Jul 11, 2017 at 8:26
  • While tesing in sandbox , i am not getting any error(Test method pass), but while deploying into production, its fail and gave me this error Commented Jul 11, 2017 at 9:05


You must log in to answer this question.

Browse other questions tagged .