【问题标题】:Force.com Apex code counter part or equivalent code to JavaForce.com Apex 代码对应部分或 Java 的等效代码
【发布时间】:2016-07-07 03:23:50
【问题描述】:

我不确定我是否走在正确的道路上。因为我没有通过 HTTP 请求获得任何数据。我需要将此 java 代码转换为 force.com apex 才能使用 WTS Web 服务。

public static HttpEntity getRequestEntity()
{
  JSONArray jsonArr = new JSONArray();
  HttpEntity entity = null;
  JSONObject jsonElement = new JSONObject();
  JSONObject jsonObj = new JSONObject();
  JSONObject jsonObj1 = new JSONObject();
  jsonElement.put("tenant",jsonObj);
  jsonObj.put("companyKey",companyName);

  String json = jsonElement.toJSONString();
  try {
    entity = new StringEntity(json);
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  }
  return entity;
}

private static void GetEnabledUsers(String responseContent) throws ParseException, ClientProtocolException, IOException {
String url  = "<endpoint>/services/UserService1.svc/GetEnabledUsers";

// Create an http client to perform the http communication
CloseableHttpClient httpClient = HttpClients.createDefault();

// Http request to specific web service. Request will be given to client
HttpPost request =  new HttpPost(url);

// Create credentials for the authentication
CredentialsProvider provider =  new BasicCredentialsProvider();

UsernamePasswordCredentials credential = new UsernamePasswordCredentials(companyName+'\\'+userName, password);
provider.setCredentials(AuthScope.ANY, credential);
HttpClientContext localContext = HttpClientContext.create();
localContext.setCredentialsProvider(provider);

// Make the actual http request
HttpPost httpRequest =  new HttpPost(url);

HttpEntity requestEntity = getRequestEntity();
if(requestEntity != null) {
httpRequest.setHeader("Content-type", "application/json");
httpRequest.setEntity(requestEntity);
}

CloseableHttpResponse response = httpClient.execute(httpRequest, localContext);
HttpEntity entity = response.getEntity();
String responseContent1 = EntityUtils.toString(entity);
System.out.println(responseContent1);
}

这是我目前所拥有的:

String userName= '<userName>';
String password= '<password>';
String companeyKey = '<companeyKey>';

JSONGenerator jsonGenerator = JSON.createGenerator(true);
jsonGenerator.writeStartObject();
  jsonGenerator.writeFieldName('tenant');
    jsonGenerator.writeStartObject();
      jsonGenerator.writeStringField('companeyKey', '<companeyKey>');
    jsonGenerator.writeEndObject();
jsonGenerator.writeEndObject();

requestBody = jsonGenerator.getAsString();

Blob headerValue = Blob.valueOf(userName + ':' + password);
HttpRequest requestEntity = new HttpRequest();
String authHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue);

requestEntity.setMethod('POST');
requestEntity.setEndPoint('<endpoint>/services/UserService1.svc/GetEnabledUsers');
requestEntity.setHeader('Content-Type', 'application/json');
requestEntity.setHeader('Authorization', authHeader);
requestEntity.setBody(requestBody); 

Http http = new Http();
HTTPResponse responseEntity = http.send(requestEntity);

system.debug(responseEntity);

【问题讨论】:

  • 看来你走在了正确的轨道上。调试日志中有什么?
  • @superfell 我收到错误 404
  • 确切地说,System.HttpResponse[Status=Not Found, StatusCode=404]
  • 你有正确的 URL, 是否正确公开解析
  • @superfell 是的,我很确定端点是正确的,因为我是从复制服务 GUI 获取的,我还在他们的 GUI 中尝试了这个 Web 服务,它返回了一些我应该得到的数据以及来自我的 HTTP 请求。顺便说一句,我仔细检查了端点并尝试了一些东西,现在我得到“System.HttpResponse[Status=Unauthorized, StatusCode=401]”

标签: java salesforce apex-code apex force.com


【解决方案1】:

区别似乎在于如何为 auth 参数构造用户名,更改

Blob headerValue = Blob.valueOf(userName + ':' + password);

Blob headerValue = Blob.valueOf(companyKey + '\\' + userName + ':' + password);

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多