Tighten up RpcInvocationStrategy 35/103335/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 23 Nov 2022 16:36:36 +0000 (17:36 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 24 Nov 2022 14:35:58 +0000 (15:35 +0100)
The invoke path is always taking RpcInput, make sure we cast it that
way, preventing potential confusion.

Change-Id: I8ec00eb4b4074b60b36abfe57948806a11634aad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/RpcInvocationStrategy.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/RpcServiceAdapter.java

index 8a37d5dd0f31c2f70ce21f8d66f228adf1c8a7cb..5dbcf677c90d3340fa4c9fdef491b9e2250d9cea 100644 (file)
@@ -17,6 +17,7 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.YangConstants;
@@ -39,7 +40,7 @@ sealed class RpcInvocationStrategy {
 
         @Override
         ContainerNode serialize(final NodeIdentifier inputIdentifier, final CurrentAdapterSerializer serializer,
-                final DataObject input) {
+                final RpcInput input) {
             final var bindingII = refExtractor.extract(input);
             if (bindingII == null) {
                 return super.serialize(inputIdentifier, serializer, input);
@@ -62,7 +63,7 @@ sealed class RpcInvocationStrategy {
         inputIdentifier = NodeIdentifier.create(YangConstants.operationInputQName(namespace.intern()));
     }
 
-    final ListenableFuture<RpcResult<?>> invoke(final DataObject input) {
+    final ListenableFuture<RpcResult<?>> invoke(final RpcInput input) {
         return invoke(serialize(inputIdentifier, adapter.currentSerializer(), input));
     }
 
@@ -75,7 +76,7 @@ sealed class RpcInvocationStrategy {
     }
 
     ContainerNode serialize(final @NonNull NodeIdentifier identifier,
-            final @NonNull CurrentAdapterSerializer serializer, final DataObject input) {
+            final @NonNull CurrentAdapterSerializer serializer, final RpcInput input) {
         return LazySerializedContainerNode.create(inputIdentifier, input, serializer);
     }
 
index 3b0a6fc920779cb54ed9a17721e4161db24bb72a..8daa05abafe8c5525b3402368e74dfbafd228cb1 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.spi.ContentRoutedRpcContext;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
 
@@ -100,10 +100,7 @@ class RpcServiceAdapter implements InvocationHandler {
     public Object invoke(final Object proxy, final Method method, final Object[] args) {
         final var strategy = rpcNames.get(method);
         if (strategy != null) {
-            if (args.length != 1) {
-                throw new IllegalArgumentException("Input must be provided.");
-            }
-            return strategy.invoke((DataObject) requireNonNull(args[0]));
+            return strategy.invoke((RpcInput) requireNonNull(args[0]));
         }
 
         switch (method.getName()) {