users@jersey.java.net

Re: [Jersey] A blog entry on using the Jersey Test Framework

From: Naresh <bsnaresh_at_sun.com>
Date: Sun, 19 Apr 2009 09:20:04 +0530

Hi Irving,

J Irving wrote:
> Hi Naresh
>
> Per your earlier mail, I'm using Java version 1.6.0_07-b06-153 on Mac OS 10.5.6.
>
> On Fri, Apr 17, 2009 at 23:57, Naresh <bsnaresh_at_sun.com> wrote:
>
>> looks like some old version of Grizzly jar is overriding the 1.9.8
>> version.
>> Could you try moving the dependency on the jersey-test-framework to the
>> top, i.e., place it before everything else?
>>
>
> In the entity-provider-1.0.3 example, it already is at the top of the
> dependency list.
>
>
>> The stack trace says, you are trying to run the tests with the Grizzly
>> Web Server. Can you confirm this? Because, your other mails say that you
>> were trying to run the tests using EmbeddedGF.
>>
>
> No, I *am* trying to use EmbeddedGF. Here is the maven command line:
>
> mvn clean test -Dcontainer.type=EmbeddedGF
>
> and the stack traces included are generated by *that* invocation. Is
> that correct?
>
That looks odd. The stack strace hints that the framework is trying to
start the GrizzlyWeb container which is the default one.
I suspect if the system property "container.type" is really getting
passed, though you are setting it in the command line.
To confirm this, can you please do this:
1. Run the tests with -
    mvn clean test -Dcontainer.type=GrizzlyWeb -DenableLogging
2. Check if the HTTP requests and responses being transferred over the
wire, are printed on the console.

   I will also check it on a Mac machine tomorrow, I won't have access
to one till I reach office tomorrow :-( .

-Naresh
> When I run the tests using the -Dcontainer.type=GrizzlyWeb property,
> they all pass (same code example).
>
> Interestingly, when I try this on another code example
> (extended-wadl-webapp) I get a completely different error:
>
> ------------------8<-----------------
> [ERROR] BUILD ERROR
> [INFO] ------------------------------------------------------------------------
> [INFO] An error has occurred in JavaDocs report generation:Exit code:
> 1 - javadoc: error - invalid flag: -author
>
> Command line was:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/javadoc
> @options
> -----------------8<----------------
>
> I get the same error with Java 1.5 also.
>
> I guess that if it works for you, my environment is somehow messed up.
> I'll try to debug it some more later on, but if you have any more
> suggestions please make them :)
>
> cheers, J
>
>
>
>
>> J Irving wrote:
>>
>>> This appears to have been a problem with the j2ee API jar file I was
>>> using to build against. I dumped it and included only the
>>> persistence-api component, and the error disappeared. Now however, I
>>> have another issue - a MethodNotFound (although the method appears to
>>> be right there in the grizzly-http-1.9.8.jar file).
>>>
>>> I'm including the trace below in case anyone has a solution.
>>>
>>> cheers, J
>>>
>>> -----------------8<-----------------
>>> java.lang.NoSuchMethodError:
>>> com.sun.grizzly.http.embed.GrizzlyWebServer.addGrizzlyAdapter(Lcom/sun/grizzly/tcp/http11/GrizzlyAdapter;[Ljava/lang/String;)V
>>> at com.sun.jersey.test.framework.impl.container.grizzly.web.GrizzlyWebContainer.start(GrizzlyWebContainer.java:134)
>>> at com.sun.jersey.test.framework.impl.JerseyAppContainer.startServer(JerseyAppContainer.java:170)
>>> at com.sun.jersey.test.framework.JerseyTest.setupTestEnvironment(JerseyTest.java:254)
>>> at com.sun.cloud.downloads.resource.RegistrationTest.<init>(RegistrationTest.java:15)
>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>> at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:171)
>>> at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:216)
>>> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>> at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:213)
>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
>>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>>> at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>>> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>>> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>>> at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>>> at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>>> 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:345)
>>> at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
>>>
>>>
>>> On Fri, Apr 17, 2009 at 15:06, J Irving <j_at_lollyshouse.net> wrote:
>>>
>>>
>>>> Hi
>>>>
>>>> I've been trying to write some simple unit tests using the framework
>>>> and I have a problem. It may be unrelated to the framework per se,
>>>> because my application also uses JPA and spring - is this likely to
>>>> cause problems? Ideas about what's going on here would be most
>>>> welcome.
>>>>
>>>> The error I see is a ClassFormatError, more below. Here's the code
>>>> for the tests:
>>>>
>>>> public class RegistrationTest extends JerseyTest {
>>>>
>>>> public RegistrationTest() throws Exception {
>>>> super();
>>>> ApplicationDescriptor appDescriptor = new ApplicationDescriptor();
>>>> appDescriptor.setRootResourcePackageName("my.package.base.root");
>>>> setupTestEnvironment(appDescriptor);
>>>> }
>>>>
>>>> @Test
>>>> public void testListUploaders() throws Exception {
>>>> String response = webResource.path("uploaders").get(String.class);
>>>> Assert.assertNotNull(response);
>>>> System.out.println(response);
>>>> }
>>>>
>>>> @Test
>>>> public void testTestFramework() throws Exception {
>>>> System.out.println("done");
>>>> }
>>>>
>>>> }
>>>>
>>>> I run the test like this:
>>>>
>>>> % mvn clean test -Dcontainer.type=EmbeddedGF
>>>>
>>>> And the tests fail with the following errors:
>>>>
>>>> testListUploaders(com.sun.cloud.downloads.resource.RegistrationTest)
>>>> Time elapsed: 0.041 sec <<< ERROR!
>>>> java.lang.ClassFormatError: Absent Code attribute in method that is
>>>> not native or abstract in class file javax/servlet/http/HttpServlet
>>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
>>>> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
>>>> at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
>>>> at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>>>> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
>>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
>>>> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
>>>> at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
>>>> at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>>>> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
>>>> at com.sun.jersey.test.framework.util.ApplicationDescriptor.<init>(ApplicationDescriptor.java:72)
>>>> at com.sun.cloud.downloads.resource.RegistrationTest.<init>(RegistrationTest.java:13)
>>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>>> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>>> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:171)
>>>> at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:216)
>>>> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:213)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
>>>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>>>> at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>>>> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>>>> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>>>> at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>>>> at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>>>> 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:345)
>>>> at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
>>>>
>>>> testTestFramework(com.sun.cloud.downloads.resource.RegistrationTest)
>>>> Time elapsed: 0.001 sec <<< ERROR!
>>>> java.lang.ClassFormatError:
>>>> com/sun/jersey/spi/container/servlet/ServletContainer
>>>> at com.sun.jersey.test.framework.util.ApplicationDescriptor.<init>(ApplicationDescriptor.java:72)
>>>> at com.sun.cloud.downloads.resource.RegistrationTest.<init>(RegistrationTest.java:13)
>>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>>>> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>>> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>>> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:171)
>>>> at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:216)
>>>> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:213)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
>>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
>>>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>>>> at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>>>> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>>>> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>>>> at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>>>> at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>>>> at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>>>> 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:345)
>>>> at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
>>>>
>>>> ClassFormatError seems to be somewhat out of leftfield.
>>>>
>>>> Here's my pom.xml in case that helps:
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <project>
>>>> <modelVersion>4.0.0</modelVersion>
>>>> <groupId>my.package.base</groupId>
>>>> <artifactId>dnc-jersey</artifactId>
>>>> <packaging>war</packaging>
>>>> <name>dnc-jersey Jersey Webapp</name>
>>>> <version>1.0-SNAPSHOT</version>
>>>> <build>
>>>> <finalName>dnc-jersey</finalName>
>>>> <plugins>
>>>> <plugin>
>>>> <artifactId>maven-compiler-plugin</artifactId>
>>>> <inherited>true</inherited>
>>>> <configuration>
>>>> <source>1.6</source>
>>>> <target>1.6</target>
>>>> </configuration>
>>>> </plugin>
>>>> <plugin>
>>>> <groupId>org.glassfish</groupId>
>>>> <artifactId>maven-glassfish-plugin</artifactId>
>>>> </plugin>
>>>> </plugins>
>>>> </build>
>>>> <profiles>
>>>> <profile>
>>>> <id>jdk-1.5</id>
>>>> <activation>
>>>> <jdk>1.5</jdk>
>>>> </activation>
>>>> <dependencies>
>>>> <dependency>
>>>> <groupId>com.sun.xml.bind</groupId>
>>>> <artifactId>jaxb-impl</artifactId>
>>>> <version>2.1.10</version>
>>>> </dependency>
>>>> </dependencies>
>>>> </profile>
>>>> </profiles>
>>>> <repositories>
>>>> <repository>
>>>> <id>glassfish-maven2-repository.dev.java.net</id>
>>>> <name>Java.net Maven 2 Repository for GlassFish</name>
>>>> <url>http://download.java.net/maven/glassfish/</url>
>>>> <layout>default</layout>
>>>> </repository>
>>>> <repository>
>>>> <id>maven2-repository.dev.java.net</id>
>>>> <name>Java.net Maven 2 Repository</name>
>>>> <url>http://download.java.net/maven/2/</url>
>>>> </repository>
>>>> <repository>
>>>> <id>maven-repository.dev.java.net</id>
>>>> <name>Java.net Maven 1 Repository (legacy)</name>
>>>> <url>http://download.java.net/maven/1</url>
>>>> <layout>legacy</layout>
>>>> </repository>
>>>> </repositories>
>>>> <pluginRepositories>
>>>> <pluginRepository>
>>>> <id>maven2-repository.dev.java.net</id>
>>>> <name>Java.net Repository for Maven</name>
>>>> <url>http://download.java.net/maven/2/</url>
>>>> </pluginRepository>
>>>> <pluginRepository>
>>>> <id>maven-repository.dev.java.net</id>
>>>> <name>Java.net Maven 1 Repository (legacy)</name>
>>>> <url>http://download.java.net/maven/1</url>
>>>> <layout>legacy</layout>
>>>> </pluginRepository>
>>>> </pluginRepositories>
>>>> <dependencies>
>>>> <dependency>
>>>> <groupId>com.sun.jersey</groupId>
>>>> <artifactId>jersey-server</artifactId>
>>>> <version>${jersey-version}</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>com.sun.jersey</groupId>
>>>> <artifactId>jersey-json</artifactId>
>>>> <version>${jersey-version}</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>com.sun.jersey.contribs</groupId>
>>>> <artifactId>jersey-spring</artifactId>
>>>> <version>${jersey-version}</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>com.sun.jersey</groupId>
>>>> <artifactId>jersey-client</artifactId>
>>>> <version>${jersey-version}</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>javaee</groupId>
>>>> <artifactId>javaee-api</artifactId>
>>>> <version>5</version>
>>>> <scope>provided</scope>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>org.slf4j</groupId>
>>>> <artifactId>slf4j-api</artifactId>
>>>> <version>1.5.6</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>org.slf4j</groupId>
>>>> <artifactId>slf4j-jdk14</artifactId>
>>>> <version>1.5.6</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>org.json</groupId>
>>>> <artifactId>json</artifactId>
>>>> <version>20090211</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>hibernate</groupId>
>>>> <artifactId>hibernate-entitymanager</artifactId>
>>>> <version>3.4.0.GA</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>cglib</groupId>
>>>> <artifactId>cglib-nodep</artifactId>
>>>> <version>2.2</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>commons-codec</groupId>
>>>> <artifactId>commons-codec</artifactId>
>>>> <version>1.3</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>com.sun.jersey.test.framework</groupId>
>>>> <artifactId>jersey-test-framework</artifactId>
>>>> <version>1.0.3</version>
>>>> <scope>test</scope>
>>>> </dependency>
>>>> </dependencies>
>>>> <properties>
>>>> <jersey-version>1.0.3</jersey-version>
>>>> </properties>
>>>> </project>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Apr 17, 2009 at 09:13, Naresh <bsnaresh_at_sun.com> wrote:
>>>>
>>>>
>>>>> Hi,
>>>>>
>>>>> I have just written a blog entry [1] which describes how to use the
>>>>> Jersey Test Framework, which is part of the Jersey 1.0.3 release.
>>>>>
>>>>> [1] http://blogs.sun.com/naresh/entry/jersey_test_framework_makes_it
>>>>>
>>>>> Thanks,
>>>>> Naresh
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>>
>>>>>
>>>>>
>>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
>