Binding codec v2 - fix get implemented interface as input of getCacheSerializer 82/62482/16
authorJie Han <han.jie@zte.com.cn>
Thu, 31 Aug 2017 07:36:22 +0000 (15:36 +0800)
committerRobert Varga <nite@hq.sk>
Wed, 7 Feb 2018 12:09:04 +0000 (12:09 +0000)
- The class of input is the intern class xxxImpl in Builder,
  it should be the interface, so we should call implementedInterface.
Change-Id: I880cb750cf418541c1f27849dec9c83b4eff8bf8
Signed-off-by: Jie Han <han.jie@zte.com.cn>
binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/serializer/CachingNormalizedNodeSerializer.java

index 0fd479c1baead23925055c75a9df6a78ceccbf90..b377e0e0e54276034d41509ad3ec4a24a30d07d1 100644 (file)
@@ -8,11 +8,13 @@
 package org.opendaylight.mdsal.binding.javav2.dom.codec.impl.serializer;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
 import java.io.IOException;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.cache.AbstractBindingNormalizedNodeCacheHolder;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.cache.BindingNormalizedNodeCache;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.context.base.DataContainerCodecContext;
+import org.opendaylight.mdsal.binding.javav2.spec.base.Instantiable;
 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
 import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingSerializer;
 import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingStreamEventWriter;
@@ -75,7 +77,11 @@ public final class CachingNormalizedNodeSerializer extends ForwardingBindingStre
      */
     @Override
     public NormalizedNode<?, ?> serialize(final TreeNode input) {
-        final BindingNormalizedNodeCache cachingSerializer = getCacheSerializer(input.getClass());
+        // Binding data input MUST be an instance of Instantiable too.
+        Preconditions.checkArgument(input instanceof Instantiable, "Input %s is not instantiable", input);
+
+        final BindingNormalizedNodeCache cachingSerializer =
+            getCacheSerializer(((Instantiable<?>) input).implementedInterface());
         if (cachingSerializer != null) {
             final NormalizedNode<?, ?> domData = cachingSerializer.get(input);
             domWriter.addChild(domData);