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? :)
Grazie per aver salvato la mia sanità mentale. – fatihpense
Grazie per le preziose informazioni. –
Link diretto per i pigri: https://glassfish.java.net/download-archive.html – Fergal