Ignore:
Timestamp:
2011-04-16T20:16:19+12:00 (13 years ago)
Author:
ak19
Message:

Additional changes to succeed in more of the OAIServer validation tests: 1. Now passes POST requests introduced in OAI version 2.0. 2. Passes further error tests regarding handling of erroneous parameters for From and/or Until dates and ResumptionToken. More (major) changes yet to be made to pass the final official OAIServer validation test: to do with earliestDateStamp.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/OAIServer.java

    r21802 r23913  
    2929import java.util.Enumeration;
    3030import java.util.HashSet;
     31import java.util.Iterator;
     32import java.util.Map;
     33import java.util.Map.Entry;
    3134import java.io.File;
    3235
     
    7881  protected String oai_stylesheet = "interfaces/oai/oai2.xsl";
    7982
     83    // there is no getQueryString() method in the HttpServletRequest returned from doPost,
     84    // since that is actually of type apache RequestFacade, and doesn't define such a method
     85    protected String queryString = null;
     86
    8087  static Logger logger = Logger.getLogger(org.greenstone.gsdl3.OAIServer.class.getName());
    8188 
     
    223230    String usageInfo = "";
    224231   
     232    String query = (queryString == null) ? request.getQueryString() : queryString;
     233
    225234    //logged info = general-info + session-info
    226235    usageInfo =
    227236      request.getContextPath()+" "+ //session id
    228237      request.getServletPath()+" "+ //serlvet
    229       "["+request.getQueryString()+"]" +" "+ //the query string
     238      "["+query+"]" +" "+ //the query string
    230239      "["+usageInfo.trim()+"]" +" "+ // params stored in a session
    231240      request.getRemoteAddr()+" "+   //remote address
     
    256265    return query.substring(verb_start_index, verb_end_index);
    257266  }
     267
    258268  public void doGet(HttpServletRequest request, HttpServletResponse response)
    259269    throws ServletException, IOException {
     
    276286    //For example, puka.cs.waikato.ac.nz vs www.greenstone.org
    277287    //String base_url = request.getRequestURL().toString();
    278     String query = request.getQueryString();
     288    // if called by doPost (if this was originally a POST request), var queryString would have been set
     289    String query = (queryString == null) ? request.getQueryString() : queryString;
    279290    String[] pairs = (query==null)? null : query.split("&");//split into key/value pairs
    280291    String verb = getVerb(query);
     
    377388    }
    378389  }
     390
     391  // For OAI version 2.0, validation tests indicated that POST needs to be supported. Some
     392  // modification was required in order to ensure that the request is passed intact to doGet()
    379393  public void doPost(HttpServletRequest request,
    380394    HttpServletResponse response)
    381395    throws ServletException, IOException {
     396
     397      // the post method returns a wrapper of type RequestFacade by apache and there
     398      // is no getQueryString() method defined for it. Therefore, need to work this out
     399      // manually before calling doGet(request, response) so that doGet can work as before.
     400     
     401      queryString = "";
     402      Iterator parameter_entries = request.getParameterMap().entrySet().iterator();
     403      while(parameter_entries.hasNext()) {   
     404      Map.Entry param_entry = (Map.Entry)parameter_entries.next();
     405      String[] paramVals = (String[]) param_entry.getValue();
     406      if(paramVals != null) {
     407          if(paramVals.length > 0) {
     408          logger.error("POST request received: " + param_entry.getKey() + " - " + paramVals[0]);
     409          queryString = queryString + "&" + param_entry.getKey() + "=" + paramVals[0];
     410          }
     411      }   
     412      }
     413      if(queryString.length() > 0) {
     414      queryString = queryString.substring(1);
     415      //queryString = java.net.URLEncoder.encode(queryString,"UTF-8");
     416      }
     417      if(queryString.equals("")) {
     418      queryString = null;
     419      }
    382420    doGet(request,response);   
    383421  }
Note: See TracChangeset for help on using the changeset viewer.