From: Igor Foltin Date: Fri, 3 Mar 2017 10:59:12 +0000 (+0100) Subject: Bug 6856: Rpc definition should implicitly define input/output X-Git-Tag: release/carbon~196 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=e5c67ba252d4e3f5a5c546ba523fefe880afc274;hp=2013a889903939f0d3ae48c84803efa6b60e882c 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 --- 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(); }