Thoughts on adding getElementClass() method to StackTraceElement?

Peter Levart peter.levart at gmail.com
Sat Jun 15 22:05:13 UTC 2013


On 06/15/2013 11:06 PM, Nick Williams wrote:
> B) A Class loaded by a child class loader obtains a StackTraceElement containing Classes loaded by a sibling class loader. This would obviously be the more dangerous scenario (think: one web application accessing another web application's classes), but I don't think it's actually possible. I don't think a stack trace generated in one class loader can possibly make its way into code in a sibling class loader, and I know that an execution stack can't contain classes from two sibling class loaders (only from class loaders with parent/child relationships).

Why not?  Consider this hypothetical code:

Parent class loader:

     public class A {
         public static final A INSTANCE = new A();
         final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
         public void addPropertyChangeListener(PropertyChangeListener 
pcl) { pcs.addPropertyChangeListener(pcl); }
         String property;
         public void setProperty(String property) {
             pcs.firePropertyChange("property", this.property, 
this.property = property);
         }
     }

Child class loader 1:

     static class B implements PropertyChangeListener {
         B() {
             A a = A.INSTANCE;
             a.addPropertyChangeListener(this);
         }

         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             StackTraceElement[] st = new Throwable().getStackTrace();
             // can we see C.class in 'st' array?
         }
     }

Child class loader 2:

     static class C {
         void m() {
             A a = A.INSTANCE;
             a.setProperty("XYZ");
         }
     }



Regards, Peter




More information about the core-libs-dev mailing list