Les tests Java EE 6 API

J'écris plus de JAX-RS et inclus la Java EE 6 API comme une dépendance Maven.

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

Puis j'ai un peu de cas de test:

  @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));
  }

Mais j'obtiens une erreur:

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

Si je comprend Jersey JAX-RS mise en place de l'API Java EE, tout est parfait.

Grâce à BalusC du soupçon je sais que ce que j'avais deviné: Java EE 6 est seulement une API sans le corps de méthode:
À partir de la java.net blog

Vous pouvez compiler votre code avec cette
jar, mais bien sûr, vous ne peut pas exécuter
votre application avec elle car elle
ne contient que le Java EE 5 et Api
ne contiennent pas de corps de méthode. Si
vous essayez d'exécuter, vous obtenez ce
exception:

Exception in thread "main"
java.lang.ClassFormatError: Absent
Attribut Code de la méthode, qui n'est pas
native ou abstraits dans le fichier de classe
javax/mail/Session

Pour l'exécution de Java EE 5
application, vous aurez toujours besoin d'un Java
EE 5 conteneur, comme par exemple le
Serveur d'application GlassFish.

J'ai essayé d'ajouter Jersy, avec test portée mais il ne fonctionne pas.

<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>

Comment puis-je tester les logiciels qui ne dépend que de l'API Java EE?

Solution

Le fournisseur (Jersey) doit être placé avant l'API (javeee-api) dans le pom.xml.

<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>
  • Ici sont quelques-uns des problèmes liés aux perspicace réponses: google.com/...
  • J'ai été vraiment ronger mes ongles avec ce problème avant je suis tombé sur cette question. Merci!
InformationsquelleAutor deamon | 2010-08-06