@NotNull @Override public SimpleAdapter marshal(@NotNull final XmlSerializable v) throws Exception { final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); final Document document = dbf.newDocumentBuilder().newDocument(); final DocumentFragment content = document.createDocumentFragment(); final XMLOutputFactory xof = XMLOutputFactory.newFactory(); final XMLStreamWriter out = xof.createXMLStreamWriter(new DOMResult(content)); v.serialize(XmlStreaming.newWriter(new DOMResult(content))); final int childCount = content.getChildNodes().getLength(); if (childCount == 0) { return new SimpleAdapter(); } else if (childCount == 1) { final SimpleAdapter result = new SimpleAdapter(); final Node child = content.getFirstChild(); if (child instanceof Element) { result.setAttributes(child.getAttributes()); for (Node child2 = child.getFirstChild(); child2 != null; child2 = child2.getNextSibling()) { result.children.add(child2); } } else { result.children.add(child); } return result; } else { // More than one child final SimpleAdapter result = new SimpleAdapter(); for (Node child = content.getFirstChild(); child != null; child = child.getNextSibling()) { result.children.add(child); } return result; } }