Dear Christian, thank you for quickly attacking the problem! But sorry, but the problem is not fixed.I get the same error. I have a general note. I have implemented a special serializer which implements org.xml.sax .XMLReader. This is used to directly dispatch the query result to JAXB and to created objects. I can now extend this technique to generate a new DOM by implementing a SAX ContentHandler which generates a DOM. Unfortunately the serializer API is not documented nor stable (it changed from 7.3 to 7.5). I propose to add a standard SAX serializer to BaseX. This would be a very useful extension. Here is my implementation: import static org.basex.util.Token.XMLNS; import static org.basex.util.Token.startsWith; import static org.basex.util.Token.string; import static org.basex.util.Token.substring; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.basex.io.serial.Serializer; import org.basex.query.value.item.Item; import org.xml.sax.ContentHandler; import org.xml.sax.DTDHandler; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; import org.xml.sax.ext.LexicalHandler; import org.xml.sax.helpers.AttributesImpl; /** * Bridge to translate BaseX items to SAX events. * The parse() methods does the following: * <ol> * <li>notify startDocument()</li> * <li>serialize the item</li> * <li>notify endDocument()</li> */ public class FragmentSerializer extends Serializer implements XMLReader { /** * The item to be serialized */ private Item item; private ContentHandler contentHandler; private EntityResolver entityResolver; private DTDHandler dtdHandler; private ErrorHandler errorHandler; private LexicalHandler lexicalHandler; public FragmentSerializer() { } public Item getItem() { return item; } /** * Sets the item to be serialized. */ public void setItem(Item item) { this.item = item; } ////////////////////////////////////////////////// // XMLReader ////////////////////////////////////////////////// @Override public ContentHandler getContentHandler() { return contentHandler; } @Override public boolean getFeature(final String name) { return false; } @Override public Object getProperty(final String name) { return null; } public void parse() throws SAXException { parse(""); } @Override public void parse(final InputSource input) throws SAXException { parse(""); } @Override public void parse(final String id) throws SAXException { try { contentHandler.startDocument(); item.serialize(this); contentHandler.endDocument(); } catch (final Exception ex) { throw new SAXException(ex); } } @Override public void setContentHandler(final ContentHandler c) { contentHandler = c; } public void setLexicalHandler(final LexicalHandler l) { lexicalHandler = l; } @Override public void setEntityResolver(EntityResolver entityResolver) { this.entityResolver = entityResolver; } @Override public EntityResolver getEntityResolver() { return entityResolver; } @Override public void setDTDHandler(DTDHandler dtdHandler) { this.dtdHandler = dtdHandler; } @Override public DTDHandler getDTDHandler() { return dtdHandler; } @Override public void setErrorHandler(ErrorHandler errorHandler) { this.errorHandler = errorHandler; } @Override public ErrorHandler getErrorHandler() { return errorHandler; } @Override public void setFeature(final String name, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotRecognizedException(); } @Override public void setProperty(final String name, final Object value) throws SAXNotRecognizedException, SAXNotSupportedException { throw new SAXNotRecognizedException(); } ////////////////////////////////////////////////// // Serializer ////////////////////////////////////////////////// private final HashMap<String, String> attributes = new HashMap<String, String>(); private NSDecl namespaces; @Override protected void startOpen(byte[] n) throws IOException { attributes.clear(); this.namespaces = new NSDecl(this.namespaces); } @Override protected void attribute(byte[] n, byte[] v) throws IOException { String value = string(v); String prefix = null; if (startsWith(n, XMLNS)) { if (n.length == 5) { prefix = ""; } else if (n[5] == ':') { prefix = string(substring(n, 6)); } } if (prefix != null) { namespaces.put(prefix, value); } else { String name = string(n); attributes.put(name, value); } } @Override protected void finishOpen() throws IOException { try { AttributesImpl attrs = new AttributesImpl(); for (Map.Entry<String, String> e : attributes.entrySet()) { String rname = e.getKey(); String[] qname = qname(rname); String ns = namespaces.get(qname[0]); String lname = qname[1]; attrs.addAttribute(ns, lname, rname, null, e.getValue()); } String rname = string(elem); String[] qname = qname(rname); String ns = namespaces.get(qname[0]); String lname = qname[1]; contentHandler.startElement(ns, lname, rname, attrs); // System.out.println("{" + ns + "}" + lname); // for (int i = 0; i < attrs.getLength(); i++) // { // System.out.println(" {" + attrs.getURI(i) + "}" + attrs.getLocalName(i) + "=" + attrs.getValue(i)); // } } catch (final SAXException e) { throw new IOException(e.getMessage()); } } public String[] qname(String rname) { String prefix = ""; String lname = rname; int i = rname.indexOf(':'); if (i > 0) { prefix = rname.substring(0, i); lname = rname.substring(i + 1); } return new String[] { prefix, lname }; } @Override protected void finishEmpty() throws IOException { finishOpen(); finishClose(); } @Override protected void finishClose() throws IOException { try { String name = string(elem); contentHandler.endElement("", name, name); this.namespaces = namespaces.getParent(); } catch (final SAXException e) { throw new IOException(e.getMessage()); } } @Override protected void finishText(byte[] text) throws IOException { try { String s = string(text); final char[] c = s.toCharArray(); contentHandler.characters(c, 0, c.length); } catch (final SAXException e) { throw new IOException(e.getMessage()); } } @Override protected void finishComment(byte[] comment) throws IOException { if (lexicalHandler != null) { try { String s = string(comment); final char[] c = s.toCharArray(); lexicalHandler.comment(c, 0, c.length); } catch (final SAXException e) { throw new IOException(e.getMessage()); } } } @Override protected void finishPi(byte[] n, byte[] v) throws IOException { //ignored } @Override protected void atomic(Item i) throws IOException { //ignored } } class NSDecl { private final NSDecl parent; private Map<String, String> decls; public NSDecl(NSDecl parent) { this.parent = parent; } public NSDecl getParent() { return parent; } public void put(String prefix, String uri) { if (decls == null) { decls = new HashMap<String, String>(); } decls.put(prefix, uri); } public String get(String prefix) { String ns = null; for (NSDecl c = this; c != null; c = c.parent) { if (c.decls != null) { ns = c.decls.get(prefix); if (ns != null) { break; } } } return ns != null ? ns : ""; } }