Exceptions should have two purposes: 1. Clean up after an error and 2. help you solve the issue. Sadly, many Java developers often forget about #2.
So you end up with an exception thrown in SignatureFileVerifier
(no source). Or even in a native method. The error message is:
Invalid signature file digest for Manifest main attributes
Right. Which tells us exactly … nothing. The stack trace isn’t better:
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:221) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:233) at java.util.jar.JarVerifier.update(JarVerifier.java:188) at java.util.jar.JarFile.initializeVerifier(JarFile.java:325) at java.util.jar.JarFile.getInputStream(JarFile.java:390) at sun.misc.URLClassPath$JarLoader$1.getInputStream(URLClassPath.java:620) at sun.misc.Resource.cachedInputStream(Resource.java:59) at sun.misc.Resource.getByteBuffer(Resource.java:84) at java.net.URLClassLoader.defineClass(URLClassLoader.java:249) at java.net.URLClassLoader.access$100(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at org.eclipse.jface.action.LegacyActionTools.initLocalizedModifiers(LegacyActionTools.java:699) at org.eclipse.jface.action.LegacyActionTools.findLocalizedModifier(LegacyActionTools.java:356) at org.eclipse.jface.action.LegacyActionTools.convertLocalizedAccelerator(LegacyActionTools.java:167) at org.eclipse.jface.action.Action.setText(Action.java:665) at de.pdark.epen.editor.actions.ForwardAction.(ForwardAction.java:29) at de.pdark.epen.editor.actions.ForwardActionTest.testCreate(ForwardActionTest.java:21)
So LegacyActionTools
needs a class. Which one? Since I don’t have the source, how can I set a breakpoint?
Simple: Set the breakpoint in the constructor of the exception! Even native code has to pass through here, eventually.