2015-10-24 22 views
11

Sto cercando di implementare il supporto Json in un progetto JavaEE ma ho riscontrato problemi con le eccezioni relative a MOXy generate. Ho letto su jersey.java.net che MOXy dovrebbe essere autodiscoverable ma non sembra funzionare quando provo.MOXy eccezioni nel progetto JavaEE Jersey 2.0

Quindi, per rendere questo facile individuare ho appena generato un nuovo 'jersey-QuickStart-webapp' del progetto e cambiato MyResource come di seguito (il mio obiettivo è quello di utilizzare una classe di applicazione, invece di web.xml, ma questo è stato il modo più semplice e preciso per individuarlo. L'errore si verifica indipendentemente da cosa).

@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 (nel pacchetto stesso):

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

ho schierato questo su un pulito Glassfish 4.1.1 utilizzando IntelliJ. Dopo questo ricevo

java.lang.ClassNotFoundException: javax.xml.parsers.ParserConfigurationException not found by org.eclipse.persistence.moxy

Quindi aggiungo beans.xml come di seguito (provato vuoto così come ho visto indicato nei documenti di 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> 

e ottengo questo errore durante la distribuzione di

java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper

Ho provato, per divertimento, rimuovendo il web.xml, cambiando la dipendenza jersey-container-servlet-core a jersey-container-servlet e creazione di una classe di applicazione invece (come discusso in ContainerRequestFilter wont run in JavaEE jersey project) ma dà lo stesso errore. Infatti dà lo stesso errore se si pubblica un progetto dipendente da javaee-api 7.0 pulito invece delle dipendenze di jersey e ha dato lo stesso errore (suppongo che glassfish usi jersey in ogni caso).

Quindi immagino che mi manchi qualcosa qui, un'anima gentile che potrebbe riempirmi di cosa? :)

risposta

15

Downgraded to Glassfish 4.1.0 e quindi ha funzionato perfettamente. Qualche problema forse con la versione 4.1.1? Proverò anche la notte ma ora funziona.

+1

Grazie per aver salvato la mia sanità mentale. – fatihpense

+0

Grazie per le preziose informazioni. –

+2

Link diretto per i pigri: https://glassfish.java.net/download-archive.html – Fergal

18

sono riuscito a superare questo problema aggiornando il Manifesto nel file org.eclipse.persistence.moxy.jar che viene fornito con Glassfish 4.1.1, piuttosto che il downgrade a Glassfish 4.1.0

passaggi ho preso :

  1. ottenere il file MANIFEST.MF aggiornato da questo post (attaccato su 2015/03/26 06:08:50 EDT) https://bugs.eclipse.org/bugs/show_bug.cgi?id=463169

  2. Sostituire il file MANIFEST.MF in org. eclipse.persistence.moxy.jar fil e con quello che hai scaricato. Il file si trova qui: {c}: \ glassfish4 \ glassfish \ modules \ org.eclipse.persistence.moxy.jar

  3. Restart Glassfish

Grazie a coloro che hanno pubblicato e risolto questo problema su bugs.eclipse.org

+1

I just [scaricato eclipse versione 2.6.1] (http://www.eclipse.org/downloads/download.php?file=/rt/eclipselink/updates/2.6.1.v20150916-55dc7c3.zip) e afferrato 'org.eclipse .persistence.moxy.jar' e ha sostituito quello nella mia cartella '.../glassfish4/glassfish/modules /' con la nuova. Sembra funzionare bene per me. Grazie per la risposta! –

+0

Mi ha salvato !!! Grazie. – Mordechai

+0

Questa dovrebbe essere la risposta per chi è bloccato con 4.1.1 – kosgeinsky

1

Invece di downgrade a 4.1.0, ho trovato un interruttore per Payara una buona scommessa.