From e5c67ba252d4e3f5a5c546ba523fefe880afc274 Mon Sep 17 00:00:00 2001 From: Igor Foltin Date: Fri, 3 Mar 2017 11:59:12 +0100 Subject: [PATCH 1/1] Bug 6856: Rpc definition should implicitly define input/output The yangtools patch for this bug required a minor change in mdsal's binding generator v1 to maintain compatibility. The mdsal patch has already been merged. The binding generator v1 now generates classes for input and output statement only if they are explicitly declared in the model. As a consequence, a minor adjustement has to be made in BindingToNormalizedNodeCodec's findRpcMethod(). This patch needs to be merged to unblock the distribution-check job in the yangtools patch. Change-Id: I6ed0e57aae35987ae943c8aa7a4a79861af04f7a Signed-off-by: Igor Foltin --- .../sal/binding/impl/BindingToNormalizedNodeCodec.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index fd9eec6337..7b8d8c70f7 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -50,12 +50,15 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; 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; @@ -323,13 +326,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; + } + private BindingRuntimeContext runtimeContext() { return futureSchema.runtimeContext(); } -- 2.36.6