Hi All,
   I am developing a RIFE web application that I am trying to unit test.
When my surefire tests run, RIFE is unable to load Java classes properly.
Here is the related portion of the pom.xml:

   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <excludes>
               <exclude>**/SACBaseTest.java</exclude>
         </excludes>
         <systemProperties>
           <property>
             <name>rife.webapp.path</name>
             <value>${basedir}/target/classes</value>
           </property>
         </systemProperties>
       </configuration>
     </plugin>
   </plugins>
   <testResources>
     <testResource>
       <targetPath>/</targetPath>
       <filtering>false</filtering>
       <directory>${basedir}/src/main/webapp/WEB-INF/classes</directory>
       <includes>
         <include>**/*</include>
       </includes>
     </testResource>
   </testResources>
 </build>

Before I explain the problem, here is a part of the stacktrace:

com.uwyn.rife.engine.exceptions.ElementImplementationInstantiationException:
The implementation 'net.collab.extranet.sac.elements.SACHome' of element
'manual:SACHome' couldn't be instantiated.
       at com.uwyn.rife.engine.ElementFactory.getInstance(
ElementFactory.java:162)
       at com.uwyn.rife.engine.ElementInfo.deploy(ElementInfo.java:242)
       at com.uwyn.rife.engine.SiteBuilder.setupElements(SiteBuilder.java
:984)
       at com.uwyn.rife.engine.SiteBuilder.setupData(SiteBuilder.java:1618)
       at com.uwyn.rife.engine.SiteBuilder.finish(SiteBuilder.java:261)
       at com.uwyn.rife.engine.SiteBuilder.process(SiteBuilder.java:252)
       at com.uwyn.rife.engine.SiteBuilder.getSite(SiteBuilder.java:178)
       at net.collab.extranet.sac.svn.SVNAdminCLIWrapperClientTest.setUp(
SVNAdminCLIWrapperClientTest.java:21)
       at junit.framework.TestCase.runBare(TestCase.java:125)
       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:118)
       at junit.framework.TestSuite.runTest(TestSuite.java:208)
       at junit.framework.TestSuite.run(TestSuite.java:203)
       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:585)
       at org.codehaus.surefire.battery.JUnitBattery.executeJUnit(
JUnitBattery.java:246)
       at org.codehaus.surefire.battery.JUnitBattery.execute(
JUnitBattery.java:220)
       at org.codehaus.surefire.Surefire.executeBattery(Surefire.java:204)
       at org.codehaus.surefire.Surefire.run(Surefire.java:153)
       at org.codehaus.surefire.Surefire.run(Surefire.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:585)
       at org.codehaus.surefire.SurefireBooter.run(SurefireBooter.java:104)
       at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java
:303)
       at org.apache.maven.plugin.DefaultPluginManager.executeMojo(
DefaultPluginManager.java:412)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(
DefaultLifecycleExecutor.java:534)
       at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle
(DefaultLifecycleExecutor.java:475)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(
DefaultLifecycleExecutor.java:454)
       at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
(DefaultLifecycleExecutor.java:306)
       at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(
DefaultLifecycleExecutor.java:273)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(
DefaultLifecycleExecutor.java:140)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
       at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
       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:585)
       at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java
:315)
       at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
       at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java
:430)
       at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: java.lang.NullPointerException
       at com.uwyn.rife.engine.ElementFactory.getJavaClass(
ElementFactory.java:100)
       at com.uwyn.rife.engine.ElementFactory.getJavaInstance(
ElementFactory.java:124)
       at com.uwyn.rife.engine.ElementFactory.getInstance(
ElementFactory.java:153)
       ... 47 more

So...a little information about the structure.  When my Maven application
runs the tests, the target directory looks like this:

target
 /classes
 /test-classes
   /sites
   /rep
   /templates

RIFE can successfully load the sites/main.xml but RIFE then starts to
instantiate the SACHome object.  This object is compiled to target/classes
but RIFE cannot find it.  RIFE developers tell me that RIFE's ClassLoader is
being circumvented or is using the same classpath as what the surefire tests
are.  How can I get my tests, which include RIFE's engine, to have the same
classpath?  I've done everything I can think of.  Just to show you all the
surefire classpath:

[DEBUG] Test Classpath :
[DEBUG] /Users/jwhitlock/work/sac/src/web-app/target/test-classes
[DEBUG] /Users/jwhitlock/work/sac/src/web-app/target/classes
[DEBUG] /Users/jwhitlock/work/sac/src/web-app/target/classes
[DEBUG] /Users/jwhitlock/work/sac/src/web-app/target/test-classes
[DEBUG] /Users/jwhitlock/.m2/repository/com/uwyn/rife-jdk15/1.5.1/rife-
jdk15-1.5.1.jar
[DEBUG] /Users/jwhitlock/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] /Users/jwhitlock/.m2/repository/commons-io/commons-io/1.2/commons-
io-1.2.jar
[DEBUG] Adding to surefire test classpath:
/Users/jwhitlock/.m2/repository/surefire/surefire/1.4/surefire-1.4.jar
[DEBUG] Adding to surefire test classpath:
/Users/jwhitlock/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] Adding to surefire test classpath:
/Users/jwhitlock/.m2/repository/surefire/surefire-booter/1.4/surefire-
booter-1.4.jar
[DEBUG] Adding to surefire test classpath: /usr/local/maven-2.0/core/plexus-
utils-1.1.jar

As you can see, target/classes and target/test-classes are both on the
classpath and should allow RIFE to be able to load classes from
target/classes but is not able to do so.

Take care,

Jeremy

Reply via email to