Am 26.08.2011 08:32, schrieb Peter Jones:
On Aug 25, 2011, at 8:00 PM, Sebastian Sickelmann wrote:
Am 26.08.2011 00:24, schrieb Sebastian Sickelmann:
Am 26.08.2011 00:03, schrieb Sebastian Sickelmann:
I have found more places in jdk source where an Exception has a private cause 
field.

share/classes/javax/management/remote/JMXProviderException.java:    private 
Throwable cause = null;
share/classes/javax/xml/crypto/KeySelectorException.java:    private Throwable 
cause;
share/classes/javax/xml/crypto/NoSuchMechanismException.java:    private 
Throwable cause;
share/classes/javax/xml/crypto/MarshalException.java:    private Throwable 
cause;
share/classes/javax/xml/crypto/dsig/XMLSignatureException.java:    private 
Throwable cause;
share/classes/javax/xml/crypto/dsig/TransformException.java:    private 
Throwable cause;
share/classes/javax/xml/crypto/URIReferenceException.java:    private Throwable 
cause;

7081804 handles NoSuchMechanismException.
Is there a way to expand it to at least the xml/crypto/**/* Exceptions?
JMXProviderException should be fine too.

I would create a CR for the changes to me made to change and test this.
Would it be good to have some utility-code in Throwable to don't introduce to 
much code-duplication?

-- Sebastian
After a very quick analysis i think i found more candidates for removing 
private causes.
share/classes/javax/security/sasl/SaslException.java:    private Throwable 
_exception;
share/classes/java/lang/reflect/UndeclaredThrowableException.java:    private 
Throwable undeclaredThrowable;
share/classes/java/lang/reflect/InvocationTargetException.java:    private 
Throwable target;
share/classes/java/lang/ClassNotFoundException.java:    private Throwable ex;
share/classes/com/sun/java/browser/dom/DOMAccessException.java:    private 
Throwable ex;
share/classes/com/sun/java/browser/dom/DOMUnsupportedException.java:    private 
Throwable ex;
share/classes/javax/naming/NamingException.java:    protected Throwable 
rootException = null;
share/classes/java/rmi/RemoteException.java:    public Throwable detail;
share/classes/java/rmi/activation/ActivationException.java:    public Throwable 
detail;

Some of them need deeper inspection. Some of them are the same as the above 
noted Exceptions in xml/crypto package.

- Sebastian
OK. Webrev is there: 
http://oss-patches.24.eu/openjdk8/NoSuchMechanismException/REBASED_ON_8018d541a7b2_2/

Can someone review this?
Sebastian,

Public fields like RemoteException.detail, ill-advised as they may have been, 
cannot be removed (would break binary compatibility).
Sorry for that. It was more a reflex (remove "evil" public fields) than a real problem with this. Breaking this would breaking binary compatibility but can this be a real show-stopper for not fixing this? But you are right. Changes with binary incompatibility should be done really carefully.
This change proposes additions to the public API (subclass interface) of 
java.lang.Throwable, which would need additional approval process.  Without 
getting into detailed design critique, the proposed protected methods seem to 
add subtle complexity to the subclass interface of this central class, which 
leads me to:

Is there a particular problem that these changes are attempting to address?  
Many of these exception classes had cause-like fields prior to the addition of 
Throwable.cause in 1.4, and as described in their class docs, for 1.4 they were 
each retrofitted, with some care, to work well with the general cause APIs 
added to Throwable.  (Also see the doc for Throwable.getCause, which describes 
how subclasses can override it to take responsibility for their causes.)

These changes seem to be about implementing an alternate approach to that 
retrofitting, with considerably higher complexity (serialized form 
compatibility code) and risk, and I don't understand why-- I don't see a 
motivation discussed earlier on core-libs-dev?
Discussion started at core-libs-dev in another threads[1]. The main-reason was to chain more Exceptions together where possible. I changed the NoSuchMechanismException in javax.xml.crypto while try to chain more Exceptions that extends RuntimeException. I just removed the field, Alan noted that this would change to compatibility and said that this CR should be discussed at security-dev. Additionally he created a bug "7081804: Remove cause field from javax.xml.crypto.NoSuchMechnismException"[3]

The changes for chained-exceptions in Throwable made to javax/xml/crypto/*Exceptions are not done so well as in the other cases here. So i tried to fix it like here[2].

Alternatively i could fix javax/xml/crypto by adopting the solution used in the other cases.

The question i have is what is the best solution that should used. Changing the serialization thought custom serialization or through using the solution used in the other cases? I think we should only have one solution to address this.
Cheers,

-- Peter

-- Sebastian

[1] http://mail.openjdk.java.net/pipermail/core-libs-dev/2011-August/007462.html [2] http://oss-patches.24.eu/openjdk8/NoSuchMechanismException/REBASED_ON_85919cd409d1/
[3] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7081804

Reply via email to