Openshift 中的 Jersey JAX-RS REST 404,在本地运行良好 Tomcat
Jersey JAX-RS REST 404 in Openshift, working well in local Tomcat
我对 Jersey REST 还很陌生。我遵循教程 http://javapapers.com/java/restful-web-services-with-java-jax-rs-using-jersey/。它在 Tomcat 7 上本地运行良好。但是当我将它部署到 Openshift 时,我只是得到 404 not found。
这是我的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>
这是我的资源
@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;
}
}
我用 http://localhost:8080/myproject/api/query and it works fine. But in openshift I use http://market-domain.rhcloud.com/myproject/api/query or http://market-domain.rhcloud.com/api/query 它不起作用。我尝试使用 Tomcat 7 或 JBoss AS 7 进行部署,但它们都给了我同样的错误。我没有在日志文件中发现任何错误。看起来资源根本不存在。我想知道是我的 url 错了还是其他什么?我应该可以在部署后立即查询这个 rest ws,对吗?提前致谢。
最后我发现这是我的 war 文件问题。我为 3 个项目使用了 maven 构建,但它不起作用。然后我只是在 Eclipse 中使用 export war 来生成 war 文件。然后部署后就可以找到资源了。
我对 Jersey REST 还很陌生。我遵循教程 http://javapapers.com/java/restful-web-services-with-java-jax-rs-using-jersey/。它在 Tomcat 7 上本地运行良好。但是当我将它部署到 Openshift 时,我只是得到 404 not found。
这是我的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>
这是我的资源
@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;
}
}
我用 http://localhost:8080/myproject/api/query and it works fine. But in openshift I use http://market-domain.rhcloud.com/myproject/api/query or http://market-domain.rhcloud.com/api/query 它不起作用。我尝试使用 Tomcat 7 或 JBoss AS 7 进行部署,但它们都给了我同样的错误。我没有在日志文件中发现任何错误。看起来资源根本不存在。我想知道是我的 url 错了还是其他什么?我应该可以在部署后立即查询这个 rest ws,对吗?提前致谢。
最后我发现这是我的 war 文件问题。我为 3 个项目使用了 maven 构建,但它不起作用。然后我只是在 Eclipse 中使用 export war 来生成 war 文件。然后部署后就可以找到资源了。