Expiring Today—Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

need to call Servlet from JSP

Posted on 2006-06-14
8
Medium Priority
?
356 Views
Last Modified: 2010-04-01
the following code works from command line, but I could not get it to work from tomcat.  the codeshould take 2 parameters and connect to remote webservice and return encrypted URL and redirect the user to the new site.   in my JSP, I did thefollowing:


imageURL="https://thewebsitewherewebservice";
            rNumber=12345678;
            password="mypassword";
            institutionID=1111;
            memberNumber =1234;
            String param=rNumber+","+password+","+institutionID+","+rNumber;
            System.out.println(param);
            myTestClass test = new myTestClass(String imageURL,String param);

tomcat return error:

error: File C:\summit\morris\homebanking\WEB-INF\classes\com\summitsite\homebanking\EmpireBillpaySingleSignonChannelData$MyX509TrustManager.class does not contain nested type com.summitsite.homebanking.EmpireBillpaySingleSignonChannelData. MyX509TrustManager as expected, but type EmpireBillpaySingleSignonChannelData$MyX509TrustManager. Please remove the file, or make sure it appears in the correct subdirectory of the class path.


An error occurred between lines: 26 and 142 in the jsp file: /jsp/Member/billpay.jsp

Generated servlet error:
C:\summit\morris\tomcat\work\test$jsp.java:685: Wrong number of arguments in constructor.
               myTestClass test = new myTestClass(imageURL,param);



he servlet code:

import java.io.*;
import java.net.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import com.sun.net.ssl.*;
import javax.net.ssl.SSLSocketFactory;
import javax.security.cert.*;
import javax.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.text.SimpleDateFormat;
import java.util.*;
import sun.misc.*;




public class myTestClass {
    public myTestClass() {
            java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");

    }

    public void init(String args){
        StringTokenizer token = new StringTokenizer (args,",");
        if (token.hasMoreTokens())
            imageURL=token.nextToken();
        if (token.hasMoreTokens())
            routingNumber=token.nextToken();
        if (token.hasMoreTokens())
            password=token.nextToken();
        if (token.hasMoreTokens())
            institutionID=token.nextToken();
        if (token.hasMoreTokens())
            errorURL=token.nextToken();
    }
    public String getRedirect(){
        if (imageURL!=null){
                  try {
                      javax.net.ssl.SSLSocketFactory sf = (javax.net.ssl.SSLSocketFactory)
                      javax.net.ssl.SSLSocketFactory.getDefault();
                      javax.net.ssl.SSLSocket sock = null;
                      X509TrustManager tm = new MyX509TrustManager();
                      KeyManager []km = null;
                      TrustManager []tma = {tm};
                      SSLContext sc = SSLContext.getInstance("SSL");
                      sc.init(km,tma,new java.security.SecureRandom());
                      SSLSocketFactory sf1 = sc.getSocketFactory();
                      HttpsURLConnection.setDefaultSSLSocketFactory(sf1);
                      
                      SimpleDateFormat df =  new SimpleDateFormat("yyyyMMddHHmmss");
                Date timestamp = new Date();
                      
                      String parameters="id="+routingNumber+"&pw="+password+"&corp="+institutionID+"&ts="+df.format(timestamp)+"&lgn="+memberNumber;
                      
                       String response=postData(imageURL,parameters);
                       print("myTestClass response="+response);
                       String reponseCode="00";
                       
                       if (response.startsWith("00")){ //good
                           StringTokenizer token = new StringTokenizer(response,"|");
                           if (token.hasMoreTokens())
                               reponseCode=token.nextToken();
                           if (token.hasMoreTokens()) {
                               redirectURL=token.nextToken();
                               return redirectURL;
                           }
                           return errorURL;
                       }
                    else {
                        return errorURL;
                    }
                  }
                  catch (Exception e){
                        e.printStackTrace();
                  return errorURL;
                  }
        }
        else
            return errorURL;

    }
    public String postData(String urlstr, String parameters) throws IOException      {
          HttpURLConnection hpcon = null;
            try{
                URL url = new URL(urlstr);
                print("myTestClass request="+url+", parameters="+parameters);
                  hpcon = (HttpURLConnection) url.openConnection();            
                  hpcon.setRequestMethod("POST");
                  hpcon.setDoInput(true);
                  hpcon.setDoOutput(true);
                  hpcon.setUseCaches (false);
                  
                  //Get the outputStream so we can send the query
                PrintWriter out = new PrintWriter(hpcon.getOutputStream());
               
                // POST the query string to the server
                out.print(parameters);
                out.close();
                  
                  // getting the response is required to force the request, otherwise it might not even be sent at all
                  BufferedReader in = new BufferedReader(new InputStreamReader(hpcon.getInputStream()));
                  String input;
                  StringBuffer response = new StringBuffer(256);
              
                  while((input = in.readLine()) != null) {
                        response.append(input + "\r");
                  }
                  in.close();
                  return response.toString();
          }
          catch(Exception e){
                  throw new IOException(e.getMessage());      
            }
            finally {
                if(hpcon != null){
                      hpcon.disconnect();      
                }
            }
      }
      public static void print(String str) {
            System.out.println("date "+new Date()+" - "+str);
      }
      protected void setMemberNumber(String mnum){
            memberNumber = mnum;
      }
      public static void main(String args[]){
            myTestClass ebp = new      myTestClass();
            ebp.init(args[0]);
            ebp.setMemberNumber(args[1]);
            print (ebp.getRedirect());
      }

    private String memberNumber="";
    private String password="";
    private String imageURL="";
    private String institutionID="";
    private String redirectURL="";
    private String errorURL="";
    private String routingNumber="";
   
    class MyX509TrustManager implements X509TrustManager {
            public boolean isClientTrusted(java.security.cert.X509Certificate[] chain) {
                  return true;
            }
            public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) {
                  return true;
            }
            public java.security.cert.X509Certificate[] getAcceptedIssuers(){
                  return null;
            }
      }
}


Thanks



0
Comment
Question by:salasadi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
8 Comments
 
LVL 8

Expert Comment

by:colr__
ID: 16902847
The myTestClass  class takes no args, but you are attepting to supply 2 of them.

colr__
0
 
LVL 8

Expert Comment

by:colr__
ID: 16902859
The line in your JSP:

myTestClass test = new myTestClass(String imageURL,String param);

Yet your constructor onluy accepts no args:

public myTestClass()
0
 

Author Comment

by:salasadi
ID: 16902893
what I need to do toi fix it.  can you give me an example --I am not Java expert :(
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 8

Expert Comment

by:colr__
ID: 16902905
In the JSP, change the line

myTestClass test = new myTestClass(String imageURL,String param);

to the folloiwng:

myTestClass test = new myTestClass();
0
 

Author Comment

by:salasadi
ID: 16903474
if I do that in the JSP, how can I pass the URL and the parameters the servlet need?

0
 
LVL 8

Accepted Solution

by:
colr__ earned 500 total points
ID: 16903581
Thats a seperate issue. The way myTestClass is implemented, it cannot take any paramaters on construction - if you need it to pass in paramaters then your going to have to change the class myTestClass. The way it is just now, you wont be able to get it to compile as it as you've seen.

I also notice that you've said that myTestClass is a servlet, but it doesnt appear to be so. In order for a class to be a servlet it has to extend the HttpServlet class.

Unfortunately if your not a java expert, your going to find this quite difficult - you'll need to know the java language before you can propoperly take control of servlets and JSPs and the like.

colr__
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you’re involved with your company’s wide area network (WAN), you’ve probably heard about SD-WANs. They’re the “boy wonder” of networking, ostensibly allowing companies to replace expensive MPLS lines with low-cost Internet access. But, are they …
In this article, I’ll show how research, determination, and use of modern technology helped me solve a DNA mystery.
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question