private void actuallyParse(FetchEmitTuple t) {

        long start = System.currentTimeMillis();
        Fetcher fetcher = getFetcher(t);
        if (fetcher == null) {
            //rely on proper logging/exception handling in getFetcher
            return;
        }

        if (LOG.isTraceEnabled()) {
            long elapsed = System.currentTimeMillis() - start;
            LOG.trace("timer -- got fetcher: {}ms", elapsed);
        }

        start = System.currentTimeMillis();
        MetadataListAndEmbeddedBytes parseData = null;

        try {
            //this can be null if there is a fetch exception
            parseData = parseFromTuple(t, fetcher);

            if (LOG.isTraceEnabled()) {
                LOG.trace("timer -- to parse: {} ms", System.currentTimeMillis() - start);
            }

            if (parseData == null || metadataIsEmpty(parseData.getMetadataList())) {
                write(STATUS.EMPTY_OUTPUT);
                return;
            }

            emitParseData(t, parseData);
        } finally {
            if (parseData != null && parseData.hasEmbeddedDocumentByteStore() &&
                    parseData.getEmbeddedDocumentBytesHandler() instanceof Closeable) {
                try {
                    ((Closeable) parseData.getEmbeddedDocumentBytesHandler()).close();
                } catch (IOException e) {
                    LOG.warn("problem closing embedded document byte store", e);
                }
            }
        }
    }
returns stack trace if there was a container exception or empty string
if there was no stacktrace

@param t
@param metadataList
@return
tika-core/src/main/java/org/apache/tika/pipes/PipesServer.java