@Override
  public void startElement(String uri, String localName, String qName, Attributes attributes)
      throws SAXException {
    String elem = localName;
    if (elem.isEmpty()) {
      elem = qName;
    }
    elemStack.addFirst(elem);

    ElementHandler contextHandler = handlerStack.getFirst();
    ElementHandler elemHandler = contextHandler.getHandler(elem);
    if (elemHandler == null) {
      throw new IllegalStateException(
          String.format(
              "Context handler %s have not returned handler for elem %s",
              contextHandler, elemStack));
    }
    handlerStack.addFirst(elemHandler);
    elemHandler.startElement(attributes);
  }