@Override
        public void startElement(
                final String uri,
                final String localName,
                final String qName,
                final Attributes attributes) {
            if (LOG.isLoggable(Level.FINEST)) {
                LOG.finest("Start element: " + qName);
                LOG.finest("    URI: " + uri);
                LOG.finest("    local: " + localName);
            }

            BodyQName bodyName = AbstractBody.getBodyQName();
            // Make sure the first element is correct
            if (!(bodyName.getNamespaceURI().equals(uri)
                    && bodyName.getLocalPart().equals(localName))) {
                throw(new IllegalStateException(
                        "Root element was not '" + bodyName.getLocalPart()
                        + "' in the '" + bodyName.getNamespaceURI()
                        + "' namespace.  (Was '" + localName + "' in '" + uri
                        + "')"));
            }

            // Read in the attributes, making sure to expand the namespaces
            // as needed.
            for (int idx=0; idx < attributes.getLength(); idx++) {
                String attrURI = attributes.getURI(idx);
                if (attrURI.length() == 0) {
                    attrURI = defaultNS;
                }
                String attrLN = attributes.getLocalName(idx);
                String attrVal = attributes.getValue(idx);
                if (LOG.isLoggable(Level.FINEST)) {
                    LOG.finest("    Attribute: {" + attrURI + "}"
                            + attrLN + " = '" + attrVal + "'");
                }

                BodyQName aqn = BodyQName.create(attrURI, attrLN);
                result.addBodyAttributeValue(aqn, attrVal);
            }
            
            parser.reset();
        }