From 6a32d897d2dcb4fa54977b3b2defe76dc0a5d5e2 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 3 Jun 2019 21:12:44 +0200 Subject: [PATCH] Remove use of thread-local output All callers can be safely migrated to using a non-shared writer, as they all are expected to be apex implementations. JIRA: CONTROLLER-1888 Change-Id: I87cfa1d3ec415b79c40c29a91ccbd8da2869b27a Signed-off-by: Robert Varga --- .../stream/NormalizedNodeDataOutput.java | 13 ++- .../node/utils/stream/SerializationUtils.java | 84 ++++++++----------- .../utils/stream/SerializationUtilsTest.java | 16 ++-- .../datastore/messages/AbstractRead.java | 8 +- .../datastore/messages/ReadDataReply.java | 12 +-- .../RegisterDataTreeChangeListener.java | 10 ++- .../modification/DeleteModification.java | 4 +- .../modification/WriteModification.java | 5 +- .../MetadataShardDataTreeSnapshot.java | 2 +- .../remote/rpc/messages/ExecuteRpc.java | 9 +- .../remote/rpc/messages/RpcResponse.java | 9 +- 11 files changed, 89 insertions(+), 83 deletions(-) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataOutput.java index 7c42da1823..dd267a0bfa 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataOutput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataOutput.java @@ -10,6 +10,8 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import com.google.common.annotations.Beta; import java.io.DataOutput; import java.io.IOException; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -21,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; */ @Beta public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput { - void writeNormalizedNode(NormalizedNode normalizedNode) throws IOException; + void writeNormalizedNode(@NonNull NormalizedNode normalizedNode) throws IOException; void writePathArgument(PathArgument pathArgument) throws IOException; @@ -31,4 +33,13 @@ public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput { @Override void close() throws IOException; + + default void writeOptionalNormalizedNode(final @Nullable NormalizedNode normalizedNode) throws IOException { + if (normalizedNode != null) { + writeBoolean(true); + writeNormalizedNode(normalizedNode); + } else { + writeBoolean(false); + } + } } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java index 7e0de62111..4d01702215 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java @@ -7,12 +7,13 @@ */ package org.opendaylight.controller.cluster.datastore.node.utils.stream; -import com.google.common.base.Preconditions; import java.io.ByteArrayInputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutput; import java.io.IOException; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -22,7 +23,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * @author Thomas Pantelis */ public final class SerializationUtils { - public static final ThreadLocal REUSABLE_WRITER_TL = new ThreadLocal<>(); public static final ThreadLocal REUSABLE_READER_TL = new ThreadLocal<>(); private SerializationUtils() { @@ -32,16 +32,7 @@ public final class SerializationUtils { void apply(T instance, YangInstanceIdentifier path, NormalizedNode node); } - private static NormalizedNodeDataOutput streamWriter(DataOutput out) { - NormalizedNodeDataOutput streamWriter = REUSABLE_WRITER_TL.get(); - if (streamWriter == null) { - streamWriter = NormalizedNodeInputOutput.newDataOutput(out); - } - - return streamWriter; - } - - private static NormalizedNodeDataInput streamReader(DataInput in) throws IOException { + private static NormalizedNodeDataInput streamReader(final DataInput in) throws IOException { NormalizedNodeDataInput streamReader = REUSABLE_READER_TL.get(); if (streamReader == null) { streamReader = NormalizedNodeInputOutput.newDataInput(in); @@ -50,21 +41,7 @@ public final class SerializationUtils { return streamReader; } - public static void serializePathAndNode(YangInstanceIdentifier path, NormalizedNode node, - DataOutput out) { - Preconditions.checkNotNull(path); - Preconditions.checkNotNull(node); - try { - NormalizedNodeDataOutput streamWriter = streamWriter(out); - streamWriter.writeNormalizedNode(node); - streamWriter.writeYangInstanceIdentifier(path); - } catch (IOException e) { - throw new IllegalArgumentException(String.format("Error serializing path %s and Node %s", - path, node), e); - } - } - - public static void deserializePathAndNode(DataInput in, T instance, Applier applier) { + public static void deserializePathAndNode(final DataInput in, final T instance, final Applier applier) { try { NormalizedNodeDataInput streamReader = streamReader(in); NormalizedNode node = streamReader.readNormalizedNode(); @@ -75,7 +52,7 @@ public final class SerializationUtils { } } - private static NormalizedNode tryDeserializeNormalizedNode(DataInput in) throws IOException { + private static NormalizedNode tryDeserializeNormalizedNode(final DataInput in) throws IOException { boolean present = in.readBoolean(); if (present) { NormalizedNodeDataInput streamReader = streamReader(in); @@ -85,7 +62,7 @@ public final class SerializationUtils { return null; } - public static NormalizedNode deserializeNormalizedNode(DataInput in) { + public static NormalizedNode deserializeNormalizedNode(final DataInput in) { try { return tryDeserializeNormalizedNode(in); } catch (IOException e) { @@ -93,7 +70,7 @@ public final class SerializationUtils { } } - public static NormalizedNode deserializeNormalizedNode(byte [] bytes) { + public static NormalizedNode deserializeNormalizedNode(final byte [] bytes) { try { return tryDeserializeNormalizedNode(new DataInputStream(new ByteArrayInputStream(bytes))); } catch (IOException e) { @@ -101,30 +78,43 @@ public final class SerializationUtils { } } - public static void serializeNormalizedNode(NormalizedNode node, DataOutput out) { - try { - out.writeBoolean(node != null); - if (node != null) { - NormalizedNodeDataOutput streamWriter = streamWriter(out); - streamWriter.writeNormalizedNode(node); + public static void writeNormalizedNode(final DataOutput out, final @Nullable NormalizedNode node) + throws IOException { + if (node != null) { + out.writeBoolean(true); + + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + stream.writeNormalizedNode(node); } - } catch (IOException e) { - throw new IllegalArgumentException(String.format("Error serializing NormalizedNode %s", - node), e); + } else { + out.writeBoolean(false); } } - public static void serializePath(YangInstanceIdentifier path, DataOutput out) { - Preconditions.checkNotNull(path); - try { - NormalizedNodeDataOutput streamWriter = streamWriter(out); - streamWriter.writeYangInstanceIdentifier(path); - } catch (IOException e) { - throw new IllegalArgumentException(String.format("Error serializing path %s", path), e); + public static void writePath(final DataOutput out, final @NonNull YangInstanceIdentifier path) + throws IOException { + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + stream.writeYangInstanceIdentifier(path); + } + } + + public static void writeNodeAndPath(final DataOutput out, final YangInstanceIdentifier path, + final NormalizedNode node) throws IOException { + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + stream.writeNormalizedNode(node); + stream.writeYangInstanceIdentifier(path); + } + } + + public static void writePathAndNode(final DataOutput out, final YangInstanceIdentifier path, + final NormalizedNode node) throws IOException { + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + stream.writeYangInstanceIdentifier(path); + stream.writeNormalizedNode(node); } } - public static YangInstanceIdentifier deserializePath(DataInput in) { + public static YangInstanceIdentifier deserializePath(final DataInput in) { try { NormalizedNodeDataInput streamReader = streamReader(in); return streamReader.readYangInstanceIdentifier(); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java index 25b4f2a3e8..8affb4296d 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java @@ -13,6 +13,7 @@ import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutput; import java.io.DataOutputStream; +import java.io.IOException; import java.nio.charset.Charset; import java.util.Arrays; import java.util.Set; @@ -47,11 +48,10 @@ public class SerializationUtilsTest { private static final QName CONTAINER_Q_NAME = QName.create("ns-1", "2017-03-17", "container1"); @Test - public void testSerializeDeserializeNodes() { + public void testSerializeDeserializeNodes() throws IOException { final NormalizedNode normalizedNode = createNormalizedNode(); final byte[] bytes = serializeNormalizedNode(normalizedNode); Assert.assertEquals(normalizedNode, SerializationUtils.deserializeNormalizedNode(bytes)); - } @Test @@ -72,7 +72,7 @@ public class SerializationUtilsTest { } @Test - public void testSerializeDeserializePath() { + public void testSerializeDeserializePath() throws IOException { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final DataOutput out = new DataOutputStream(bos); final YangInstanceIdentifier path = YangInstanceIdentifier.builder() @@ -81,19 +81,19 @@ public class SerializationUtilsTest { .node(listId("list1", "keyName1", "keyValue1")) .node(leafSetId("leafSer1", "leafSetValue1")) .build(); - SerializationUtils.serializePath(path, out); + SerializationUtils.writePath(out, path); final YangInstanceIdentifier deserialized = SerializationUtils.deserializePath(new DataInputStream(new ByteArrayInputStream(bos.toByteArray()))); Assert.assertEquals(path, deserialized); } @Test - public void testSerializeDeserializePathAndNode() { + public void testSerializeDeserializePathAndNode() throws IOException { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final DataOutput out = new DataOutputStream(bos); final NormalizedNode node = createNormalizedNode(); final YangInstanceIdentifier path = YangInstanceIdentifier.create(id("container1")); - SerializationUtils.serializePathAndNode(path, node, out); + SerializationUtils.writeNodeAndPath(out, path, node); final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bos.toByteArray())); final AtomicBoolean applierCalled = new AtomicBoolean(false); SerializationUtils.deserializePathAndNode(in, applierCalled, (instance, deserializedPath, deserializedNode) -> { @@ -104,9 +104,9 @@ public class SerializationUtilsTest { Assert.assertTrue(applierCalled.get()); } - private static byte[] serializeNormalizedNode(final NormalizedNode node) { + private static byte[] serializeNormalizedNode(final NormalizedNode node) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); - SerializationUtils.serializeNormalizedNode(node, new DataOutputStream(bos)); + SerializationUtils.writeNormalizedNode(new DataOutputStream(bos), node); return bos.toByteArray(); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/AbstractRead.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/AbstractRead.java index 94e1a3779c..5b92545c82 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/AbstractRead.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/AbstractRead.java @@ -41,18 +41,18 @@ public abstract class AbstractRead extends VersionedExternalizableMessage { } @Override - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); path = SerializationUtils.deserializePath(in); } @Override - public void writeExternal(ObjectOutput out) throws IOException { + public void writeExternal(final ObjectOutput out) throws IOException { super.writeExternal(out); - SerializationUtils.serializePath(path, out); + SerializationUtils.writePath(out, path); } - public AbstractRead asVersion(short version) { + public AbstractRead asVersion(final short version) { return version == getVersion() ? this : newInstance(version); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java index eda5c26280..93bf2ece0c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadDataReply.java @@ -22,7 +22,7 @@ public class ReadDataReply extends VersionedExternalizableMessage { public ReadDataReply() { } - public ReadDataReply(NormalizedNode normalizedNode, short version) { + public ReadDataReply(final NormalizedNode normalizedNode, final short version) { super(version); this.normalizedNode = normalizedNode; } @@ -32,22 +32,22 @@ public class ReadDataReply extends VersionedExternalizableMessage { } @Override - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); normalizedNode = SerializationUtils.deserializeNormalizedNode(in); } @Override - public void writeExternal(ObjectOutput out) throws IOException { + public void writeExternal(final ObjectOutput out) throws IOException { super.writeExternal(out); - SerializationUtils.serializeNormalizedNode(normalizedNode, out); + SerializationUtils.writeNormalizedNode(out, normalizedNode); } - public static ReadDataReply fromSerializable(Object serializable) { + public static ReadDataReply fromSerializable(final Object serializable) { return (ReadDataReply) serializable; } - public static boolean isSerializedType(Object message) { + public static boolean isSerializedType(final Object message) { return message instanceof ReadDataReply; } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/RegisterDataTreeChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/RegisterDataTreeChangeListener.java index f790d1d4b2..83542a0de2 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/RegisterDataTreeChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/RegisterDataTreeChangeListener.java @@ -7,9 +7,10 @@ */ package org.opendaylight.controller.cluster.datastore.messages; +import static java.util.Objects.requireNonNull; + import akka.actor.ActorPath; import akka.actor.ActorRef; -import com.google.common.base.Preconditions; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; @@ -23,6 +24,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; */ public final class RegisterDataTreeChangeListener implements Externalizable { private static final long serialVersionUID = 1L; + private ActorRef dataTreeChangeListenerPath; private YangInstanceIdentifier path; private boolean registerOnAllInstances; @@ -33,8 +35,8 @@ public final class RegisterDataTreeChangeListener implements Externalizable { public RegisterDataTreeChangeListener(final YangInstanceIdentifier path, final ActorRef dataTreeChangeListenerPath, final boolean registerOnAllInstances) { - this.path = Preconditions.checkNotNull(path); - this.dataTreeChangeListenerPath = Preconditions.checkNotNull(dataTreeChangeListenerPath); + this.path = requireNonNull(path); + this.dataTreeChangeListenerPath = requireNonNull(dataTreeChangeListenerPath); this.registerOnAllInstances = registerOnAllInstances; } @@ -53,7 +55,7 @@ public final class RegisterDataTreeChangeListener implements Externalizable { @Override public void writeExternal(final ObjectOutput out) throws IOException { out.writeObject(dataTreeChangeListenerPath); - SerializationUtils.serializePath(path, out); + SerializationUtils.writePath(out, path); out.writeBoolean(registerOnAllInstances); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/DeleteModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/DeleteModification.java index ce4108dc7f..d34a44385e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/DeleteModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/DeleteModification.java @@ -62,8 +62,8 @@ public class DeleteModification extends AbstractModification { } @Override - public void writeExternal(final ObjectOutput out) { - SerializationUtils.serializePath(getPath(), out); + public void writeExternal(final ObjectOutput out) throws IOException { + SerializationUtils.writePath(out, getPath()); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/WriteModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/WriteModification.java index 63fa74069a..8261a5c3f0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/WriteModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/WriteModification.java @@ -72,8 +72,8 @@ public class WriteModification extends AbstractModification { } @Override - public void writeExternal(final ObjectOutput out) { - SerializationUtils.serializePathAndNode(getPath(), data, out); + public void writeExternal(final ObjectOutput out) throws IOException { + SerializationUtils.writeNodeAndPath(out, getPath(), data); } public static WriteModification fromStream(final NormalizedNodeDataInput in, final short version) @@ -83,6 +83,7 @@ public class WriteModification extends AbstractModification { return new WriteModification(version, path, node); } + @Override public void writeTo(final NormalizedNodeDataOutput out) throws IOException { // FIXME: this should be inverted, as the path helps receivers in establishment of context out.writeNormalizedNode(data); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MetadataShardDataTreeSnapshot.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MetadataShardDataTreeSnapshot.java index 05dc4cc398..fa8877fd9f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MetadataShardDataTreeSnapshot.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MetadataShardDataTreeSnapshot.java @@ -59,7 +59,7 @@ public final class MetadataShardDataTreeSnapshot extends AbstractVersionedShardD out.writeObject(m); } - SerializationUtils.serializeNormalizedNode(rootNode, out); + SerializationUtils.writeNormalizedNode(out, rootNode); } @Override diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/ExecuteRpc.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/ExecuteRpc.java index dca81dc0b7..e32ef3dc0d 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/ExecuteRpc.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/ExecuteRpc.java @@ -72,18 +72,19 @@ public final class ExecuteRpc implements Serializable { public Proxy() { } - Proxy(ExecuteRpc executeRpc) { + Proxy(final ExecuteRpc executeRpc) { this.executeRpc = executeRpc; } @Override - public void writeExternal(ObjectOutput out) throws IOException { + public void writeExternal(final ObjectOutput out) throws IOException { + // FIXME: QName is a WritableObject out.writeObject(executeRpc.getRpc()); - SerializationUtils.serializeNormalizedNode(executeRpc.getInputNormalizedNode(), out); + SerializationUtils.writeNormalizedNode(out, executeRpc.getInputNormalizedNode()); } @Override - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { QName qname = (QName) in.readObject(); executeRpc = new ExecuteRpc(SerializationUtils.deserializeNormalizedNode(in), qname); } diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/RpcResponse.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/RpcResponse.java index 02d0f1f185..35e5611781 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/RpcResponse.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/RpcResponse.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.remote.rpc.messages; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.Externalizable; +import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Serializable; @@ -47,17 +48,17 @@ public class RpcResponse implements Serializable { public Proxy() { } - Proxy(RpcResponse rpcResponse) { + Proxy(final RpcResponse rpcResponse) { this.rpcResponse = rpcResponse; } @Override - public void writeExternal(ObjectOutput out) { - SerializationUtils.serializeNormalizedNode(rpcResponse.getResultNormalizedNode(), out); + public void writeExternal(final ObjectOutput out) throws IOException { + SerializationUtils.writeNormalizedNode(out, rpcResponse.getResultNormalizedNode()); } @Override - public void readExternal(ObjectInput in) { + public void readExternal(final ObjectInput in) { rpcResponse = new RpcResponse(SerializationUtils.deserializeNormalizedNode(in)); } -- 2.36.6