I had this problem before and i got around it by using commons beanutils
instead of springs implementation, you also have to switch "source" and
"destination" parameters in the copyproperties method as commons takes
them in the opposite way.

Don't know if there are any advantages to using springs version maybe
Matt can give a quick answer?

Also as a general question to all, thread safety was discussed
previously. What do most people define as thread safe objects/methods?
Is it as simple as using the synchronized modifier?

Chun-Yian Liew wrote:
Correction, the sentence

"The keys of those two entries are "null" and "class" both having a
PropertyDescriptor as value."

should have been

"The keys of those two entries are "empty" and "class" both having a
PropertyDescriptor as value."

in my previous post.



Chun-Yian Liew wrote:
celeraman+, have you managed to get the properties based population
working?

I am currently running into a similar kind of a problem with the appfuse
tutorial PersonDaoTest example.
I am also trying to populate the Person object with the populate method of
the BaseDaoTestCase class.
At first I received a NullPointerException when I put the
PersonDaoTest.properties file in the same directory as the
PersonDaoTest.java file as explained on
http://www.appfuse.org/display/APF/Using+Hibernate. After putting the
properties file in the test resources directory as mentioned above the
NullPointerException didn't occur anymore.
But the person object in the example method "testAddAndRemovePerson" is
now getting filled with null values.

Because I just succeeded in getting my personDaoTest running as a junit
test within eclipse I was able to start debugging this issue:

1. In the BaseDaoTestCase populate method BeanUtils.copyProperties(map,
obj); is called, where map is a HashMap containing the key/values out of
the PersonDaoTest.properties file and obj is the person object to be
filled.

2. copyProperties(map, obj) ends up in another method of BeanUtils:
private static void copyProperties(Object source, Object target, Class
editable, String[] ignoreProperties)

were the following line is being executed

3. PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(),
targetPd.getName());

Below you can see the code of the method called.

        public static PropertyDescriptor getPropertyDescriptor(Class clazz,
String propertyName)
                        throws BeansException {

                CachedIntrospectionResults cr =
CachedIntrospectionResults.forClass(clazz);
                return cr.getPropertyDescriptor(propertyName);
        }

and here is were it goes wrong.
The cr.getPropertyDescriptor is trying to retrieve a PropertyDescriptor
for a given propertyName, i.e. firstName.
It tries to look it up in the private Map propertyDescriptorCache of the
org.springframework.beans.CachedIntrospectionResults class. At that moment
that map only contains two entries.
The keys of those two entries are "null" and "class" both having a
PropertyDescriptor as value.
So the getPropertyDescriptor is returning a null value for the requested
propertyNames (id, firstName and lastName).

Does anybody have an idea what the reason could be why that map doesn't
contain the values for the values defined in the PersonDaoTest.properties
file?

Chun



celeraman+ wrote:
FIY, I got some progress...


1. The bean definition in src/main/webapp/WEB-INF/aplicationContext.xml
file for DepartmentDao
was wrong as following: <bean id="DepartmentDao"
class="org.appfuse.tutorial.dao.hibernate.DepartamentDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

Note *DepartmentDao* where must be *departmentDao*.

2. my test case properties files was including the id property. The
Hibernate Tutorial don't include a id property, so I think this could be
a future problem and I removed it.

3. I replaced the populate method call by calling the setters for myself
and bingo... the test case was BUILD SUCCESSFUL.

But the question continues:
Why the populate method call do not load my Department bean from the
.properties file?

Any help are welcome!

--
celeraman+




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to