public ConveyorTile getConveyor(HttpServletRequest request, HttpServletResponse response)
      throws ServiceException {
    Map<String, String[]> params = request.getParameterMap();

    String layerId = super.getLayersParameter(request);

    String encoding = request.getCharacterEncoding();

    String strQuadKey = ServletUtils.stringFromMap(params, encoding, "quadkey");
    String strFormat = ServletUtils.stringFromMap(params, encoding, "format");
    String strCached = ServletUtils.stringFromMap(params, encoding, "cached");
    String strMetaTiled = ServletUtils.stringFromMap(params, encoding, "metatiled");

    long[] gridLoc = VEConverter.convert(strQuadKey);

    MimeType mimeType = null;
    if (strFormat != null) {
      try {
        mimeType = MimeType.createFromFormat(strFormat);
      } catch (MimeException me) {
        throw new ServiceException("Unable to determined requested format, " + strFormat);
      }
    }

    ConveyorTile ret =
        new ConveyorTile(
            sb, layerId, gsb.WORLD_EPSG3857.getName(), gridLoc, mimeType, null, request, response);

    if (strCached != null && !Boolean.parseBoolean(strCached)) {
      ret.setRequestHandler(ConveyorTile.RequestHandler.SERVICE);
      if (strMetaTiled != null && !Boolean.parseBoolean(strMetaTiled)) {
        ret.setHint("not_cached,not_metatiled");
      } else {
        ret.setHint("not_cached");
      }
    }

    return ret;
  }
  protected WMTSGetCapabilities(
      TileLayerDispatcher tld, GridSetBroker gsb, HttpServletRequest servReq) {
    this.tld = tld;
    this.gsb = gsb;

    baseUrl =
        ServletUtils.stringFromMap(
            servReq.getParameterMap(), servReq.getCharacterEncoding(), "base_url");

    // This should prevent anyone from passing in anything nasty
    if (baseUrl != null) {
      baseUrl = encodeXmlChars(baseUrl);
    }

    if (baseUrl == null || baseUrl.length() == 0) {
      baseUrl = servReq.getRequestURL().toString();
    }
  }