X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding2%2Fmdsal-binding2-dom-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fjavav2%2Fdom%2Fadapter%2Fimpl%2Foperation%2FRpcServiceAdapter.java;h=c30d2c8ebbfe974f2cefdcf9b5b96558108014a1;hb=0d133b38e4d0368ee9d15e39460440d044067228;hp=c6df3b681c1f6f1b2d707320c7ad2cd27eaa7e36;hpb=67d0d71b7218015f5eaf311d732a0db1dd079021;p=mdsal.git diff --git a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/RpcServiceAdapter.java b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/RpcServiceAdapter.java index c6df3b681c..c30d2c8ebb 100644 --- a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/RpcServiceAdapter.java +++ b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/RpcServiceAdapter.java @@ -8,8 +8,6 @@ package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.operation; import com.google.common.annotations.Beta; -import com.google.common.base.Function; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.Futures; @@ -19,7 +17,9 @@ import com.google.common.util.concurrent.MoreExecutors; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.util.Collection; import java.util.Map.Entry; +import java.util.Optional; import org.opendaylight.mdsal.binding.javav2.dom.adapter.extractor.ContextReferenceExtractor; import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec; @@ -33,6 +33,8 @@ import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.spi.RpcRoutingStrategy; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -152,8 +154,8 @@ class RpcServiceAdapter implements InvocationHandler { private ListenableFuture> invoke0(final SchemaPath schemaPath, final NormalizedNode input) { final ListenableFuture listenInPoolThread = JdkFutureAdapters.listenInPoolThread(delegate.invokeRpc(schemaPath, input)); - if (listenInPoolThread instanceof LazyDOMOperationResultFuture) { - return ((LazyDOMOperationResultFuture) listenInPoolThread).getBindingFuture(); + if (listenInPoolThread instanceof LazyDOMRpcResultFuture) { + return ((LazyDOMRpcResultFuture) listenInPoolThread).getBindingFuture(); } return transformFuture(schemaPath, listenInPoolThread, codec.getCodecFactory()); @@ -161,7 +163,7 @@ class RpcServiceAdapter implements InvocationHandler { private ListenableFuture> transformFuture(final SchemaPath rpc, final ListenableFuture domFuture, final BindingNormalizedNodeCodecRegistry resultCodec) { - return Futures.transform(domFuture, (Function>) input -> { + return Futures.transform(domFuture, input -> { final NormalizedNode domData = input.getResult(); final TreeNode bindingResult; if (domData != null) { @@ -170,10 +172,15 @@ class RpcServiceAdapter implements InvocationHandler { } else { bindingResult = null; } - return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build()); + + // DOMRpcResult does not have a notion of success, hence we have to reverse-engineer it by looking + // at reported errors and checking whether they are just warnings. + final Collection errors = input.getErrors(); + return RpcResult.class.cast(RpcResultBuilder.status(errors.stream() + .noneMatch(error -> error.getSeverity() == ErrorSeverity.ERROR)) + .withResult(bindingResult).withRpcErrors(errors).build()); }, MoreExecutors.directExecutor()); } - } private final class NonRoutedStrategy extends RpcInvocationStrategy { @@ -218,4 +225,4 @@ class RpcServiceAdapter implements InvocationHandler { } } -} \ No newline at end of file +}