Search code examples
javascriptjavajqueryajaxtalend

Same URL request returns 200 on Postman, Talend etc but returns 404 when called from web app using AJAX


I have made requests to a Java web service using AJAX:

<script>
    function loadcaptcha() {
    $("#spmsg").html("");
    $("#txtCaptcha").val("");
    var inputValObj = {};
    inputValObj.flag = "LD";
    inputValObj.captcha = "NA";
    inputValObj.hash = "NA";
    inputValObj.servicename = "Rural";
    var inputVal = JSON.stringify(inputValObj);
     $("#target").show(); 
    $.ajax({
        url : local_url+'/captchavalue?jsoncallback=?',
        data:encodeURIComponent(inputVal.toString()),
        type : 'POST',
        dataType : 'jsonp',
        contentType : "application/json",
        success : function(data) {
            setTimeout(myFunction, 100);
             if (data.statusCode == "INPUT_ERR") {
                 alert("Data Error");
            }else if(data.statusCode == "CAPTCHA_ERR"){
                 alert("Authenticate Problem");
            }
             else{
                var captcha=data.captcha;
                if(getparameter==="8"){
                    $("#captchaImg1").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval1").val(data.hash);
                }else if(getparameter==="3"){
                    $("#captchaImg_fmb").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval_fmb").val(data.hash);
                }
                else if(getparameter==="4"){
                    $("#captchaImg_rev").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval_rev").val(data.hash);
                }
                else if(getparameter==="7"){
                    $("#captchaImg_is").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval_is").val(data.hash);
                }
                else if(getparameter==="11"){
                    $("#captchaImg_ec").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval_ec").val(data.hash);
                }
                else if(getparameter==="17"){
                    $("#captchaImg_crt").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval_crt").val(data.hash);
                }
                else{
                    $("#captchaImg").attr("src","data:image/gif;base64," + captcha);
                    $("#hashval").val(data.hash);
                }
            }
        },
        error : function(jqXHR, exception) {
            alert("Error Occured not connected");
        }

    });
}
</script>

Calls to the Java service works well until a few extra lines of Java code is added:

    @POST
    @Path("/captchavalue")
    public Response captchavalue(
        @QueryParam("jsoncallback") String jsonvalue, @Context HttpServletResponse serverResponse,
        @Context HttpHeaders headers, @Context HttpServletRequest request,
        String inputVal) throws ParseException,
        URISyntaxException, SQLException,IOException {
        String inputVal1 = URLDecoder.decode(inputVal, "UTF-8");
        System.out.println("inputVal ---->"+inputVal1);
        serverResponse.addHeader("Access-Control-Allow-Credentials", "true");
        serverResponse.addHeader("Allow-Control-Allow-Methods","POST");
        serverResponse.addHeader("Access-Control-Allow-Headers",
                    "X-Requested-With,Content-Type,Origin");
        serverResponse.addHeader("Access-Control-Max-Age", "3600");
        serverResponse.addHeader("X-Frame-Options", "DENY");
        serverResponse.addHeader("Content-Security-Policy", "frame-ancestors 'none'");          
        serverResponse.addHeader("Content-Type", "application/json");
        serverResponse.setHeader("cache-Control","no-cache,no-store,must-revalidate"); 
        serverResponse.setHeader("Pragma","no-cache");    
        serverResponse.setHeader("Expires","0");
        
            String responsee = "";
            String resp = "";
            boolean respflag=getUrlPath(serverResponse, request);
            JSONObject obj1 = new JSONObject();     
            if(respflag){
                String refererURI = new URI(request.getHeader("referer")).getPath();
                serverResponse.addHeader("Access-Control-Allow-Origin", refererURI);
                    
                    JSONParser parser = new JSONParser();
                    Object obj = parser.parse(inputVal1);
                                
                    JSONObject json = (JSONObject) obj;
                    String flag = json.get("flag").toString();
                    String captchaval=json.get("captcha").toString(); //changed on 13/7/2022 .toUpperCase()
                    System.out.println("capitalized ---->"+captchaval);
                    String hashval = json.get("hash").toString();
                    String servicename = json.get("servicename").toString(); 
                    System.out.println("flag ---->"+flag);

                    ResourceBundle rb = ResourceBundle.getBundle("jdbc");
                    String fmb_url=rb.getString("fmburl");
                    
                         List<String> hashvalue = memcached_data(flag,captchaval,hashval,request);                                               
                         if(flag.equals("SB")){
                             System.out.println("hashval -new--->"+hashvalue.get(0));
                             System.out.println("servicename--->"+servicename);
                             if( hashvalue.get(0).equals("VAL")){
                                 String outvalue="";        
                                 if(servicename.equals("Rural")) {
                                     outvalue=getAllServiceRural(inputVal);
                                 }else if(servicename.equals("Urban")) {
                                     String code =json.get("code").toString(); 
                                     if(code.equals("sursearch") || code.equals("oldsursearch") || code.equals("Urban_Applstatus")){
                                         outvalue=getUrbanService(inputVal);   
                                     }
                                 }
                                 else if(servicename.equals("Fmb")) {
                                     
                                        JSONParser dist_parse = new JSONParser();
                                        Object inp_obj = dist_parse.parse(inputVal);
                                        JSONObject json1 = (JSONObject) inp_obj;
                                
                                        String req = (String) json1.get("req");

                                        String district = (String) json1.get("districtCode");
                                        String taluk = (String) json1.get("talukCode");
                                        String village = (String) json1.get("villageCode");

                                        if (req.equals("survey")) {
                                            String survey_no = (String) json1.get("surveyno");
                                            outvalue = fmb_url+"/pdf/"+ district+taluk+village+survey_no;
                                            System.out.println("Outvalue1");
                                            String remoteadd = request.getRemoteHost();
                                            String s=createtoken(outvalue,survey_no,remoteadd);
                                            outvalue =outvalue+"&token="+s; 
                                            
                                        }
                                        if (req.equals("subdiv")) {
                                            String survey_no = (String) json1.get("surveyno");
                                            String subdiv_no = (String) json1.get("subdivno");
                                            outvalue = fmb_url+"/pdf/"+ district+taluk+village+survey_no+"/"+subdiv_no;
                                            System.out.println("Outvalue2");
                                            String plotNo = survey_no + "/" + subdiv_no;
                                            String remoteadd = request.getRemoteHost();
                                            String s=createtoken(outvalue,plotNo,remoteadd);
                                            outvalue =outvalue+"&token="+s;
                                        }
                                 }
                                 else if(servicename.equals("Revenue")) {
                                     JSONParser dist_parse = new JSONParser();
                                        Object inp_obj = dist_parse.parse(inputVal);
                                        JSONObject json1 = (JSONObject) inp_obj;

                                        String district = (String) json1.get("districtCode");
                                        String taluk = (String) json1.get("talukCode");
                                        String village = (String) json1.get("villageCode");
                                        String surveyNo = (String) json1.get("surveyNo");
                                        String subdivision = (String) json1.get("subdivision");

                                        String survey_no = (String) json1.get("surveyno");
                                        outvalue = get_revenue_details(district,taluk,village,surveyNo,subdivision);
                                 }else if(servicename.equals("Court")) {
                                     outvalue=getCourtService(inputVal); 
                                 }
                                 else if(servicename.equals("eadangal")) {
                                     outvalue=geteadangalService(inputVal); 
                                 }else if(servicename.equals("EC")) {
                                     outvalue=IgrsEcservice(inputVal); 
                                 }else if(servicename.equals("town_prop")) {
                                     outvalue=tndtp_get_assessment(inputVal); 
                                 }
                                 else if(servicename.equals("gcc_prop")) {
                                     outvalue=get_gcc(inputVal); 
                                 }
                                 else if(servicename.equals("ulb_prop")) {
                                     outvalue=get_dcb(inputVal); 
                                 }
                                 else if(servicename.equals("metrowater")) {
                                     outvalue=get_chennaimetrowater(inputVal); 
                                 }
                                 else if(servicename.equals("cma_water")) {
                                     outvalue=get_cmawater(inputVal); 
                                 }
                                 else if(servicename.equals("water_dtp")) {
                                     outvalue=get_dtpwatertax(inputVal); 
                                 }
                                 else if(servicename.equals("eb")) {
                                     JSONParser dist_parse = new JSONParser();
                                     Object inp_obj = dist_parse.parse(inputVal);
                                     JSONObject json1 = (JSONObject) inp_obj;
                                
                                     String service_type = (String) json1.get("service_type");
                                        
                                     if(service_type.equalsIgnoreCase("H")){
                                         outvalue=get_eb_htbill(inputVal);
                                     }else{
                                         outvalue=get_eb_billdetails(inputVal);
                                     }
                                 }
                                 //System.out.println("outvalue ---->"+outvalue);
                                obj1.put("outputvalue", outvalue);
                             }
                                obj1.put("statusCode", hashvalue.get(0));
                                obj1.put("result", hashvalue.get(1));
                                
                            }else if(flag.equals("LD") || flag.equals("RF")){
                                obj1.put("statusCode", hashvalue.get(0));
                                obj1.put("captcha",  hashvalue.get(1));
                                obj1.put("hash",hashvalue.get(2));
                         
                            }
                            else
                            {
                                obj1.put("statusCode", "ER");
                                obj1.put("captcha", "Error");
                                obj1.put("hash","Error");
                                
                            }
                        
                                            
                resp = jsonvalue + "(" + obj1.toString() + ")";
        }else
        {
            responsee = "Unauthorized Access!!!";
            return Response.ok(responsee, MediaType.TEXT_PLAIN).build();
        } 
        return Response.ok(resp, MediaType.TEXT_PLAIN).build();
    }

The code works well until the following lines are added to the else-if blocks of the Java code given above:

1.

String remoteadd = request.getRemoteHost();
String s=createtoken(outvalue,plotNo,remoteadd);
outvalue =outvalue+"&token="+s;
String plotNo = survey_no + "/" + subdiv_no;
String remoteadd = request.getRemoteHost();
String s=createtoken(outvalue,plotNo,remoteadd);
outvalue =outvalue+"&token="+s;

As soon as the above code is added, the AJAX call from the application throws a 404 error for the same URL which was showing 200 status before the code addition.

Additionally, the 404 error is thrown only for the AJAX call from the web app whereas the same URL shows 200 status code when called from Postman or Talend API.

Tried adding headers using "serverResponse.addHeader()" in Java but only to get the 404 error again.


Solution

  • Got the solution to this problem long ago.

    The solution was to add the relevant JAR files to the WEB-INF/lib folder in addition to adding the same JAR files to the project build path.

    Note: It is insufficient that the JAR files is added to the project build path alone. That's what triggered the error. Adding the JAR files to the WEB-INF/lib folder solved the error.