docs: @Override
      public int doEndTag() throws JspException {
  
          ServletRequest req = pageContext.getRequest();
          A_CmsConfiguredHtmlParser parser;
          if (m_allowInlineEdit && CmsJspTagEditable.isEditableRequest(req)) {
              // during inline editing the content should not be parsed
              try {
                  getBodyContent().writeOut(pageContext.getOut());
                  release();
              } catch (Exception ex) {
                  release();
                  if (LOG.isErrorEnabled()) {
                      LOG.error(Messages.get().getBundle().key(Messages.ERR_PROCESS_TAG_1, TAG_NAME), ex);
                  }
                  // this is severe
                  throw new JspException(ex);
              }
          } else {
              // This will always be true if the page is called through OpenCms
              if (CmsFlexController.isCmsRequest(req)) {
                  String content = "";
                  try {
                      if (CmsStringUtil.isEmpty(m_configuredParserClassname)) {
                          if (LOG.isErrorEnabled()) {
                              LOG.error(
                                  Messages.get().getBundle().key(
                                      Messages.GUI_ERR_TAG_ATTRIBUTE_MISSING_2,
                                      new Object[] {TAG_NAME, ATT_VISITOR_CLASS}));
                          }
  
                      }
                      // wrong attribute visitorClass -> content will remain empty, but no exception is
                      // thrown
                      try {
                          // load
                          Class<?> cl = Class.forName(m_configuredParserClassname);
                          // Instantiate
                          Object instance = cl.newInstance();
                          // cast
                          parser = (A_CmsConfiguredHtmlParser)instance;
                          parser.setParam(m_param);
                          // cms object:
                          CmsFlexController controller = CmsFlexController.getController(req);
                          CmsObject cms = controller.getCmsObject();
                          parser.setCmsObject(cms);
                          content = parseTagAction(getBodyContent().getString(), pageContext, parser);
  
                      } catch (Exception e) {
                          if (LOG.isErrorEnabled()) {
                              LOG.error(
                                  Messages.get().getBundle().key(
                                      Messages.GUI_ERR_TAG_ATTRIBUTE_INVALID_3,
                                      new Object[] {
                                          TAG_NAME,
                                          ATT_VISITOR_CLASS,
                                          A_CmsConfiguredHtmlParser.class.getName()}),
                                  e);
                          }
                          e.printStackTrace(System.err);
                      }
  
                  } finally {
                      try {
                          getBodyContent().clear();
                          getBodyContent().print(content);
                          getBodyContent().writeOut(pageContext.getOut());
                          release();
  
                      } catch (Exception ex) {
                          release();
                          if (LOG.isErrorEnabled()) {
                              LOG.error(Messages.get().getBundle().key(Messages.ERR_PROCESS_TAG_1, TAG_NAME), ex);
                          }
                          // this is severe
                          throw new JspException(ex);
                      }
  
                  }
  
              }
          }
          return EVAL_PAGE;
      }