X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcds-access-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Faccess%2Fconcepts%2FRequestFailure.java;h=7204912669cabf88596be24a5e82e385a4e1dcaf;hb=HEAD;hp=db5a15b0bc57c5cda03bfd05ffaed53db7550024;hpb=b4bf55727093657662d8c16a50fa85f87978a586;p=controller.git diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestFailure.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestFailure.java index db5a15b0bc..7204912669 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestFailure.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestFailure.java @@ -9,8 +9,10 @@ package org.opendaylight.controller.cluster.access.concepts; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.access.ABIVersion; import org.opendaylight.yangtools.concepts.WritableIdentifier; @@ -18,14 +20,33 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier; /** * A failure response to a {@link Request}. Contains a {@link RequestException} detailing the cause for this failure. * - * @author Robert Varga - * * @param Target identifier type * @param Message class */ -@Beta public abstract class RequestFailure> extends Response { + /** + * Externalizable proxy for use with {@link RequestFailure} subclasses. + * + * @param Target identifier type + */ + protected interface SerialForm> + extends Message.SerialForm { + @Override + default C readExternal(final ObjectInput in, final T target, final long sequence) + throws IOException, ClassNotFoundException { + return createFailure(target, sequence, (RequestException) in.readObject()); + } + + @Override + default void writeExternal(final ObjectOutput out, final C msg) throws IOException { + out.writeObject(msg.getCause()); + } + + @NonNull C createFailure(@NonNull T target, long sequence, @NonNull RequestException failureCause); + } + + @java.io.Serial private static final long serialVersionUID = 1L; private final @NonNull RequestException cause; @@ -65,5 +86,5 @@ public abstract class RequestFailure externalizableProxy(ABIVersion version); + protected abstract SerialForm externalizableProxy(ABIVersion version); }