Hi All, I have taken the liberty to create a sample RIFE application to reproduce this behavior so we can work together to fix this. This sample RIFE application is attached and is a Maven project. It has a README file to explain how to prepare the environment and how to reproduce is. Please use the attached so I can figure out if I'm doing something wrong and if there is a workaround/fix available. I'm sure I am not the only person to run into a problem like this.
Take care, Jeremy On 12/19/06, Jeremy Whitlock <[EMAIL PROTECTED]> wrote:
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
rife-maven-example.tar.gz
Description: GNU Zip compressed data
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
