1. 程式人生 > >Jersey 2.x 探索新建的工程

Jersey 2.x 探索新建的工程

如果用 Jersey maven archetype 成功建立了這個專案,那麼在你當前的路徑下就已經建立了一個名為simple-service專案。它包含了一個標準的Maven專案結構:

說明 檔案目錄
在專案根目錄下的的專案構建和管理配置描述檔案  pom.xml
專案原始碼檔案 src/main/java
專案測試原始碼 src/test/java

在原文路徑下的com.example包中有兩個 class 檔案,這個 Main 類主要是負責啟動 Grizzly 容器,同時也為這個容器配置和部署 JAX-RS 應用。

在同一個包內的另外一個類 MyResource 類是 JAX-RS 的一個實現的原始碼,如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package  com.example;   import  javax.ws.rs.GET; import  javax.ws.rs.Path; import  javax.ws.rs.Produces; import  javax.ws.rs.core.MediaType;   /**   * Root resource (exposed at "myresource" path)   */ @Path ( "myresource" ) public  class  MyResource {        /**       * Method handling HTTP GET requests. The returned object will be sent       * to the client as "text/plain" media type.       *       * @return String that will be returned as a text/plain response.       */      @GET      @Produces (MediaType.TEXT_PLAIN)      public  String getIt() {          return  "Got it!" ;      } }

一個 JAX-RS 資源是一個可以處理綁定了資源的URI的HTTP請求的帶有註解的POJO,詳細內容可以看第三章。在我們的例子中,單一的資源暴露了一個公開的方法,能夠處理HTTP GET請求,繫結在/myresourceURI路徑下,可以產生媒體型別為“text/plain”的響應訊息。在這個示例中,資源返回相同的“Got it!”應對所有客戶端的要求。

src/test/java目錄下的 MyResourceTest 類是對 MyResource 的單元測試,他們具有相同的包 com.example 中。但是這個單元測試類被放置到 maven 工程中的測試原始碼目錄下 src/test/java(為了增加程式碼的簡潔性,一些程式碼的註釋和 JUnit 的匯入類被省略了)。

package  com.example;   import  javax.ws.rs.client.Client; import  javax.ws.rs.client.ClientBuilder; import  javax.ws.rs.client.WebTarget;   import  org.glassfish.grizzly.http.server.HttpServer;   ...   public  class  MyResourceTest {        private  HttpServer server;      private  WebTarget target;        @Before      public  void  setUp()  throws  Exception {          server = Main.startServer();            Client c = ClientBuilder.newClient();          target = c.target(Main.BASE_URI);      }        @After      public  void  tearDown()  throws  Exception {          server.stop();      }        /**       * Test to see that the message "Got it!" is sent in the response.       */      @Test      public  void  testGetIt() {          String responseMsg = target.path( "myresource" ).request().get(String. class );          assertEquals( "Got it!" , responseMsg);      } }

在這個單元測試中靜態方法 Main.startServer()首先將 Grizzly 容器啟動,然後伺服器應用部署到測試中的 setUp() 方法。接下來,一個JAX-RS 客戶端元件在相同的測試方法建立。 先是一個新的JAX-RS客戶端例項生成,接著JAX-RS web target 部件指向我們部署的應用程式上下文的 root:http://localhost:8080/myapp/( Main.BASE_URI 的常量值)儲存在單元測試類目標區。這個區被用於實際的單元測試方法(testgetit())。

在 testgetit() 方法中,JAX-RS 客戶端 API 是用來連線併發送 HTTP GET 請求的 MyResource JAX-RS 資源類偵聽在/myresource 的URI。同樣作為 JAX-RS API 方法呼叫鏈的一部分,迴應以Java字串型別被讀到。在測試方法的第二行,響應的內容(從伺服器返回的字串)跟測試斷言預期短語比較。要了解更多有關使用 JAX-RS 客戶端API,請參閱第5章客戶端API

  https://www.cwiki.us/display/JERSEYZH/Exploring+the+Newly+Created+Project