HttpUrlConnection не показывает исключение, вызванное вызываемой Java-программой - PullRequest
0 голосов
/ 11 мая 2018

У меня есть служба, генерирующая RuntimeException, которая работает нормально с ajax Call. Если я вызываю эту службу, используя HttpUrlConnection из строки исключений другой Java-программы, вместо этого вместо нее отображается «Внутренняя ошибка сервера» с кодом ответа 500.

@Path("poService")
public class PoService {
    @Context
    private UriInfo context;
    @GET
    @Path("getPo/{poNo}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getPo(@PathParam("poNo") int poNo ) throws Exception{
       String urlStr = AppConstant.WEBOLIS_PATH + "po.htm?getPoForSrnConsReport=true&pono="+poNo ;
       URL url = new URL(urlStr);
       HttpURLConnection con = (HttpURLConnection) url.openConnection();
       //con.setRequestProperty("User-Agent", AppConstant.USER_AGENT);
       int responseCode = con.getResponseCode();
       System.out.println("\nSending 'GET' request to URL : " + url);
       System.out.println("Response Code : " + responseCode);
       System.out.println("Response Code : " + con.getResponseMessage());

       BufferedReader in = new BufferedReader(new  InputStreamReader(con.getInputStream()));
       String inputLine;
       StringBuffer response = new StringBuffer();
       while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
       }
       in.close();

       if( responseCode!=200 ){ // if any Error
         //throw new WebolisApiException( responseCode,  response.toString());
       }else{
       }
       return Response.ok( response.toString(),   MediaType.APPLICATION_JSON).build();
    }


}

Это выше метод REST, из которого я вызываю другой Java-контроллер Spring.

 @RequestMapping( value="/po", method=RequestMethod.GET,params=  {"getPoForSrnConsReport"})  //,consumes="application/json" 
        @ResponseBody ModelMap getPoForSrnConsReport(HttpServletResponse response,
                                        @RequestParam(value = "pono" )   Integer poNo) throws Exception {
            ModelMap m = new ModelMap();
            PoService poService = new PoService();
            Po po = poService.getPo(poNo, poService.ALL_ITEMS , Boolean.FALSE);
            m.addAttribute("po",po);
            return m;
       }

в PoService я выбрасываю пользовательское исключение 'PO not Found' Эта строка недоступна в методе REST

1 Ответ

0 голосов
/ 11 мая 2018

Попытка открыть соединение с сервером, который отправляет код ошибки, приведет к исключению, которое вам нужно перехватить. Также вы не можете использовать getInputStream(), когда получаете код ответа об ошибке. Вам нужно использовать getErrorStream():

BufferedReader in = null;
try {
    in = new BufferedReader(new InputStreamReader(con.getInputStream()));
}
catch(IOException e) {
    // handle specific exceptions here
}

int responseCode = -1;
try {
    responseCode = con.getResponseCode();
}
catch(IOException e) {
    // handle specific exceptions here
}

// override the input if you got an error and an error stream is available
if (in==null && responseCode!=200 && con.getErrorStream() != null) {
    in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
...