针对 Java EE 6 API 进行测试

2024-03-13

我为 JAX-RS 编写了一个补充,并将 Java EE 6 API 作为 Maven 依赖项包含在内。

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

然后我有一个小测试用例:

  @Test
  public void testIsWriteable() {
    class SpecialViewable extends Viewable {
      public SpecialViewable() {
        super("test");
      }
    }
    FreeMarkerViewProcessor processor = new FreeMarkerViewProcessor(null);
    assertTrue(processor.isWriteable(SpecialViewable.class, null, null,
            MediaType.WILDCARD_TYPE));
  }

但我收到一个错误:

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/core/MediaType
    ...

如果我将 Jersey 作为 JAX-RS 实现而不是 Java EE API 包含在内,一切都很好。

感谢 BalusC 的提示,我知道了我的猜测:Java EE 6 只是一个没有方法体的 API:来自 java.net 博客 http://weblogs.java.net/blog/ludo/archive/2007/01/java_ee_5_apis.html

你可以用这个编译你的代码 jar,但当然你不能运行 您的应用程序,因为它 仅包含 Java EE 5 API 和 不包含任何方法体。如果 你尝试跑步,你会得到这个 例外:

线程“main”中的异常 java.lang.ClassFormatError:不存在 方法中的代码属性不是 类文件中的本机或抽象 javax/邮件/会话

为了执行 Java EE 5 应用程序,您仍然需要 Java EE 5 容器,例如 GlassFish 应用服务器。

我尝试添加泽西岛test范围,但没有用。

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>${jersey-version}</version>
    <scope>test</scope>
</dependency>

如何测试仅依赖于官方 Java EE API 的软件?

Solution

需要放置提供商(Jersey)beforepom.xml 中的 API (javeee-api)。

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>${jersey-version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

不确定这是否能解决您的问题,但 GlassFish Embedded 提供了 Java EE 6 实现。将其添加到您的pom.xml:

<project>
  ...
  <repositories>
    <repository>
      <id>glassfish-extras-repository</id>
      <url>http://download.java.net/maven/glassfish/org/glassfish/extras</url>
    </repository>
  </repositories>
  ...
  <dependencies>
    <dependency>
      <groupId>org.glassfish.extras</groupId>
      <artifactId>glassfish-embedded-all</artifactId>
      <version>3.0.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
    ...
  </dependencies>
  ...
</project>

声明这一点很重要glassfish-embedded-all人工制品before the javaee-api.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对 Java EE 6 API 进行测试 的相关文章

随机推荐