> Well, it would be more consistent to check for existence of protected or
> public serialVersionUID with Reflection API and change the serialver output
> accordingly.
Please see suggested fix and its output below.
Thanks,
-Yuri
$ serialver java.security.PublicKey
java.security.PublicKey: public static final long serialVersionUID =
7187392471159151072L;
$ serialver java.lang.Exception
java.lang.Exception: static final long serialVersionUID =
-3387516993124229948L;
$ serialver java.lang.AssertionError
java.lang.AssertionError: private static final long serialVersionUID =
-5013299493970297370L;
$ serialver javax.xml.ws.soap.SOAPFaultException
javax.xml.ws.soap.SOAPFaultException: private static final long
serialVersionUID = -104968645459360720L;
$ hg diff
diff --git a/src/share/classes/sun/tools/serialver/SerialVer.java
b/src/share/classes/sun/tools/serialver/SerialVer.java
--- a/src/share/classes/sun/tools/serialver/SerialVer.java
+++ b/src/share/classes/sun/tools/serialver/SerialVer.java
@@ -38,6 +38,7 @@
import java.net.MalformedURLException;
import java.util.StringTokenizer;
import sun.net.www.ParseUtil;
+import java.lang.reflect.Modifier;
public class SerialVer extends Applet {
GridBagLayout gb;
@@ -211,7 +212,17 @@
Class<?> cl = Class.forName(classname, false, loader);
ObjectStreamClass desc = ObjectStreamClass.lookup(cl);
if (desc != null) {
- return " static final long serialVersionUID = " +
+ String ams = "";
+ try {
+ final int mod =
+ cl.getDeclaredField("serialVersionUID").getModifiers();
+ ams = Modifier.isPublic(mod) ? "public"
+ : Modifier.isProtected(mod) ? "protected"
+ : Modifier.isPrivate(mod) ? "private" : "";
+ } catch (NoSuchFieldException nsfe) {
+ ams = "private";
+ }
+ return " " + ams + " static final long serialVersionUID = " +
desc.getSerialVersionUID() + "L;";
} else {
return null;