From: Tony Tkacik Date: Wed, 3 Sep 2014 16:09:06 +0000 (+0000) Subject: Merge "Fix xml->CompositeNode transformation for rpc replies for rpcs with no output" X-Git-Tag: release/helium~75 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=2e12e37b827fbd022288d037711f8e6eee889208;hp=efd6f5f651cb2afbc7d69b6388947035411223c8;p=yangtools.git Merge "Fix xml->CompositeNode transformation for rpc replies for rpcs with no output" --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java index f0d82c33b9..68fc432e96 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java @@ -432,14 +432,15 @@ public class XmlDocumentUtils { if (rpcDefinition.isPresent()) { RpcDefinition rpc = rpcDefinition.get(); - final Collection outputNode = rpc.getOutput().getChildNodes(); + final Collection outputNode = rpc.getOutput() != null ? rpc.getOutput().getChildNodes() : null; final Element rpcReplyElement = document.getDocumentElement(); final QName partialQName = qNameFromElement(rpcReplyElement); if (RPC_REPLY_QNAME.equals(partialQName)) { final List> domNodes = toDomNodes(rpcReplyElement, Optional.fromNullable(outputNode), context); + QName qName = rpc.getOutput() != null ? rpc.getOutput().getQName() : QName.cachedReference(QName.create(rpcName, "output")); List> rpcOutNodes = Collections.>singletonList(ImmutableCompositeNode.create( - rpc.getOutput().getQName(), domNodes)); + qName, domNodes)); return ImmutableCompositeNode.create(rpcName, rpcOutNodes); } } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java index b716c8cbe7..e93a5704d5 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java @@ -9,25 +9,25 @@ package org.opendaylight.yangtools.yang.data.impl.codec.xml; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import com.google.common.base.Charsets; import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.io.ByteSource; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; - import javax.activation.UnsupportedDataTypeException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; - import org.custommonkey.xmlunit.XMLUnit; import org.junit.Before; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.CompositeNode; +import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.SimpleNode; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -57,6 +57,10 @@ public class XmlDocumentUtilsTest { "/ltha:cont/ltha:l[ltha:id='id']\n" + ""; + public static final String RPC_REPLY = "\n" + + " \n" + + ""; + private SchemaContext schema; private RpcDefinition testRpc; @@ -87,6 +91,18 @@ public class XmlDocumentUtilsTest { XMLUnit.compareXML(inputDocument, serializedDocument); } + @Test + public void testRpcReplyToDom() throws Exception { + final Document reply = readXmlToDocument(RPC_REPLY); + final CompositeNode domNodes = XmlDocumentUtils.rpcReplyToDomNodes(reply, QName.create("urn:opendaylight:controller:rpc:test", "2014-07-28", "test"), schema); + assertEquals(1, domNodes.getValue().size()); + final Node outputNode = domNodes.getValue().get(0); + assertTrue(outputNode instanceof CompositeNode); + assertEquals(1, ((CompositeNode) outputNode).getValue().size()); + final Node okNode = ((CompositeNode) outputNode).getValue().get(0); + assertEquals("ok", okNode.getNodeType().getLocalName()); + } + public static Document readXmlToDocument(final String xmlContent) throws SAXException, IOException { return readXmlToDocument(new ByteArrayInputStream(xmlContent.getBytes(Charsets.UTF_8))); }