web-dev-qa-db-fra.com

Exceptions MOXy dans le projet JavaEE Jersey 2.0

J'essaie d'implémenter la prise en charge de Json dans un projet JavaEE, mais des problèmes se produisaient avec la génération d'exceptions liées à MOXy. J'ai lu sur jersey.Java.net que MOXy devrait être autodiscoverable mais il ne semble pas fonctionner lorsque j'essaie.

Donc, pour faciliter la tâche, je viens de générer un nouveau projet 'jersey-quickstart-webapp} _ ' et de modifier MyResource comme ci-dessous (mon objectif est d'utiliser une classe Application au lieu de Web. xml mais c’était la façon la plus simple de le localiser: l’erreur se produit quoi qu’il arrive.

@Path("myresource")
public class MyResource {
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response getIt() {
            return Response.status(Response.Status.ACCEPTED).entity(new TestEntity()).build();
        }
    }

Classe TestEntity (dans le même package):

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class TestEntity {
    private String content = "SOME CONTENT";

    public String getContent() {
        return content;
    }
}

POM.xml:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>a.b.c</groupId>
    <artifactId>server</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>server</name>

    <build>
        <finalName>server</finalName>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
        </dependency>
    </dependencies>
    <properties>
        <jersey.version>2.22.1</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

J'ai déployé ceci sur un Glassfish 4.1.1 propre en utilisant IntelliJ. Après cela, je reçois

Java.lang.ClassNotFoundException: Javax.xml.parsers.ParserConfigurationException introuvable par Org.Eclipse.persistence.moxy

Donc, j'ajoute beans.xml comme ci-dessous (essayé vide ainsi que j'ai vu indiqué dans la documentation Oracle)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
</beans>

Et je reçois cette erreur lors du déploiement

Java.lang.NoClassDefFoundError: impossible d'initialiser la classe Org.Eclipse.persistence.jaxb.BeanValidationHelper

J'ai essayé, pour le plaisir, de supprimer le fichier web.xml, de modifier la dépendancejersey-container-servlet-coreenjersey-container-servletet la création d'une classe d'application à la place (comme indiqué dans ContainerRequestFilter ne s'exécutera pas dans le projet jersey JavaEE ) mais générera la même erreur. Enfait, cela donne la même erreur si vous publiez un projet dépendant propre javaee-api 7.0 au lieu de dépendances de jersey et donniez la même erreur (je suppose que glassfish utilise jersey de toute façon).

Donc je suppose que je manque quelque chose ici, n'importe quelle âme qui pourrait me renseigner sur quoi? :) 

14
Base

Rétrogradé à Glassfish 4.1.0 et ensuite cela a fonctionné parfaitement. Un problème peut-être avec la version 4.1.1? Je vais essayer la nuit aussi, mais cela fonctionne maintenant.

19
Base

J'ai réussi à surmonter ce problème en mettant à jour le manifeste dans le fichier org.Eclipse.persistence.moxy.jar fourni avec Glassfish 4.1.1, au lieu de passer à Glassfish 4.1.0.

Les étapes que j'ai prises:

  1. Obtenez le fichier Manifest.mf mis à jour à partir de cet article (joint le 2015-03-26 06:08:50 EDT) https://bugs.Eclipse.org/bugs/show_bug.cgi?id= 463169

  2. Remplacez le fichier Manifest.mf du fichier org.Eclipse.persistence.moxy.jar par celui que vous avez téléchargé. Le fichier se trouve ici: {C}:\glassfish4\glassfish\modules\org.Eclipse.persistence.moxy.jar

  3. Redémarrer Glassfish

Merci à ceux qui ont posté et corrigé ce problème sur bugs.Eclipse.org

19
M. Cory

Au lieu de passer à la version 4.1.0, j'ai trouvé que le passage à Payara était un bon choix.

1
Dirk Conrad Coetsee