X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FDataObjectStreamerGenerator.java;h=5a3bc3d22908234d0adf63d896bb6b4e1dd7a079;hb=12b665bc9f60d2acdfb38549a091848338b1d38b;hp=f601b0628c5baa9f0cfb7e180ff0e2b4377a7d6b;hpb=2b1823cca8327eeb762ccb4ec2cc6a6b8a77555c;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java index f601b0628c..5a3bc3d229 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java @@ -144,7 +144,7 @@ final class DataObjectStreamerGenerator> impleme BindingStreamEventWriter.class, List.class); private static final StackManipulation STREAM_MAP = invokeMethod(DataObjectStreamer.class, "streamMap", Class.class, DataObjectStreamer.class, DataObjectSerializerRegistry.class, - BindingStreamEventWriter.class, List.class); + BindingStreamEventWriter.class, Map.class); private static final StackManipulation STREAM_ORDERED_MAP = invokeMethod(DataObjectStreamer.class, "streamOrderedMap", Class.class, DataObjectStreamer.class, DataObjectSerializerRegistry.class, BindingStreamEventWriter.class, List.class); @@ -257,14 +257,17 @@ final class DataObjectStreamerGenerator> impleme final String getterName = getter.getName(); final Type childType = props.get(getterName); verify(childType instanceof ParameterizedType, "Unexpected type %s for %s", childType, getterName); - final Type valueType = ((ParameterizedType) childType).getActualTypeArguments()[0]; + final Type[] params = ((ParameterizedType) childType).getActualTypeArguments(); + final ListSchemaNode listSchema = (ListSchemaNode) childSchema; final Class valueClass; - try { - valueClass = loader.loadClass(valueType.getFullyQualifiedName()); - } catch (ClassNotFoundException e) { - throw new LinkageError("Failed to load " + valueType, e); + if (!listSchema.isUserOrdered() && !listSchema.getKeyDefinition().isEmpty()) { + loadTypeClass(loader, params[0]); + valueClass = loadTypeClass(loader, params[1]); + } else { + valueClass = loadTypeClass(loader, params[0]); } - return listChildStream(getter, valueClass.asSubclass(DataObject.class), (ListSchemaNode) childSchema); + + return listChildStream(getter, valueClass.asSubclass(DataObject.class), listSchema); } if (childSchema instanceof ChoiceSchemaNode) { return choiceChildStream(getter); @@ -374,6 +377,14 @@ final class DataObjectStreamerGenerator> impleme } } + private static Class loadTypeClass(final CodecClassLoader loader, final Type type) { + try { + return loader.loadClass(type.getFullyQualifiedName()); + } catch (ClassNotFoundException e) { + throw new LinkageError("Failed to load " + type, e); + } + } + private static final class SerializeImplementation implements Implementation { private final List children; private final StackManipulation startEvent;