--- a/jdk/src/share/classes/javax/management/remote/NotificationResult.java Fri Jun 14 15:49:54 2013 +0100
+++ b/jdk/src/share/classes/javax/management/remote/NotificationResult.java Thu Jun 20 08:51:47 2013 +0200
@@ -25,6 +25,9 @@
package javax.management.remote;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
import java.io.Serializable;
/**
@@ -76,17 +79,7 @@
public NotificationResult(long earliestSequenceNumber,
long nextSequenceNumber,
TargetedNotification[] targetedNotifications) {
- if (targetedNotifications == null) {
- final String msg = "Notifications null";
- throw new IllegalArgumentException(msg);
- }
-
- if (earliestSequenceNumber < 0 || nextSequenceNumber < 0)
- throw new IllegalArgumentException("Bad sequence numbers");
- /* We used to check nextSequenceNumber >= earliestSequenceNumber
- here. But in fact the opposite can legitimately be true if
- notifications have been lost. */
-
+ validate(targetedNotifications, earliestSequenceNumber, nextSequenceNumber);
this.earliestSequenceNumber = earliestSequenceNumber;
this.nextSequenceNumber = nextSequenceNumber;
this.targetedNotifications = (targetedNotifications.length == 0 ? targetedNotifications : targetedNotifications.clone());
@@ -138,7 +131,39 @@
getTargetedNotifications().length;
}
- private final long earliestSequenceNumber;
- private final long nextSequenceNumber;
- private final TargetedNotification[] targetedNotifications;
+ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+ ObjectInputStream.GetField gf = ois.readFields();
+ TargetedNotification[] tNotifs = (TargetedNotification[])gf.get("targetedNotifications", null);
+ long snStart = gf.get("earliestSequenceNumber", -1L);
+ long snNext = gf.get("nextSequenceNumber", -1L);
+ try {
+ validate(tNotifs, snStart, snNext);
+
+ this.targetedNotifications = tNotifs.length == 0 ? tNotifs : tNotifs.clone();
+ this.earliestSequenceNumber = snStart;
+ this.nextSequenceNumber = snNext;
+ } catch (IllegalArgumentException e) {
+ throw new InvalidObjectException(e.getMessage());
+ }
+ }
+
+ private long earliestSequenceNumber;
+ private long nextSequenceNumber;
+ private TargetedNotification[] targetedNotifications;
+
+ private static void validate(TargetedNotification[] targetedNotifications,
+ long earliestSequenceNumber,
+ long nextSequenceNumber)
+ throws IllegalArgumentException {
+ if (targetedNotifications == null) {
+ final String msg = "Notifications null";
+ throw new IllegalArgumentException(msg);
+ }
+
+ if (earliestSequenceNumber < 0 || nextSequenceNumber < 0)
+ throw new IllegalArgumentException("Bad sequence numbers");
+ /* We used to check nextSequenceNumber >= earliestSequenceNumber
+ here. But in fact the opposite can legitimately be true if
+ notifications have been lost. */
+ }
}