在Java程序中调用Salesforce REST API

大城市里の小女人 提交于 2019-12-07 06:36:45

Salesforce 提供多种不同的REST API接口以支持客户应用的开发,本文介绍如何在Java程序中使用Apache HttpComponents调用Salesforce REST API。


第一步: 登录Salesforce


首先设置包括Salesforce登录主机和 登录接口URL, 并初始化一个Post请求。

	HttpHost target = new HttpHost("login.salesforce.com", 443, "https");

	String loginURL= "/services/Soap/u/29.0";

	HttpPost loginPost = new HttpPost(loginURL);


然后设置Post头信息

	loginPost.setHeader("content-type", "text/xml"); 
	loginPost.setHeader("charset", "UTF-8"); 
	loginPost.setHeader("SOAPAction", "login");  


其后发送一个Post登录请求并接受其响应。

	String loginRequestXMLTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" + 
					"<env:Envelope\n" +
					"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" + 
					"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + 
					"xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + 
					"<env:Body>\n" + 
					"   <n1:login xmlns:n1=\"urn:partner.soap.sforce.com\">\n" +
					"       <n1:username>%s</n1:username>\n" + 
					"       <n1:password>%s%s</n1:password>\n" + 
					"</n1:login>\n" + 
					"</env:Body>\n" + 
					"</env:Envelope>\n";

	String loginRequestXML = String.format(loginRequestXMLTemplate, _username, _password, _securityToken);

	System.out.println("Request...");
	System.out.println(loginRequestXML);

	StringEntity input = new StringEntity(loginRequestXML);
	loginPost.setEntity(input);

	CloseableHttpResponse loginResponse = httpClient.execute(target, loginPost);

	HttpEntity entity = loginResponse.getEntity();

	String response = EntityUtils.toString(entity);

	EntityUtils.consume(loginResponse.getEntity());
	loginResponse.close();


获取登录响应之后将其转换为XML结构,并读取sessionId和serverUrl

	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	DocumentBuilder builder = factory.newDocumentBuilder();
	Document document = builder.parse(new InputSource(new StringReader(response)));

	Node node = document.getElementsByTagName("sessionId").item(0);
	sessionId = node.getFirstChild().getTextContent();

	node = document.getElementsByTagName("serverUrl").item(0);
	String serverUrlString = node.getFirstChild().getTextContent();
	serverURL = new URL (serverUrlString);

第二步: 调用List Report REST API


首先设置REST AP接口主机和 List Report REST AP接口URL, 并初始化一个Get请求。
	target = new HttpHost(serverURL.getHost(), 443, "https");
	String listReportURL= "/services/data/v29.0/analytics/reports/";
	HttpGet reportListGet = new HttpGet(listReportURL);


然后设置Get头信息

	reportListGet.setHeader("Authorization", "Bearer " + sessionId);


其后发送Get请求并接受其响应

	CloseableHttpResponse reportListResponse = httpClient.execute(target, reportListGet); 
	entity = reportListResponse.getEntity(); 
	response = EntityUtils.toString(entity);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!