- private static Element createXmlRootElement(Document doc, Node<?> data, SchemaNode schema,
- XmlCodecProvider codecProvider) throws UnsupportedDataTypeException {
- Element itemEl = createElementFor(doc, data);
- if (data instanceof SimpleNode<?>) {
- if (schema instanceof LeafListSchemaNode) {
- writeValueByType(itemEl, (SimpleNode<?>) data, ((LeafListSchemaNode) schema).getType(),
- (DataSchemaNode) schema, codecProvider);
- } else if (schema instanceof LeafSchemaNode) {
- writeValueByType(itemEl, (SimpleNode<?>) data, ((LeafSchemaNode) schema).getType(),
- (DataSchemaNode) schema, codecProvider);
- } else {
- Object value = data.getValue();
- if (value != null) {
- itemEl.setTextContent(String.valueOf(value));
- }
- }
- } else { // CompositeNode
- for (Node<?> child : ((CompositeNode) data).getChildren()) {
- DataSchemaNode childSchema = null;
- if (schema != null) {
- childSchema = findFirstSchemaForNode(child, ((DataNodeContainer) schema).getChildNodes());
- if (logger.isDebugEnabled()) {
- if (childSchema == null) {
- logger.debug("Probably the data node \""
- + ((child == null) ? "" : child.getNodeType().getLocalName())
- + "\" is not conform to schema");
- }
- }
- }
- itemEl.appendChild(createXmlRootElement(doc, child, childSchema, codecProvider));
- }
+ /**
+ * Converts Data DOM structure to XML Document for specified XML Codec Provider. The CompositeNode
+ * data parameter enters as root of Data DOM tree and will be transformed to root in XML Document. The child
+ * nodes of Data Tree are transformed accordingly.
+ *
+ * @param data Data DOM root element
+ * @param codecProvider XML Codec Provider
+ * @return new instance of XML Document
+ * @throws UnsupportedDataTypeException
+ */
+ public static Document toDocument(final CompositeNode data, final XmlCodecProvider codecProvider) {
+ final DOMResult result = new DOMResult(getDocument());
+ try {
+ final XMLStreamWriter writer = FACTORY.createXMLStreamWriter(result);
+ XmlStreamUtils.create(codecProvider).writeDocument(writer, data);
+ writer.close();
+ return (Document)result.getNode();
+ } catch (XMLStreamException e) {
+ logger.error("Failed to serialize data {}", data, e);
+ return null;