2015-04-16 26 views
6

Sono abbastanza nuovo per Jersey REST. Seguo il tutorial http://javapapers.com/java/restful-web-services-with-java-jax-rs-using-jersey/. Funziona bene localmente su Tomcat 7. Ma quando lo distribuisco in Openshift, ho semplicemente ottenuto 404 non trovato.Jersey JAX-RS REST 404 in Openshift, funziona bene in Tomcat locale

Questo è il mio web.xml

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.market.ws</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

E questa è la mia risorsa

@Path("/api") 
public class TicketsResource { 
    // Allows to insert contextual objects into the class, 
    // e.g. ServletContext, Request, Response, UriInfo 
    @Context 
    UriInfo uriInfo; 
    @Context 
    Request request; 

    // Return the list of todos to the user in the browser 
    // With the browser you can only issue HTTP GET requests\ 
    @Path("/query") 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public List<Ticket> getTicketsBrowser() { 
     List<Ticket> tickets = new ArrayList<Ticket>(); 
     tickets.addAll(TicketDao.instance.getModel().values()); 
     return tickets; 
    } 

    // Return the list of todos for applications 
    // Default for browser GET 
    @Path("/query") 
    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public List<Ticket> getTickets() { 
     List<Ticket> tickets = new ArrayList<Ticket>(); 
     try { 
      tickets.addAll(TicketDao.instance.getModel().values()); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
     return tickets; 
    } 
} 

lo uso http://localhost:8080/myproject/api/query e funziona benissimo. Ma in openshift io uso http://market-domain.rhcloud.com/myproject/api/query o http://market-domain.rhcloud.com/api/query non funziona. Ho provato a distribuire utilizzando Tomcat 7 o JBoss AS 7, ma entrambi mi hanno dato lo stesso errore. Non ho trovato alcun errore nel file di registro. Sembra che la risorsa semplicemente non esista. Mi chiedo se il mio Url sia sbagliato o altro? Dovrei essere in grado di interrogare questo resto immediatamente dopo la distribuzione, giusto? Grazie in anticipo.

risposta

2

Finalmente ho scoperto che è il mio problema con i file di guerra. Ho usato maven build per 3 progetti ma non funziona. Quindi uso solo export war in Eclipse per generare file di guerra. Quindi la risorsa può essere trovata dopo la distribuzione.