Этот простой класс корневого ресурса не работает при работе на TomEE + 1.5.1, return - ошибка 404 "Запрошенный ресурс недоступен «. Он упакован как WAR с и пустой файл web.xml в WEB-INF.Веб-сервис JAX-RS с использованием @Path ("/") на уровне класса не работает на TomEE + 1.5.1
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
@Path("/")
@Produces({ "text/plain", "text/html", "text/xml", "application/xml", "application/json" })
public class BrokenResource {
private static final Log logger = LogFactory.getLog(BrokenResource.class);
public BrokenResource()
{
logger.info("constructed");
}
@GET
@Path("getloggedinguids")
public Response foo(@Context UriInfo uInfo)
{
return Response.ok("\n\n\nrequest URI = " + uInfo.getRequestUri()).build();
}
}
Он разворачивает и я вижу эти строки в консоли вывода:
Mar 22, 2013 4:56:16 PM org.apache.openejb.server.rest.RESTService deployPojo
INFO: REST Service: http://localhost:8080/test//* -> Pojo BrokenResource
Я также пробовал упаковки его с web.xml, объявляющего:
<servlet>
<servlet-name>test</servlet-name>
<display-name>Test OpenEJBRest Servlet</display-name>
<servlet-class>
org.apache.openejb.server.rest.OpenEJBRestServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Те же результаты, как с пустым файлом web.xml.
Я также попытался изменить @Path аннотацию уровня класса к @Path («*»), а затем я получаю другой ответ, в консоли вывода я вижу следующую строку:
WARNING: No root resource matching request path /test/getloggedinguids has been found, Relative Path: /getloggedinguids.
Наконец .. если я изменю аннотацию @Path на что-то вроде @Path ("/ foo"), то это работает точно так, как ожидалось ... hit/test/foo/getloggedinguids возвращает URI запроса.
Я пытаюсь всевозможные вариации отображения сервлетов по сравнению с аннотациями уровня класса и одна вещь согласована ... аннотация @Path («/») на уровне класса всегда терпит неудачу.
Я даже взял пример из «RESTful Java с помощью JAX-RS book», который использует класс @Path («/») на уровне класса ... который также терпит неудачу.
Является ли это ошибкой в реализации CXF стандарта JAX-RS? Мой проект требует, чтобы я использовал контейнер TomEE +, поэтому я не могу переключиться на другую реализацию JAX-RS :-(