Index: modules/beans/src/main/java/java/beans/VetoableChangeSupport.java =================================================================== --- modules/beans/src/main/java/java/beans/VetoableChangeSupport.java (revision 396800) +++ modules/beans/src/main/java/java/beans/VetoableChangeSupport.java (working copy) @@ -318,31 +318,44 @@ private void doFirePropertyChange(PropertyChangeEvent event) throws PropertyVetoException { - String propertyName = event.getPropertyName(); + String propName = event.getPropertyName(); Object oldValue = event.getOldValue(); Object newValue = event.getNewValue(); if (newValue != null && oldValue != null && newValue.equals(oldValue)) { return; } + try { + notifyAllListeners(event); + } catch (PropertyVetoException pve) { + PropertyChangeEvent rEvent = createPropertyChangeEvent(propName, + newValue, + oldValue); + notifyAllListeners(rEvent); + throw pve; + } - Iterator iterator = allVetoableChangeListeners.iterator(); + } + + private void notifyListeners(Iterator iterator, PropertyChangeEvent event) + throws PropertyVetoException { + VetoableChangeListener listener = null; while (iterator.hasNext()) { - VetoableChangeListener listener = - (VetoableChangeListener) iterator.next(); + listener = (VetoableChangeListener) iterator.next(); listener.vetoableChange(event); } - + } + + private void notifyAllListeners(PropertyChangeEvent event) + throws PropertyVetoException { + notifyListeners(allVetoableChangeListeners.iterator(), event); + String propertyName = event.getPropertyName(); ArrayList listeners = (ArrayList) selectedVetoableChangeListeners.get( propertyName); - if (listeners != null) { - iterator = listeners.iterator(); - while (iterator.hasNext()) { - VetoableChangeListener listener = - (VetoableChangeListener) iterator.next(); - listener.vetoableChange(event); - } + if (listeners == null) { + return; } + notifyListeners(listeners.iterator(), event); } private static VetoableChangeListener[] getAsVetoableChangeListenerArray(