Хотя это один древний вопрос, я все еще не могу найти ответ, чтобы сделать эту работу. Пожалуйста, исправьте, если вы обнаружите, что какое-либо из моих утверждений неверно.
У меня есть приложение Java Face и используйте REST для веб-служб. Я не думаю, что Лицо имеет какое-либо отношение к моей проблеме. Веб файл:
<servlet>
<servlet-name>NDREST</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.bi.nd.webservice</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NDREST</servlet-name>
<url-pattern>/nd/*</url-pattern>
</servlet-mapping>
У меня есть еще несколько сервлетов в web.xml, поскольку это приложение Face с Trinidad и т.д.
В пакете com.bi.nd.webservice мой класс ресурсов:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Produces(MediaType.APPLICATION_XML)
@Path("/hello")
public class TransactionResource
{
public TransactionResource()
{
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String itWorks()
{
return "Get is OK";
}
}
Тот факт, что мой класс имеет @GET, достаточно, чтобы идентифицировать себя как класс ресурсов.
Не говоря уже о всех других сложностях, я скомпилировал исходный код с Ant в Eclipse, и я получил эту ошибку в файле catalina.out:
May 24, 2011 8:48:46 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.bi.nd.webservice
May 24, 2011 8:48:46 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.7 05/20/2011 11:04 AM'
May 24, 2011 8:48:46 AM com.sun.jersey.server.impl.application.RootResourceUriRules <init>
SEVERE: The ResourceConfig instance does not contain any root resource classes.
Некоторые предложили скопировать asm.jar, jsr-api.jar, jersey-server.jar и jersey-core.jar в приложение WEB-INF/lib. Я сделал это, и он все еще не работал. Я нашел предложение немного странным, так как WEB-INF/lib - это место, где Eclipse будет устанавливать все библиотеки зависимостей из пути сборки. Это не место, где мы вручную размещаем библиотеки.
Некоторые объяснили, что эта ошибка имеет какое-то отношение к подключаемому модулю Java и тому, как была написана Джерси. Но это было много лет назад.
Может ли кто-нибудь объяснить мне, почему у меня такая проблема?
Followup: Хотя на веб-сайте REST класс ресурсов, определенный как классы ресурсов Root, представляет собой POJO (обычные старые объекты Java), которые либо аннотируются с помощью @Path, либо имеют хотя бы один метод, аннотированный с помощью @Path или указателем метода запроса, таким как @GET, @PUT, @POST или @DELETE. Методы ресурсов - это методы класса ресурсов, аннотированные с помощью указателя метода запроса. В этом разделе описывается использование Джерси для аннотирования объектов Java для создания веб-служб RESTful.
Мне нужно добавить @Path ( "/hello" ) в мой класс, и вдруг Джерси найдет мой класс ресурсов
Теперь файл catalina.out выглядит так:
May 24, 2011 3:13:02 PM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.bi.nd.webservice
May 24, 2011 3:13:02 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class com.bi.nd.webservice.TransactionResource
May 24, 2011 3:13:02 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
May 24, 2011 3:13:02 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.7 05/20/2011 11:04 AM'
Но проблема еще далека от завершения. Я пытаюсь получить доступ к URL http://localhost:8080/nd/hello
, и я все еще получаю 404 NOT FOUND. Является ли класс провайдера NOT FOUND важным сообщением?