2016-11-23 2 views
0

Я пытаюсь создать очень простой сервер Restful в Eclipse с использованием джерси и GrizzlyHttpServerFactory. Ниже приведен код:Ошибка jersey для restful API с файлом jpg eclipse

Сервер

package com.example.rest; 
class WebServr{ 

    public static final String BASE_URI = "http://localhost:8080/myapp/"; 

    public static HttpServer startServer() { 
     // create a resource config that scans for JAX-RS resources and providers 
     // in com.example.rest package 
     final ResourceConfig rc = new ResourceConfig().packages("com.example.rest"); 

     // create and start a new instance of grizzly http server 
     // exposing the Jersey application at BASE_URI 
     return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); 
    } 

    public static void main(String[] args) { 
     WebServr wb = new WebServr(); 
     wb.startServer(); 
    } 
} 

Компонент Остальное

package com.example.rest; 
@Path("/amp") 
@Produces("text/html") 
public class Endpoint{ 
    @GET 
    @Path("/test") 
    public Response test() { 
     return Response.ok().entity("SUCCESS").build(); 
    } 
} 

Но когда я создаю простой файл «банку», экспортируя мои скомпилированные Java-файлы, используя выше код, я могу см. мой сервер работает (может видеть вывод в netstat -an | grep-порту), но мой спокойный клиент возвращается с ошибкой «404» (хотя я вижу, что на стороне сервера создается новое http-соединение). Но когда я создаю файл jar с использованием опции eclipse «Runnable jar», он отлично работает (мой клиент обслуживается должным образом). Может ли кто-нибудь дать какое-либо предположение, почему это происходит.

+0

Какой URL-адрес вы тестируете? Попробуйте это http: // localhost: 8080/myapp/amp/test –

+0

В обоих случаях я пытаюсь использовать тот же URL. Я фактически развертываю его на машине linux, и из «почтальона» я обращаюсь к своему URL-адресу сервера. Я чувствовал, что моя проблема связана с именем данного пакета (com.example.rest) в createHttpServer. Моя основная проблема заключается в том, что такая же база кода с двумя разными способами создания файла «jar» в eclipse ведет себя по-другому в этом случае. – pjain

+0

см. Этот вопрос/ответ http://stackoverflow.com/questions/31992461/how-to -run-jersey-server-webservice-server-without-use-tomcat – borowis

ответ

0

я столкнулся с аналогичной проблемой,

Короткий ответ: места ваших скомпилированные классов в web-inf/classes

Длинная версия :) Я убежден, что из-за ClassLoader в коте, web-inf/classes загружается до web-inf/lib, , когда вы размещаете свои классы в web-inf/classes, он загружается загрузчиком классов, затем при загрузке web-inf/lib банок , который джерси один из них, трикотаж просканирует заявленных классов, и найти их (WIN)

НО

когда классы находятся в файле JAR (в WEB-INF/Lib) они будут загружены да, но ПОСТОЯННО они загружаются после джерси, и в результате, когда трикотаж сканирует конечные точки, он ничего не найдет.

Я знаю, что этот вопрос немного устарел, но это может помочь кому-то столкнуться с такой же проблемой.

Для решения, на самом деле я все еще ищу, если я могу контролировать порядок баночки нагрузки, или я могу реализовать некоторые классы (Application, конфигурация) из трикотажа и выяснить способ, чтобы джерси найти их.

Смежные вопросы