harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexei Zakharov" <alexei.zakha...@gmail.com>
Subject Re: [classlib][beans] RI inconsistency in EventHandler
Date Mon, 16 Oct 2006 15:11:20 GMT
I am ok with this. :) Will file a JIRA soon.

Regards,

2006/10/16, Tim Ellison <t.p.ellison@gmail.com>:
> I'm fine with marking it as a non-bug difference, with the option to fix
> it if we find some compelling application that relies on this non-spec
> behavior.  Is that weasely enough?
>
> Regards,
> Tim
>
> Alexei Zakharov wrote:
> > Hi Tim,
> >
> > <-- persuasion starts here
> >
> > Let me cite the spec describing design patterns for properties,
> > JavaBeans spec v1.01-A (Aug 8, 1997), page 55:
> >
> > ---
> > 8.3 Design Patterns for Properties
> >
> > 8.3.1 Simple properties
> > By default, we use design patterns to locate properties by looking for
> > methods of the form:
> >
> > public <PropertyType> get<PropertyName>();
> > public void set<PropertyName>(<PropertyType> a);
> >
> > 8.3.2 Boolean properties
> > In addition, for boolean properties, we allow a
> >
> > public boolean is<PropertyName>();
> >
> > 8.3.3 Indexed properties
> > If we find a property whose type is an array "<PropertyElement>[]",
> > then we also look for methods of the form:
> >
> > public <PropertyElement> get<PropertyName>(int a);
> > public void set<PropertyName>(int a, <PropertyElement> b);
> > ---
> >
> > So we have only three design patterns specified for properties. That's
> > all. I didn't found any mentioning about any extra design patterns and
> > I've never heard anything about setDefaults() or smth. like it.
> >
> > On the other hand, if I understand things correctly the Introspector
> > class should be the decision-making center for such type of things.
> > I.e. if Introspector says there is no properties then there should be
> > no properties. RI doesn't seem to be using Introspector in the example
> > I've described ealier. Thus I still think it looks like RI bug.
> >
> > <-- end of persuasion
> >
> > Thanks and regards,
> >
> > 2006/10/14, Tim Ellison <t.p.ellison@gmail.com>:
> >> That is strange behavior, since as you point out it does not set a
> >> parametrized value, however, I wonder if there is some assumption that
> >> the setFoo() method may be a mutator anyway, e.g. setDefaults() or
> >> something like that?  Just guessing.
> >>
> >> In this case it may be safer to follow the RI -- but I'm open to
> >> persuasion.
> >>
> >> Regards,
> >> Tim
> >>
> >> Alexei Zakharov wrote:
> >> > Hi all,
> >> >
> >> > Let me disturb you with another boring "RI inconsistency in beans"
> >> > –type of message. :) It seems I found a bug in RI.  In
> >> > java.beans.EventHandler. I think RI incorrectly determines properties
> >> > here. According to spec, common sense and even the RI's implementation
> >> > of java.beans.Introspector the following bean should not contain any
> >> > properties:
> >> >
> >> >    public static class MyBean {
> >> >        public void setProp1() {}
> >> >    }
> >> >
> >> > because "setProp1()" is not a valid setter method – it does not
> >> > contain a new value to set.
> >> > However, the following test fails on RI:
> >> >
> >> > <---
> >> > import java.beans.*;
> >> >
> >> > public class TestBeanInfo1 {
> >> >    public static class MyBean {
> >> >        public void setProp1() {}
> >> >    }
> >> >
> >> >    public static void main(String argv[]) throws Exception {
> >> >        MyBean bean = new MyBean();
> >> >        // "prop1" is neither the name of writeable property nor the
> >> > name of any public method
> >> >        Object proxy = EventHandler.create(
> >> >                PropertyChangeListener.class, bean, "prop1");
> >> >
> >> >        // just to show that Introspector doesn't see the property
> >> > with name "prop1"
> >> >        PropertyDescriptor[] pds =
> >> Introspector.getBeanInfo(MyBean.class,
> >> >                Introspector.USE_ALL_BEANINFO).getPropertyDescriptors();
> >> >        for (int i = 0; i < pds.length; i++) {
> >> >            System.out.println("Property found: " + pds[i].getName());
> >> >        }
> >> >
> >> >        // should throw exception
> >> >        try {
> >> >            ((PropertyChangeListener) proxy).propertyChange(
> >> >                    new PropertyChangeEvent(bean, "prop1", "1", "2"));
> >> >            System.out.println("FAIL");
> >> >        } catch (Throwable t) {
> >> >            System.out.println("PASS");
> >> >        }
> >> >    }
> >> > }
> >> > <---
> >> >
> >> > So it determines "prop1" as a valid property. IMHO this behavior is
> >> > inconsistent and we should not follow RI. But I like to hear opinions
> >> > from the rest of the community.
> >> >
> >> > Thanks,


-- 
Alexei Zakharov,
Intel Enterprise Solutions Software Division, Russia

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message