2016-07-31 19 views
0

私はJerseyでプロジェクトをセットアップしようとしていますが、基本的に2つのサーブレットを持っています。クライアントアプリケーションによるプライベートなものと、APIとして機能するものです。 apiコールはプライベートコールのサブセットです。 (これが関連している場合、私のクライアント側はRestyGWTを持つGWTです)。プライベートサーブレットは、それらのパッケージの両方を包含する必要があります
ジャージー2つのサーブレットを設定する

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

:私のリソースは、すべてのいずれかに格納されていますapiはapiパッケージのみを使用します。

私はこのように見て、私の内部コールたい:

ます。https:// localhostを:8445 /リソース/認証/ログイン

を、私のAPIは、このように見えるように呼び出します。

HTTPS :// localhostを: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を訪問

:// localhostを:8445、 findActiveSession( Chromeのネットワークモニタに示すように)メソッドは私のクライアントから呼び出されたが、私は404のサービスのURLを取得しているが、次のようになります

ます。https:// localhostを:8445 /リソース/認証/ findActiveSession

どのようなものがどのような経路を必要とするのかは非常に混乱しています。私が不明なこと:

AuthenticationResourceパスは正しいですか?パス注釈が必要なのでしょうか?

プライベートサーブレットがjavax.ws.rs.core.Applicationを使用するのは正しいですか?

アプリケーションサブクラス(ApiApplication)でカスタムサーブレットを正しく設定していますか?

+0

アプリケーションをアプリケーションサーバーのルートコンテキストに展開しましたか? – JimHawkins

+0

あなたの 'web.xml'は奇妙に見えます。 [Jersey](https://jersey.java)を見てください。 – 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> 

私は、アプリケーションのサブクラスを必要とするまで終わりませんでした。

関連する問題