Hi all, I'm using Appfuse2.0-m5 with Spring MVC Basic.

I recently exported the Appfuse core classes into my own project. I followed
the instructions to include the following exclusions of the dependency in my
project's pom.xml.

<dependency>
           <groupId>org.appfuse</groupId>
           <artifactId>appfuse-${web.framework}</artifactId>
           <version>${appfuse.version}</version>
           <type>warpath</type>
           <!-- This exclusion and the dependency following this one allow
DAO framework switching. -->
           <!-- You only need these if you want to use JPA or iBATIS. See
APF-565 for more information. -->
           <!-- It does no harm to leave it in for Hibernate, but it's not
needed. -->
           <exclusions>
               <exclusion>
                   <groupId>org.appfuse</groupId>
                   <artifactId>appfuse-data-common</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>org.appfuse</groupId>
                   <artifactId>appfuse-hibernate</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

In my project, the User class has a bidirectional OneToMany relationship
with Contact class.

So I did my unit test ContatDaoTest and tried to test it mvn test-compile
test -Dtest=ContactDaoTest and it fails for this one method and got the
following error:

testAddAndRemoveContact(com.jungoot.contact.dao.ContactDaoTest)  Time
elapsed: 0.015 sec  <<< ERROR!
java.lang.NoSuchMethodError: org.appfuse.model.User.addContact
(Lcom/jungoot/contact/model/Contact;)V
   at com.jungoot.contact.dao.ContactDaoTest.testAddAndRemoveContact(
ContactDaoTest.java:77)
   at com.jungoot.contact.dao.ContactDaoTest.testAddAndRemoveContact(
ContactDaoTest.java:77)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at junit.framework.TestCase.runTest(TestCase.java:164)
   at junit.framework.TestCase.runBare(TestCase.java:130)
   at org.springframework.test.ConditionalTestCase.runBare(
ConditionalTestCase.java:69)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:120)
   at junit.framework.TestSuite.runTest(TestSuite.java:230)
   at junit.framework.TestSuite.run(TestSuite.java:225)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.maven.surefire.junit.JUnitTestSet.execute(
JUnitTestSet.java:213)
   at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(
AbstractDirectoryTestSuite.java:138)
   at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(
AbstractDirectoryTestSuite.java:125)
   at org.apache.maven.surefire.Surefire.run(Surefire.java:132)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(
SurefireBooter.java:290)
   at org.apache.maven.surefire.booter.SurefireBooter.main(
SurefireBooter.java:818)

This is the method in my ContactDaoTest class

public void testAddAndRemoveContact() throws Exception {
       User user = new User();
       user = userDao.get(new Long(1));
       Contact contact = new Contact();
       contact.setContactId(new Long(1));
       contact.setFirstName("Fadhli");
       contact.setLastName("Rahim");
       contact.setEmail("[EMAIL PROTECTED]");
       Address address = new Address();
       address.setCity("Denver");
       address.setProvince("CO");
       address.setCountry("USA");
       address.setPostalCode("80210");
       contact.setContactAddress(address);
       contactDao.saveContact(contact);
       user.addContact(contact);
       user = userDao.saveUser(user);

       flush();

       contact = contactDao.get(contact.getContactId());

       assertEquals("Fadhli", contact.getFirstName());
       assertNotNull(contact.getContactId());

       log.debug("removing contact...");
       contactDao.remove(contact.getContactId());
       flush();

       try {
           contactDao.get(contact.getContactId());
           fail("Contact found in database!");
       } catch (DataAccessException dae){
           log.debug("Expected exception: " + dae.getMessage() + ". This
means contact is already removed from record");
           assertNotNull(dae);
       }
   }


Here's the code that I added into the User class file:

/**
    * Map user and contact bidirectional association
    * Cascade equivalent to cascade="save-update"
    * Enables transitive persistence for Contact instances.
    */
   @OneToMany(cascade ={CascadeType.PERSIST,
                        CascadeType.MERGE,
                        CascadeType.REMOVE},
                        mappedBy="user")
   @org.hibernate.annotations.Cascade(value =
org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
   public Set<Contact> getContacts() {
       return contacts;
   }

   public void addContact(Contact contact) {
       contact.setUser(this);
       contacts.add(contact);
   }

   public void setContacts(Set<Contact> contacts) {
       this.contacts = contacts;
   }


Can anyone point me in the right direction? It seems the error message, it
can't find the method addContact in the User class.

Your help is deeply appreciated.

Thanks

--
/fadhli

Reply via email to