@Override
  protected void validate(HttpAction action) {
    HttpServletRequest request = action.request;

    if (HttpNames.METHOD_OPTIONS.equals(request.getMethod())) return;

    if (!HttpNames.METHOD_POST.equalsIgnoreCase(request.getMethod()))
      ServletOps.errorMethodNotAllowed("SPARQL Update : use POST");

    ContentType ct = FusekiLib.getContentType(action);
    if (ct == null) ct = ctSPARQLUpdate;

    if (matchContentType(ctSPARQLUpdate, ct)) {
      String charset = request.getCharacterEncoding();
      if (charset != null && !charset.equalsIgnoreCase(charsetUTF8))
        ServletOps.errorBadRequest("Bad charset: " + charset);
      validate(action, paramsPOST);
      return;
    }

    if (isHtmlForm(ct)) {
      int x =
          countParamOccurences(request, paramUpdate) + countParamOccurences(request, paramRequest);
      if (x == 0) ServletOps.errorBadRequest("SPARQL Update: No 'update=' parameter");
      if (x != 1) ServletOps.errorBadRequest("SPARQL Update: Multiple 'update=' parameters");

      String requestStr = request.getParameter(paramUpdate);
      if (requestStr == null) requestStr = request.getParameter(paramRequest);
      if (requestStr == null) ServletOps.errorBadRequest("SPARQL Update: No update= in HTML form");
      validate(action, paramsForm);
      return;
    }

    ServletOps.error(
        HttpSC.UNSUPPORTED_MEDIA_TYPE_415,
        "Must be "
            + contentTypeSPARQLUpdate
            + " or "
            + contentTypeHTMLForm
            + " (got "
            + ct.getContentType()
            + ")");
  }