2016-05-13 47 views
0

我对JBoss的它调用另一个休息web服务托管一个Java休息API:调用其他API

@GET 
@Path("/testDeployment") 
@Produces(MediaType.TEXT_PLAIN) 
public String testDeployment() { 
     URL url = new URL(restURL); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Authorization", "Bearer "+sessionId); 

     System.out.println("sessionId>>>> "+sessionId); 
     System.out.println("restURL>>>> "+restURL); 
     BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 

     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
      response += output; 
     } 

     conn.disconnect(); 
} 

但我得到错误

服务器返回的HTTP响应代码:401网址:https://cs5.salesforce.com/services/apexrest/event/search?type=init

13:16:08738 ERROR [stderr的](默认任务-26)产生java.io.IOException:服务器返回的HTTP响应代码:401为URL:https://cs5.salesforce.com/services/apexrest/event/search?type=init

13:16:08747 ERROR [stderr的](默认任务-26)在sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840)

+0

我使用相同的代码来调用使用java类的外部web服务,它运行良好 –

回答

0

我也加入了认证头:

conn.setRequestProperty( “授权”, “承载” +的sessionId);

但它看起来像头需要格式化,我更新了线为:

conn.setRequestProperty( “授权”,的String.format( “承载%S” 的sessionId));

和它的工作,我想在网上它需要格式化和Java应用程序上面的代码工作得很好

2

以下是自定义的提取物的Http Status Code Definitions,这可能会帮助您解决问题:

401未授权

请求需要用户验证。响应必须包含一个WWW-Authenticate头域(14.47节),其中包含一个适用于所请求资源的挑战。客户端可以用适当的授权标题字段重复请求(14.8节)。如果请求已包含授权凭证,则401响应表明授权已被拒绝。如果401响应包含与先前响应相同的挑战,并且用户代理至少已经尝试过一次认证,则用户应该被呈现给响应中给出的实体,因为该实体可能包含相关的诊断信息。 HTTP访问身份验证页中的 “HTTP验证:基本和摘要访问认证”

0

什么都URL你打的授权,所以必须使用标头的授权,那么你将得到作为

1输出,如果你正在使用的球衣然后如下使用语法: -

try{ 
Client client = Client.create(); 
WebResource webResource = client.resource("http://localhost:8085/getStepsCount"); 
webResource.setProperty("Content-Type", "application/json;charset=UTF-8"); 
String authorization = "PASTE_KEY_HERE"; 
webResource.setProperty("Authorization", authorization); 
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); 
queryParams.add("json", js); 
String jsonString = webResource.get(String.class);}catch (Exception e){System.out.println (e.getMessage());} 

,如果你使用的是弹簧安置控制器然后使用这一个.......

@RequestMapping(value = "/getStepsUsingPostRequest", method = RequestMethod.POST) 
public ResponseEntity<Object> getDiscountUsingPost(
     @RequestBody MemberStepsDto memberStepsDto) { 
    try{ 
    final String uri = "http://localhost:8085/getStepsCount"; 
    RestTemplate restTemplate = new RestTemplate(); 
    System.out.println("starting......."); 
    String json = "{\"memberId\": \""+memberStepsDto.getMemberId()+"\",\"startDate\": \""+memberStepsDto.getStartDate()+"\",\"endDate\": \""+memberStepsDto.getEndDate()+"\"}"; 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<String> entity = new HttpEntity<String>(json,headers); 

    String answer = restTemplate.postForObject(uri, entity, String.class); 
    System.out.println("String : " + answer); 
    } 
    catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
    return new ResponseEntity<Object>(new String("Fetched Successfully"),HttpStatus.OK); 
}