+ normalizedNodeWriter.flush();
+
+ // FIXME this is a workaround for filter content serialization
+ // Any xml is not supported properly by the stream writer
+ if(filterElements.isPresent()) {
+ appendFilter(result, filterElements.get());
+ }
+ } finally {
+ try {
+ if(normalizedNodeStreamWriter != null) {
+ normalizedNodeStreamWriter.close();
+ }
+ if(writer != null) {
+ writer.close();
+ }
+ } catch (final Exception e) {
+ LOG.warn("Unable to close resource properly", e);
+ }
+ }
+ }
+
+ private void appendFilter(final DOMResult result, final Iterable<Element> filterElements) {
+ final Element rpcElement = ((Element) result.getNode());
+ final Node filterParent = rpcElement.getElementsByTagNameNS(NETCONF_FILTER_QNAME.getNamespace().toString(), NETCONF_FILTER_QNAME.getLocalName()).item(0);
+ final Document ownerDocument = rpcElement.getOwnerDocument();
+ // TODO workaround, add subtree attribute, since it is not serialized by the caller of this method
+ ((Element) filterParent).setAttributeNS(NETCONF_TYPE_QNAME.getNamespace().toString(), NETCONF_TYPE_QNAME.getLocalName(), "subtree");
+ for (final Element element : filterElements) {
+ filterParent.appendChild(ownerDocument.importNode(element, true));
+ }
+ }
+
+ private void appendEditData(final DOMResult result, final Iterable<Element> filterElements) {
+ final Element rpcElement = ((Element) result.getNode());
+ final Node configParent = rpcElement.getElementsByTagNameNS(NETCONF_CONFIG_QNAME.getNamespace().toString(), NETCONF_CONFIG_QNAME.getLocalName()).item(0);
+ for (final Element element : filterElements) {
+ configParent.appendChild(rpcElement.getOwnerDocument().importNode(element, true));
+ }
+ }
+
+ private Iterable<Element> serializeAnyXmlAccordingToSchema(final Iterable<DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> values) throws IOException, XMLStreamException {
+ return Iterables.transform(values, new Function<DataContainerChild<? extends YangInstanceIdentifier.PathArgument,?>, Element>() {
+ @Override
+ public Element apply(final DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?> input) {
+ final DOMResult domResult = new DOMResult(XmlUtil.newDocument());
+ try {
+ writeNormalizedNode(input, domResult, SchemaPath.ROOT, schemaContext);
+ } catch (IOException | XMLStreamException e) {
+ throw new IllegalStateException(e);
+ }
+ return ((Document) domResult.getNode()).getDocumentElement();
+ }
+ });