From: msunal Date: Fri, 15 Nov 2013 15:16:11 +0000 (+0100) Subject: Added parsing of namespace in Json X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~392^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=d18f597157deded5c99dc3cbca488a718500734a Added parsing of namespace in Json - if Json element contains namespace ( namespace:elementName ) then it is added to Node - added test for status 404 in XML part Change-Id: I376e1d997bb0e74b64545c8099fab13ceb12d7d1 Signed-off-by: Martin Sunal --- diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java index fa00908e4d..3115994e01 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java @@ -2,6 +2,7 @@ package org.opendaylight.controller.sal.rest.impl; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; import java.util.Map.Entry; import java.util.Set; @@ -48,7 +49,8 @@ class JsonReader { } private CompositeNodeWrapper createStructureWithRoot(String rootObjectName, JsonObject rootObject) { - CompositeNodeWrapper firstNode = new CompositeNodeWrapper(rootObjectName); + CompositeNodeWrapper firstNode = new CompositeNodeWrapper(getNamespaceFrom(rootObjectName), + getLocalNameFrom(rootObjectName)); for (Entry childOfFirstNode : rootObject.entrySet()) { addChildToParent(childOfFirstNode.getKey(), childOfFirstNode.getValue(), firstNode); } @@ -57,7 +59,8 @@ class JsonReader { private void addChildToParent(String childName, JsonElement childType, CompositeNodeWrapper parent) { if (childType.isJsonObject()) { - CompositeNodeWrapper child = new CompositeNodeWrapper(childName); + CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFrom(childName), + getLocalNameFrom(childName)); parent.addValue(child); for (Entry childOfChild : childType.getAsJsonObject().entrySet()) { addChildToParent(childOfChild.getKey(), childOfChild.getValue(), child); @@ -71,11 +74,28 @@ class JsonReader { String value = childPrimitive.getAsString(); SimpleNodeWrapper child = null; if (value.equals("[null]")) { - child = new SimpleNodeWrapper(childName, null); + child = new SimpleNodeWrapper(getNamespaceFrom(childName), getLocalNameFrom(childName), null); } else { - child = new SimpleNodeWrapper(childName, value); + child = new SimpleNodeWrapper(getNamespaceFrom(childName), getLocalNameFrom(childName), value); } parent.addValue(child); } } + + private URI getNamespaceFrom(String jsonElementName) { + int indexOfDelimeter = jsonElementName.lastIndexOf(':'); + if (indexOfDelimeter == -1) { + return null; + } + return URI.create(jsonElementName.substring(0, indexOfDelimeter)); + } + + private String getLocalNameFrom(String jsonElementName) { + int indexOfDelimeter = jsonElementName.lastIndexOf(':'); + if (indexOfDelimeter == -1) { + return jsonElementName; + } + return jsonElementName.substring(indexOfDelimeter + 1, jsonElementName.length()); + } + } diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/CompositeNodeWrapper.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/CompositeNodeWrapper.java index da07bba187..e000c7e29e 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/CompositeNodeWrapper.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/CompositeNodeWrapper.java @@ -29,6 +29,11 @@ public final class CompositeNodeWrapper implements NodeWrapper, C public CompositeNodeWrapper(String localName) { this.localName = Preconditions.checkNotNull(localName); } + + public CompositeNodeWrapper(URI namespace, String localName) { + this(localName); + this.namespace = namespace; + } @Override public String getLocalName() { diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/SimpleNodeWrapper.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/SimpleNodeWrapper.java index 50b6ac77e6..4600d0890b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/SimpleNodeWrapper.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/SimpleNodeWrapper.java @@ -24,6 +24,11 @@ public final class SimpleNodeWrapper implements NodeWrapper>, Simp this.value = value; } + public SimpleNodeWrapper(URI namespace, String localName, String value) { + this(localName, value); + this.namespace = namespace; + } + @Override public String getLocalName() { if (simpleNode != null) { diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java index 0b8b5d48de..9d004362d2 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java @@ -24,6 +24,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.TestProperties; @@ -151,6 +152,21 @@ public class XmlProvidersTest extends JerseyTest { Entity.entity("", new MediaType("application", "vnd.yang.api+xml"))); assertEquals(400, response.getStatus()); } + + @Test + public void testXmlToCompositeNode404NotFound() { + URI uri = null; + try { + uri = new URI("/datastore/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); + } catch (UnsupportedEncodingException | URISyntaxException e) { + e.printStackTrace(); + } + + when(brokerFacade.readOperationalData(any(InstanceIdentifier.class))).thenReturn(null); + + Response response = target(uri.toASCIIString()).request(MediaTypes.API+RestconfService.XML).get(); + assertEquals(404, response.getStatus()); + } @Override protected Application configure() {