2016-07-31 9 views
0

Я пытаюсь настроить свой проект на Джерси, чтобы в основном иметь 2 сервлета: частный для доступа к клиентскому приложению и публичный, который работает как API. Апи звонки являются подмножеством частных. (В случае, если это имеет значение, моя клиентская сторона - GWT с RestyGWT). Мои ресурсы сохраняются все в любом:Jersey Настройка 2 сервлетов

com.path.to.server.resources.internal
com.path.to.server.resources.api

Где частный сервлет должен включать в себя оба этих пакетов , и api должен использовать только пакет api.

Я хотел бы мои внутренние вызовы выглядеть следующим образом:

https: // локальный: 8445/ресурсы/аутентификации/входа

и мой апи вызовы выглядеть следующим образом:

HTTPS : // локальный: 8445/API/пользователей/GetUser

Моя web.xml выглядит следующим образом:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 

    <!-- Servlets --> 
    <servlet> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api;com.path.to.server.resources.internal</param-value> 
     </init-param> 
    </servlet> 

    <servlet> 
     <servlet-name>com.path.to.server.ApiApplication</servlet-name> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <url-pattern>/resources/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>com.path.to.server.ApiApplication</servlet-name> 
     <url-pattern>/api</url-pattern> 
    </servlet-mapping> 

</web-app> 

У меня есть установка ApiApplication так:

public class ApiApplication extends ResourceConfig 
{ 
    public ApiApplication() 
    { 
     System.out.println("SETTING UP API"); 
     packages("com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api"); 
    } 
} 

Теперь у меня есть все, что установка, я пытался ударить мою службу. Я использую DirectRestService который выглядит следующим образом:

@Path("resources/authentication") 
public interface AuthenticationService extends BaseService 
{ 
    @POST 
    @Path("/login/{loginType}") 
    @Produces(MediaType.APPLICATION_JSON) 
    Session login(@HeaderParam("Authorization") String authorization, @PathParam("loginType") UserTypes loginType); 

    @POST 
    @Path("/findActiveSession") 
    @Produces(MediaType.APPLICATION_JSON) 
    Session findActiveSession(); 
} 

Ресурс-сервер, реализующий который выглядит следующим образом:

@Path("authentication") 
public class AuthenticationResource extends BaseResource implements AuthenticationService 
{ 
    public Session login(String authorization, UserTypes loginType) 
    { 
     // Code to do stuff 
    } 

    public Session findActiveSession() 
    { 
     // Code to do stuff 
    } 
} 

Когда я посещаю https: // локальный: 8445, то findActiveSession () метод вызывается из моего клиента, но я получаю 404. URL-адрес службы, как показано в сетевом мониторе Chrome выглядит следующим образом:

https: // локальный: 8445/ресурсы/аутентификации/findActiveSession

Это все очень запутывает, какие вещи нужны, какие пути. Вещи, о которых я не уверен:

Правильно ли это путь проверки подлинности? Нужно ли даже аннотацию Path?

Правильно ли для частного сервлета использовать javax.ws.rs.core.Application?

Правильно ли я настраиваю пользовательский сервлет с помощью подкласса Application (ApiApplication)?

+0

Разверните приложение в корневом контексте сервера приложений? – JimHawkins

+0

Ваш 'web.xml' выглядит странно. Взгляните на [Джерси] (https://jersey.java.net/documentation/latest/deployment.html # deployment.servlet) – JimHawkins

+0

@JimHawkins Прямо сейчас, я использую плагин maven tomcat для тестирования. Можете ли вы сказать мне, что выглядит странно? Связанная вами страница - это то, что я использовал, чтобы зайти так далеко. – Troncoso

ответ

0

У меня наконец появилось решение, которое работает. Я не знаю, если это совершенно правильно, но это дает мне результаты, я хочу:

Мой web.xml

<web-app id="WebApp_ID" version="3.0" [...]> 
    <!-- Servlet for direct client/server calls --> 
    <servlet> 
     <servlet-name>EcoPortalApplication</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value> 
       path.to.server.resources.exceptionmappers,path.to.server.resources.api,path.to.server.resources.internal 
      </param-value> 
     </init-param> 
    </servlet> 

    <!-- Servlet for API calls --> 
    <servlet> 
     <servlet-name>ApiApplication</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value> 
       path.to.server.resources.exceptionmappers,path.to.server.resources.api 
      </param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>EcoPortalApplication</servlet-name> 
     <url-pattern>/resources/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>ApiApplication</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Я не заканчивал необходимости подклассы приложений.

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

  • Нет связанных вопросов^_^