2013-07-12 11 views
5

Sto provando a schierare un semplice servizio JAX-RS su GlassFish 4.0 e continuo a ricevere il seguente errore:REST servizio gli errori con: risorsa non è disponibile Glassfish 4,0 JAX-RS 2.0

HTTP Status 404 - Not Found 
type Status report 
messageNot Found 
descriptionThe requested resource is not available. 
GlassFish Server Open Source Edition 4.0 

file WAR distribuisce bene nel server Glassfish tuttavia sembra che il caricatore di classe non stia facendo il suo lavoro e esponendo il servizio di restituzione in modo appropriato. Sto cercando di capire perché la classe non sta caricando in modo appropriato. So che probabilmente è un semplice cambio di configurazione, ma non sono stato in grado di trovarlo.

Configurazione: GlassFish-web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <context-root>/reports</context-root> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
</glassfish-web-app> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>Jersey</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 

REST Service codice:

package com.esa.report.rest.service; 

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.enterprise.context.RequestScoped; 
import javax.ws.rs.core.MediaType; 

@Path("weeklyStatusReport") 
@RequestScoped 
public class WeeklyStatusReportService { 

    @Context 
    private UriInfo context; 

    public WeeklyStatusReportService() { 
    } 

    @GET 
    @Path("run/{esaId}") 
    @Produces({MediaType.APPLICATION_XHTML_XML}) 
    public String runReport(@PathParam("esaId") String esaId){ 
     return("Hello esaId: "+esaId); 
    } 

    @GET 
    @Produces("text/html") 
    public String getHtml() { 
     return("hello this is the weekly status report"); 
    } 

    @PUT 
    @Consumes("text/html") 
    public void putHtml(String content) { 
    } 
} 

La guerra viene distribuito con il contesto root di/reports e l'url che sto usando è :

http://localhost:8080/reports/rest/weeklyStatusReport/run/123 
+0

Non hai registrato le classi di servizio web da qualche parte? Il codice funziona su GlassFish 3? – perissf

risposta

25

Prima di tutto, scartare tutto quello che hai scritto in web.xml. Su GlassFish (e su tutti i contenitori JavaEE 7) JAX-RS funziona immediatamente, senza bisogno di alcuna configurazione.

Quindi è necessario avere nel classpath una sottoclasse javax.ws.rs.core.Application, che dichiara un @ApplicationPath("/") (ciò indica al contenitore di avviare il motore JAX-RS).

Le altre risorse verranno prelevate automaticamente dal server delle applicazioni.

+1

Grazie per il nostro aiuto Carlo. Ha funzionato come un fascino. – Stu

+0

Funziona anche senza Tomcat? –

+1

@MarioDennis In nessun modo, vedere [questo collegamento] (https://jersey.java.net/documentation/latest/modules-and-dependencies.html) –

Problemi correlati