code: protected void validateTagLib(Document jspDocument, String uri, String prefix, TagLibraryInfoImpl tli) throws JspCoreException {
          TagLibraryValidator tlv = tli.getTagLibraryValidator();
          if (tlv != null) {
              ClassLoader originalClassLoader = ThreadContextHelper.getContextClassLoader();
              ThreadContextHelper.setClassLoader(context.getJspClassloaderContext().getClassLoader());
              try {
                  ValidationMessage[] validationMessages = tlv.validate(prefix, uri, new PageDataImpl(jspDocument, tagLibraryCache));
                  ThreadContextHelper.setClassLoader(originalClassLoader);
                  if (validationMessages != null && validationMessages.length > 0) {
                      StringBuffer errMsg = new StringBuffer();
                      for (int i = 0; i < validationMessages.length; i++) {
                          if (validationMessages[i] != null) {
                              errMsg.append("<p>");
                              if (validationMessages[i].getId() != null) {
                                  JspId jspId = new JspId(validationMessages[i].getId());
                                  errMsg.append("File ["+jspId.getFilePath() + "] ");
                                  errMsg.append("Line [" + jspId.getStartSourceLineNum() + "] ");
                                  errMsg.append("Column [" + jspId.getStartSourceColNum() + "] ");
                              }
                              errMsg.append(validationMessages[i].getMessage());
                              errMsg.append("</p>");
                          }
                      }
                      throw new JspTranslationException("jsp.error.tlv.invalid.page", new Object[] { uri, errMsg.toString()});
                  }
              }
              catch (Throwable e) {
                  throw new JspCoreException(e);
              }
          }
      }
docs: PK29373