code: public String getRequestForParam(List<Param> optionalParam, ServiceParams params) {
  		String url;
  		ArrayList<String> requestParams;
  		RequestType requestType;
  
  		this.setType(DescribeService.BROWSE_TYPE);
  		requestType = getRequestTypes().get(DescribeService.BROWSE_TYPE);
  
  		if (optionalParam == null) {
  			this.setType(DescribeService.BROWSE_TYPE);
  			requestType = getRequestTypes().get(DescribeService.BROWSE_TYPE);
  		}
  
  		if (optionalParam.size() == 0) {
  			this.setType(DescribeService.BROWSE_TYPE);
  			requestType = getRequestTypes().get(DescribeService.BROWSE_TYPE);
  		}
  
  		for (Param optParam : optionalParam) {
  			if (optParam == null) {
  				continue;
  			}
  			
  			if (optParam.getType() == ParamEnum.QUERY.name) {
  				this.setType(DescribeService.SEARCH_TYPE);
  				requestType = getRequestTypes().get(DescribeService.SEARCH_TYPE);
  			}
  		}
  
  		url = requestType.getUrl();
  		requestParams = requestType.getParams();
  
  		String optionalUrl = processRequestParams(requestParams, params);
  		return url + optionalUrl;
  	}
docs: returns the URL to request given an array of optional params. Usually if
  optionalParam contains a {@link Param} of type {@link Param#QUERY} then
  this method will return the url of the {@link RequestType} of type
  {@link DescribeService#SEARCH_TYPE} otherwise will return the url of
  {@link DescribeService#BROWSE_TYPE}
  
  @param optionalParam
  An array of {@link Param}
  @param params
  A {@link ServiceParams} instance
  @return The url to request