diff --git a/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java b/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
index 5872e51..67bc423 100644
--- a/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
+++ b/serializers/xml/src/main/java/org/onosproject/yang/serializers/xml/XmlSerializer.java
@@ -43,7 +43,6 @@
 
 import static org.onosproject.yang.runtime.helperutils.DefaultDataNodeWalker.walk;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
-import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
 import static org.onosproject.yang.serializers.utils.SerializersUtil.addRootElementWithAnnotation;
 import static org.onosproject.yang.serializers.utils.SerializersUtil.convertRidToUri;
 import static org.onosproject.yang.serializers.utils.SerializersUtil.convertUriToRid;
@@ -117,7 +116,8 @@
         ResourceId.Builder builder;
 
         ResourceId resourceId = internal.resourceData().resourceId();
-        if (resourceId != null) {
+        if (resourceId != null && resourceId.nodeKeys() != null &&
+                !resourceId.nodeKeys().isEmpty()) {
             uriString = convertRidToUri(resourceId);
             try {
                 builder = resourceId.copyBuilder();
@@ -131,7 +131,7 @@
              * data node and checked in annotation map for annotations
              * associated with resource id.
              */
-            builder = initializeResourceId(context);
+            builder = ResourceId.builder();
         }
 
         // Store annotations in map with resource id as key
diff --git a/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java b/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
index 678d88b..3c84ef8 100644
--- a/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
+++ b/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
@@ -21,16 +21,20 @@
 import org.junit.Test;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.InnerNode;
+import org.onosproject.yang.model.KeyLeaf;
 import org.onosproject.yang.model.LeafListKey;
 import org.onosproject.yang.model.LeafNode;
 import org.onosproject.yang.model.ListKey;
 import org.onosproject.yang.model.NodeKey;
 import org.onosproject.yang.model.ResourceData;
+import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.SchemaId;
 import org.onosproject.yang.runtime.AnnotatedNodeInfo;
 import org.onosproject.yang.runtime.Annotation;
 import org.onosproject.yang.runtime.CompositeData;
 import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo;
+import org.onosproject.yang.runtime.DefaultCompositeData;
 import org.onosproject.yang.runtime.DefaultCompositeStream;
 import org.onosproject.yang.runtime.YangSerializer;
 import org.onosproject.yang.runtime.YangSerializerContext;
@@ -153,8 +157,8 @@
         validateLeafDataNode(c1, "leaf_c1", "yrt:list", "l1_value1");
 
         // encode test
-        CompositeStream compositeStream = xmlSerializer.encode(compositeData,
-                                                               context);
+        CompositeStream compositeStream = xmlSerializer.encode(
+                getNewCompositeData(compositeData), context);
         InputStream inputStream = compositeStream.resourceData();
         assertThat(convertInputStreamToString(inputStream), is(parseXml(path)));
     }
@@ -180,8 +184,8 @@
                                  "value3");
 
         // encode test
-        CompositeStream compositeStream = xmlSerializer.encode(compositeData,
-                                                               context);
+        CompositeStream compositeStream = xmlSerializer.encode(
+                getNewCompositeData(compositeData), context);
         InputStream inputStream = compositeStream.resourceData();
         assertThat(convertInputStreamToString(inputStream), is(parseXml(path)));
     }
@@ -244,8 +248,8 @@
         assertThat(annotation.value(), is("replace"));
 
         // encode test
-        CompositeStream compositeStream = xmlSerializer.encode(compositeData,
-                                                               context);
+        CompositeStream compositeStream = xmlSerializer.encode(
+                getNewCompositeData(compositeData), context);
         InputStream inputStream = compositeStream.resourceData();
         assertThat(convertInputStreamToString(inputStream), is(parseXml(path)));
     }
@@ -422,4 +426,54 @@
         }
         return sb.toString();
     }
+
+    private CompositeData getNewCompositeData(CompositeData data) {
+        List<AnnotatedNodeInfo> annotatedNodeInfos = data
+                .annotatedNodesInfo();
+        CompositeData.Builder newCompBuilder = DefaultCompositeData.builder()
+                .resourceData(data.resourceData());
+
+        if (annotatedNodeInfos != null && !annotatedNodeInfos.isEmpty()) {
+            for (AnnotatedNodeInfo annotatedNodeInfo : annotatedNodeInfos) {
+                AnnotatedNodeInfo.Builder newAnnoBuilder = DefaultAnnotatedNodeInfo
+                        .builder();
+                ResourceId id = annotatedNodeInfo.resourceId();
+                ResourceId.Builder newIdBuilder = ResourceId.builder();
+                List<NodeKey> keys = id.nodeKeys();
+                if (keys != null && !keys.isEmpty()) {
+                    for (NodeKey key : keys) {
+                        if (!key.schemaId().name().equals("/")) {
+                            SchemaId schemaId = key.schemaId();
+                            if (key instanceof LeafListKey) {
+                                newIdBuilder.addLeafListBranchPoint(
+                                        schemaId.name(), schemaId.namespace(),
+                                        ((LeafListKey) key).value());
+                            } else if (key instanceof ListKey) {
+                                newIdBuilder.addBranchPointSchema(
+                                        schemaId.name(), schemaId.namespace());
+                                List<KeyLeaf> listKeys = ((ListKey) key)
+                                        .keyLeafs();
+                                for (KeyLeaf listKey : listKeys) {
+                                    SchemaId keySchemaId = listKey.leafSchema();
+                                    newIdBuilder = newIdBuilder.addKeyLeaf(
+                                            keySchemaId.name(), keySchemaId.namespace(),
+                                            listKey.leafValue());
+                                }
+                            } else {
+                                newIdBuilder.addBranchPointSchema(
+                                        schemaId.name(), schemaId.namespace());
+                            }
+                        }
+                    }
+                }
+                newAnnoBuilder.resourceId(newIdBuilder.build());
+                List<Annotation> annotations = annotatedNodeInfo.annotations();
+                for (Annotation annotation : annotations) {
+                    newAnnoBuilder.addAnnotation(annotation);
+                }
+                newCompBuilder.addAnnotatedNodeInfo(newAnnoBuilder.build());
+            }
+        }
+        return newCompBuilder.build();
+    }
 }
