Glassfish Embedded容器有什么问题?

时间:2010-10-13 08:59:41

标签: java glassfish jersey

这是我的pom.xml(部分内容):

[...]
<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-server</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>com.sun.jersey.jersey-test-framework</groupId>
  <artifactId>jersey-test-framework-embedded-glassfish</artifactId>
  <version>${jersey.version}</version>
  <scope>test</scope>
</dependency>
[...]

这是测试:

public class FooTest extends JerseyTest {
  public FooTest() throws Exception {
    super("com.XXX");
  }
  @Before
  public void setUp() throws Exception {
  }
  @Test
  public void shouldWork() throws Exception {
  }
}

这就是我在日志中得到的内容:

com.sun.jersey.test.framework.spi.container.TestContainerException: org.glassfish.embed.EmbeddedException: You must start the server before calling this API method: EmbeddedDeployer.EmbeddedDeployer Constructor.
at com.sun.jersey.test.framework.spi.container.embedded.glassfish.EmbeddedGlassFishTestContainerFactory$EmbeddedGlassFishTestContainer.stop(EmbeddedGlassFishTestContainerFactory.java:154)
at com.sun.jersey.test.framework.JerseyTest.tearDown(JerseyTest.java:312)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[...]

当我从课程中删除setUp()方法时,一切正常。这有什么不对?

2 个答案:

答案 0 :(得分:2)

在设置中尝试super.setUp();

删除后,它会调用其继承的super版本。这很好。

但是当你添加自己的setUp时,你已经覆盖了super's版本。

答案 1 :(得分:1)

您无意中覆盖了其setUp()方法。尝试将其名称更改为其他名称,为什么不说出来,before()

原始setUp()方法通过调用TestContainer.start()来调用测试容器。在你的情况下,它无法做到这一点,因为你覆盖了方法,从未对super.setUp()进行任何调用。因此,它抱怨You must start the server.... so and so