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+
> 
> 

-- 
View this message in context: 
http://www.nabble.com/NullPointerException-when-trying-to-populate-in-test-case-tf3604674s2369.html#a10227694
Sent from the AppFuse - User mailing list archive at Nabble.com.

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

Reply via email to