private Document parse(final String data, DocumentBuilder docBuilder) {
    if (docBuilder == null || data == null) {
      return null;
    }

    Document document = null;

    try {
      // we change the system ID to a valid URI so that Crimson won't
      // complain. Indeed, "log4j.dtd" alone is not a valid URI which
      // causes Crimson to barf. The Log4jEntityResolver only cares
      // about the "log4j.dtd" ending.

      /**
       * resetting the length of the StringBuffer is dangerous, particularly on some JDK 1.4 impls, there's a known Bug that causes a memory leak
       */
      StringBuilder buf = new StringBuilder(1024);

      if (!data.startsWith("<?xml")) {
        buf.append(BEGIN_PART);
      }

      buf.append(data);

      if (!data.endsWith(END_PART)) {
        buf.append(END_PART);
      }

      InputSource inputSource = new InputSource(new StringReader(buf.toString()));
      document = docBuilder.parse(inputSource);

    } catch (Exception e) {
      LOGGER.warn("Problem with creating document: " + e.getMessage());

    }

    return document;
  }
Converts the LoggingEvent data in XML string format into an actual XML Document class instance.

@param data XML fragment
@return dom document
olv-core/src/main/java/pl/otros/logview/importer/UtilLoggingXmlLogImporter.java