X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fadapter%2FBindingToNormalizedNodeCodec.java;h=de91580e18cbe3159aff6e16097cd4cbd3dc754a;hb=ea12e80106a48a60c9eb61e5d19def4d493c7755;hp=c1a3e13c33f2a9dfb51b9aefff60d83682ccb9d0;hpb=e54d13bf867f7f7ff392b5746f028a6743717417;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java index c1a3e13c33..de91580e18 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java @@ -49,6 +49,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; @@ -56,6 +57,8 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,7 +75,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto .softValues().build(new CacheLoader, YangInstanceIdentifier>() { @Override - public YangInstanceIdentifier load(final InstanceIdentifier key) throws Exception { + public YangInstanceIdentifier load(@Nonnull final InstanceIdentifier key) throws Exception { return toYangInstanceIdentifierBlocking(key); } @@ -97,7 +100,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto try { return codecRegistry.toYangInstanceIdentifier(binding); } catch (final MissingSchemaException e) { - waitForSchema(decompose(binding),e); + waitForSchema(decompose(binding), e); return codecRegistry.toYangInstanceIdentifier(binding); } } @@ -117,7 +120,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto } @Override - public YangInstanceIdentifier toYangInstanceIdentifier(final InstanceIdentifier binding) { + public YangInstanceIdentifier toYangInstanceIdentifier(@Nonnull final InstanceIdentifier binding) { return codecRegistry.toYangInstanceIdentifier(binding); } @@ -153,33 +156,34 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto } @Override - public Entry, DataObject> fromNormalizedNode(final YangInstanceIdentifier path, + public Entry, DataObject> fromNormalizedNode(@Nonnull final YangInstanceIdentifier path, final NormalizedNode data) { return codecRegistry.fromNormalizedNode(path, data); } @Override - public Notification fromNormalizedNodeNotification(final SchemaPath path, final ContainerNode data) { + public Notification fromNormalizedNodeNotification(@Nonnull final SchemaPath path, + @Nonnull final ContainerNode data) { return codecRegistry.fromNormalizedNodeNotification(path, data); } @Override - public DataObject fromNormalizedNodeRpcData(final SchemaPath path, final ContainerNode data) { + public DataObject fromNormalizedNodeRpcData(@Nonnull final SchemaPath path, @Nonnull final ContainerNode data) { return codecRegistry.fromNormalizedNodeRpcData(path, data); } @Override - public InstanceIdentifier fromYangInstanceIdentifier(final YangInstanceIdentifier dom) { + public InstanceIdentifier fromYangInstanceIdentifier(@Nonnull final YangInstanceIdentifier dom) { return codecRegistry.fromYangInstanceIdentifier(dom); } @Override - public ContainerNode toNormalizedNodeNotification(final Notification data) { + public ContainerNode toNormalizedNodeNotification(@Nonnull final Notification data) { return codecRegistry.toNormalizedNodeNotification(data); } @Override - public ContainerNode toNormalizedNodeRpcData(final DataContainer data) { + public ContainerNode toNormalizedNodeRpcData(@Nonnull final DataContainer data) { return codecRegistry.toNormalizedNodeRpcData(data); } @@ -195,7 +199,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto public Optional> toBinding(final YangInstanceIdentifier normalized) throws DeserializationException { try { - return Optional.>fromNullable(codecRegistry.fromYangInstanceIdentifier(normalized)); + return Optional.fromNullable(codecRegistry.fromYangInstanceIdentifier(normalized)); } catch (final IllegalArgumentException e) { return Optional.absent(); } @@ -255,7 +259,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto // FIXME: This should be probably part of Binding Runtime context public ImmutableBiMap getRpcMethodToSchemaPath(final Class key) { final Module module = getModuleBlocking(key); - final ImmutableBiMap.Builder ret = ImmutableBiMap.builder(); + final ImmutableBiMap.Builder ret = ImmutableBiMap.builder(); try { for (final RpcDefinition rpcDef : module.getRpcs()) { final Method method = findRpcMethod(key, rpcDef); @@ -309,13 +313,18 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto private Method findRpcMethod(final Class key, final RpcDefinition rpcDef) throws NoSuchMethodException { final String methodName = BindingMapping.getMethodName(rpcDef.getQName()); - if(rpcDef.getInput() != null) { + if (rpcDef.getInput() != null && isExplicitStatement(rpcDef.getInput())) { final Class inputClz = runtimeContext.getClassForSchema(rpcDef.getInput()); return key.getMethod(methodName, inputClz); } return key.getMethod(methodName); } + private static boolean isExplicitStatement(final ContainerSchemaNode node) { + return node instanceof EffectiveStatement + && ((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION; + } + @Override public BindingCodecTree create(final BindingRuntimeContext context) { return codecRegistry.create(context);