zoukankan      html  css  js  c++  java
  • 73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口

    /**
     *使用salesforce通过REST方式作为webservice,需要以下几点
     *1、类和方法需要global,方法需要静态
     *2、类需要通过RestResource(UrlMapping='/page/*')注解声明
     *3、@HttpGet和@HttpDelete不能有形参,可以通过URL?param或者URL/param方式传过来参数
    **/
    @RestResource(UrlMapping='/Merchandise/*')
    global class MerchandiseRESTController {
        global static final Integer PAGE_SIZE = 20;
        public static string merchandiseName {get;set;}
        public static string merchandiseId {get;set;}
        
        @HttpGet
        global static List<Merchandise__c> getMerchandiseByName(){
            RestRequest request = RestContext.request;
            //grab the merchandise Id from the end of the URL
            String currentPage = request.params.get('currentPage')!=null?request.params.get('currentPage'):'0';
            Integer offsetNumber = Integer.valueOf(currentPage) * PAGE_SIZE;
            merchandiseName = request.params.get('name');
            String fetchSql;
            if(merchandiseName!=null){
                fetchSql = 'SELECT Quantity__c,Price__c,Name from Merchandise__c where Name=:merchandiseName';
            }else{
                fetchSql = 'SELECT Quantity__c,Price__c,Name from Merchandise__c limit:PAGE_SIZE offset:offsetNumber ';
            }
            List<Merchandise__c> merchandiseList = Database.query(fetchSql);
            return merchandiseList;
        }
        
        @HttpPost
        global static Id insertMerchandise(String name,String price,String quantity){
            System.debug('----------merchandise name---------'+name);
            Merchandise__c merchandise = new Merchandise__c();
            if(price!=null && price.isNumeric()){
                merchandise.Price__c = Decimal.valueOf(price);
            }
            if(quantity!=null && quantity.isNumeric()){
                merchandise.Quantity__c =Decimal.valueOf(quantity);
            }
            merchandise.Name = name;
            insert merchandise;
            return merchandise.Id;
        }
        
        @HttpDelete
        global static void deleteMerchandise(){
            RestRequest request = RestContext.request;
            merchandiseName = request.requestURI.substring(request.requestURI.lastIndexOf('/')+1);
            String querySql = 'select Id from Merchandise__c where Name =:merchandiseName';
            List<Merchandise__c> merchandiseList = Database.query(querySql);
            if(merchandiseList!=null){
                delete merchandiseList;
            }
        }
        
        @HttpPut
        global static Id upsertMerchandise(String name,String price,String quantity){
            Merchandise__c merchandise = new Merchandise__c();
            merchandise.Name = name;
             if(price!=null && price.isNumeric()){
                merchandise.Price__c = Decimal.valueOf(price);
            }
            if(quantity!=null && quantity.isNumeric()){
                merchandise.Quantity__c =Decimal.valueOf(quantity);
            }
            upsert merchandise;
            return merchandise.Id;
            
        }
        
        /**@HttpPatch
        global static Id updateMerchandise(){
            RestRequest request = RestContext.request;
            merchandiseName = request.requestURI.substring(
                   request.requestURI.lastIndexOf('/')+1);
            String querySql = 'select Id from Merchandise__c where Name =:merchandiseName';
            List<Merchandise__c> merchandiseList = Database.query(querySql);
            // Deserialize the JSON string into name-value pairs
            Map<String, Object> params = (Map<String, Object>)JSON.deserializeUntyped(request.requestbody.tostring());
            // Iterate through each parameter field and value
            
        }**/
        
        
        
        
    }
    View Code

    上边是salesforce中的接口实现,通过restful方式来处理http请求

    下边则是JAVA中调用上边salesforce中已经处理好的restful的http接口

    package com.test.salesforce.restful;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.http.Header;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.ParseException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpDelete;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.message.BasicHeader;
    import org.apache.http.params.DefaultedHttpParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.json.JSONTokener;
    
    public class TestSalesforceRestful {
        static final String USERNAME = "weizhen.zhao@pactera.com";
        static final String PASSWORD = "zwz87865918vYoQKmkHZ3CHvlWxktmXybWi";
        static final String LOGINURL = "https://login.salesforce.com";
        static final String GRANTSERVIVE = "/services/oauth2/token?grant_type=password";
        static final String CLIENTID = "3MVG9YDQS5WtC11rl9X0l.9UJjmHTftDEUlhQz8SsxqKUk5iRxSgSp2aeKxM1NHJBkzp.VJqIT56XXPnLk5oi";
        static final String CLIENTSECRET = "9102086465628528777";
        private static String REST_ENDPOINT = "/services/apexrest";
        private static String baseUri;
        private static Header oauthHeader;
        private static Header prettyPrintHeader = new BasicHeader("X-PrettyPrint", "1");
    
        public static void main(String[] args) {
            // 测试restful 创建一个merchandise
            // createMerchandise("testSalesforceRestfulApi", "2000", "20001");
    
            // 测试restful 查询一个List结果集
            /*List<Merchandise> list = getMerchandiseByName("testSalesforceRestfulApi");
            for (Merchandise item : list) {
                System.out.print(item.getName() + "	");
                System.out.print(item.getPrice() + "	");
                System.out.println(item.getQuantity() + "	");
            }*/
            
            //删除一个Merchandise
            //deleteMerchandise("testSalesforceRestfulApi");
        }
    
        public static void deleteMerchandise(String name) {
            if (isAccessable()) {
                HttpClient client = HttpClientBuilder.create().build();
                String url = baseUri + "/deleteMerchandise/" + name;
                HttpDelete delete = new HttpDelete(url);
                delete.addHeader(oauthHeader);
                delete.addHeader(prettyPrintHeader);
                HttpResponse response = null;
                try {
                    response = client.execute(delete);
                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == HttpStatus.SC_OK) {
                        System.out.println("Deleted the goods successfully.");
                    } else {
                        System.out.println("goods delete NOT successful. Status code is " + statusCode);
                    }
                    delete.releaseConnection();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * distinguish whether can access sfdc or not
         * 
         * @return
         */
        private static boolean isAccessable() {
            HttpClient httpClient = HttpClientBuilder.create().build();
            // Assemble the login request URL
            String loginURL = LOGINURL + GRANTSERVIVE + "&client_id=" + CLIENTID + "&client_secret=" + CLIENTSECRET
                    + "&username=" + USERNAME + "&password=" + PASSWORD;
    
            // Login requests must be POSTs
            HttpPost httpPost = new HttpPost(loginURL);
            HttpResponse response = null;
            try {
                response = httpClient.execute(httpPost);
            } catch (ClientProtocolException cpException) {
                cpException.printStackTrace();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
            // verify response is HTTP OK
            final int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                System.out.println("Error authenticating to Force.com:" + statusCode);
                return false;
            }
            String getResult = null;
            try {
                getResult = EntityUtils.toString(response.getEntity());
            } catch (ParseException | IOException e) {
                e.printStackTrace();
            }
            JSONObject jsonObject = null;
            String loginAccessToken = null;
            String loginInstanceUri = null;
            try {
                jsonObject = (JSONObject) new JSONTokener(getResult).nextValue();
                loginAccessToken = jsonObject.getString("access_token");
                loginInstanceUri = jsonObject.getString("instance_url");
            } catch (JSONException jsonException) {
                jsonException.printStackTrace();
            }
            baseUri = loginInstanceUri + REST_ENDPOINT + "/Merchandise";
            oauthHeader = new BasicHeader("Authorization", "Bearer " + loginAccessToken);
            System.out.println("oauthHeader1:" + oauthHeader);
            System.out.println(response.getStatusLine());
            System.out.println("Successful login");
            System.out.println("instance URL:" + loginInstanceUri);
            System.out.println("access token/sessing ID:" + loginAccessToken);
            System.out.println("baseUri:" + baseUri);
            return true;
        }
    
        /**
         * httpGet請求RESTful
         * 
         * @param name
         * @return
         */
        public static List<Merchandise> getMerchandiseByName(String name) {
            if (isAccessable()) {
                String uri = baseUri + "/getMerchandiseByName?name=" + name;
                System.out.println(uri);
                HttpClient client = HttpClientBuilder.create().build();
                HttpGet get = new HttpGet(uri);
                get.setHeader(oauthHeader);
                get.setHeader(prettyPrintHeader);
    
                try {
                    HttpResponse response = client.execute(get);
                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == HttpStatus.SC_OK) {
                        List<Merchandise> merchandiseList = new ArrayList<Merchandise>();
                        String response_string = EntityUtils.toString(response.getEntity());
                        System.out.println("response_string:" + response_string);
                        JSONArray jsonArray = new JSONArray(response_string);
                        JSONObject jsonObject = null;
                        for (int i = 0; i < jsonArray.length(); i++) {
                            jsonObject = jsonArray.getJSONObject(i);
                            Merchandise item = new Merchandise();
                            if (jsonObject != null) {
                                item.setName(jsonObject.getString("Name"));
                                item.setPrice(jsonObject.getDouble("Price__c"));
                                item.setQuantity(jsonObject.getInt("Quantity__c"));
                            }
                            merchandiseList.add(item);
                        }
                        get.releaseConnection();
                        return merchandiseList;
                    } else {
                        get.releaseConnection();
                        return null;
                    }
                } catch (JSONException e) {
                    System.out.println("Issue creating JSON or processing results");
                    e.printStackTrace();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                } catch (NullPointerException npe) {
                    npe.printStackTrace();
                }
            }
            return null;
    
        }
    
        /**
         * httpPost請求 call restful api to create a merchandise return merchandise Id
         * 
         * @param name
         * @param price
         * @param quantity
         */
        public static void createMerchandise(String name, String price, String quantity) {
            try {
                if (isAccessable()) {
                    String uri = baseUri + "/insertMerchandise";
                    System.out.println(uri);
                    JSONObject merchandise = new JSONObject();
                    merchandise.put("name", name);
                    merchandise.put("price", price);
                    merchandise.put("quantity", quantity);
                    System.out.println("JSON for merchandises record to be insert:
    " + merchandise.toString());
                    // Construct the objects needed for the request
                    HttpClient httpClient = HttpClientBuilder.create().build();
                    ;
                    System.out.println("oauthHeader" + oauthHeader);
                    HttpPost httpPost = new HttpPost(uri);
                    httpPost.addHeader(oauthHeader);
                    httpPost.addHeader(prettyPrintHeader);
                    httpPost.addHeader("encoding", "UTF-8");
                    // The message we are going to post
                    StringEntity body = new StringEntity(merchandise.toString(1));
                    System.out.println(merchandise.toString(1));
                    body.setContentType("application/json");
                    httpPost.setEntity(body);
    
                    // Make the request
                    HttpResponse response = httpClient.execute(httpPost);
                    System.out.println("response: " + response.toString());
                    // Process the results
                    int statusCode = response.getStatusLine().getStatusCode();
                    System.out.println("status code: " + statusCode);
                    if (statusCode == HttpStatus.SC_OK) {
                        String response_String = EntityUtils.toString(response.getEntity());
                        if (response_String != null) {
                            System.out.println("New Merchandise id from response:" + response_String);
                        }
                    } else {
                        System.out.println("Insertion unsuccessful.Status code returned is" + statusCode);
                    }
                    httpPost.releaseConnection();
                }
            } catch (JSONException e) {
                System.out.println("Issue creating JSON or processing results");
                e.printStackTrace();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } catch (NullPointerException npe) {
                npe.printStackTrace();
            }
    
        }
    
    }
    View Code

    下边是在JAVA的main方法中的测试结果

    public static void main(String[] args) {
            // 测试restful 创建一个merchandise
            // createMerchandise("testSalesforceRestfulApi", "2000", "20001");
    
            // 测试restful 查询一个List结果集
            /*List<Merchandise> list = getMerchandiseByName("testSalesforceRestfulApi");
            for (Merchandise item : list) {
                System.out.print(item.getName() + "	");
                System.out.print(item.getPrice() + "	");
                System.out.println(item.getQuantity() + "	");
            }*/
            
            //删除一个Merchandise
            //deleteMerchandise("testSalesforceRestfulApi");
        }

    1、创建

    oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    HTTP/1.1 200 OK
    Successful login
    instance URL:https://ap4.salesforce.com
    access token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    baseUri:https://ap4.salesforce.com/services/apexrest/Merchandise
    https://ap4.salesforce.com/services/apexrest/Merchandise/insertMerchandise
    JSON for merchandises record to be insert:
    {"quantity":"20001","price":"2000","name":"testSalesforceRestfulApi"}
    oauthHeaderAuthorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    {
     "quantity": "20001",
     "price": "2000",
     "name": "testSalesforceRestfulApi"
    }
    response: HttpResponseProxy{HTTP/1.1 200 OK [Date: Sat, 18 Mar 2017 10:46:28 GMT, X-Content-Type-Options: nosniff, X-XSS-Protection: 1; mode=block, Content-Security-Policy: reflected-xss block;report-uri /_/ContentDomainCSPNoAuth?type=xss, Content-Security-Policy: referrer origin-when-cross-origin, Set-Cookie: BrowserId=zDGh-qaEQOK5dJ9CGjk37A;Path=/;Domain=.salesforce.com;Expires=Wed, 17-May-2017 10:46:28 GMT, Expires: Thu, 01 Jan 1970 00:00:00 GMT, Content-Type: application/json;charset=UTF-8, Vary: Accept-Encoding, Transfer-Encoding: chunked] org.apache.http.client.entity.DecompressingEntity@77e9807f}
    status code: 200
    New Merchandise id from response:"a026F00000w1byFQAQ"
    View Code

    2、查询一个List结果

    oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    HTTP/1.1 200 OK
    Successful login
    instance URL:https://ap4.salesforce.com
    access token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    baseUri:https://ap4.salesforce.com/services/apexrest/Merchandise
    https://ap4.salesforce.com/services/apexrest/Merchandise/getMerchandiseByName?name=testSalesforceRestfulApi
    response_string:[ {
      "attributes" : {
        "type" : "Merchandise__c",
        "url" : "/services/data/v39.0/sobjects/Merchandise__c/a026F00000w1byFQAQ"
      },
      "Quantity__c" : 20001,
      "Price__c" : 2000.00,
      "Name" : "testSalesforceRestfulApi",
      "Id" : "a026F00000w1byFQAQ"
    } ]
    testSalesforceRestfulApi    2000.0    20001    
    View Code

    3、删除一个Merchandise通过HttpDelete

    oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    HTTP/1.1 200 OK
    Successful login
    instance URL:https://ap4.salesforce.com
    access token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.
    baseUri:https://ap4.salesforce.com/services/apexrest/Merchandise
    Deleted the goods successfully.
    View Code

     该JAVA项目中需要的jar包

  • 相关阅读:
    import cv2出现“ImportError: DLL load failed: 找不到指定的模块”
    Ubuntu 18.04 安装MySQL
    在Pycharm中自动添加时间日期作者等信息
    Ubuntu18.04安装Python虚拟环境
    Windows10远程报错:由于CredSSP加密Oracle修正
    Ubuntu 18.04LTS 更新镜像配置
    jetbrains的JetBrains PyCharm 2018.3.1破解激活到2100年(最新亲测可用)
    解决爬虫中遇到的js加密问题之有道登录js逆向解析
    利用远程服务器在docker容器搭建pyspider运行时出错的问题
    linux服务器安装pyspide关于rgnutls.h: No such file or directory 的解决方案
  • 原文地址:https://www.cnblogs.com/weizhen/p/6575522.html
Copyright © 2011-2022 走看看