@Override
    public void endPrefixMapping(final String prefix) throws SAXException {
        for (int i = 0; i < filters.length; i++) {
            try {
                final XMLFilter filter = filters[i];
                filter.endPrefixMapping(prefix);
            } catch (final RuntimeException e1) {
                LOGGER.trace("Unable to end prefix mapping!", e1);

                // Make sure the rest of the filters get the event.
                for (i = i + 1; i < filters.length; i++) {
                    final XMLFilter f = filters[i];
                    try {
                        f.endPrefixMapping(prefix);
                    } catch (final RuntimeException e2) {
                        LOGGER.trace("Unable to end prefix mapping!", e2);
                    }
                }

                throw ProcessException.wrap(e1);
            }
        }
    }
End the scope of a prefix-URI mapping.
<p>
<p>
See {@link #startPrefixMapping startPrefixMapping} for details. These
events will always occur immediately after the corresponding
{@link #endElement endElement} event, but the order of
{@link #endPrefixMapping endPrefixMapping} events is not otherwise
guaranteed.
</p>

@param prefix the prefix that was being mapped. This is the empty string
              when a default mapping scope ends.
@throws org.xml.sax.SAXException the client may throw an exception during processing
@see #startPrefixMapping
@see #endElement
stroom-pipeline/src/main/java/stroom/pipeline/filter/XMLFilterFork.java