jax-rs jax-ws_Google App Engine JAX-RS REST服务
jax-rs jax-ws
在本文中,您將學習如何使用JAX-RS參考實現(Jersey)創建REST服務并將其部署在Google AppEngine上。先決條件 對于本教程,您將需要:
- 一個Google AppEngine帳戶
- Eclipse Galileo(3.5.x)
- 適用于Java的Google App Engine SDK
- 按照此處所述安裝Eclipse的Google插件(檢查您是否正在使用GAE Java SDK的1.3.1版,如果未下載,請配置該插件以使用它)
- 在本地擁有AppEngine文檔也很有用,您可以從此處下載。
- JAX-RS參考實現,請確保您采用Jersey 1.1.5版本。 您可以從這里下載。
- 將文件解壓縮到我們稱為$ JERSEY_HOME的目錄中
- JAXB 2.2實現可簡化XML的編組/解組,并簡化JSON支持。 從這里下載
- 使用java -jar JAXB2_20091104.jar命令安裝它。 JAXB的安裝目錄將稱為$ JAXB_HOME
創建新的應用程序
要在Eclipse中創建新的App Engine項目,請執行以下操作:
- 項目名稱:EmployeeService
- 打包:com.grallandco.employee.service
- 取消選中“使用Google Web Toolkit”
- 檢查您使用的SDK版本是否為“ App Engine 1.3.0”; 如果沒有配置項目以使用它。
- 該屏幕應類似于以下屏幕:
- 點擊完成
- 該項目應類似于以下屏幕:
運行應用程序
隨Eclipse插件一起安裝的App Egine SDK包含一個Web服務器(基于Jetty),可用于測試和調試。 要測試是否已正確創建應用程序,請選擇菜單運行>運行方式> Web應用程序。 我大部分時間都使用調試命令運行>調試> Web應用程序運行服務器。 在調試模式下,您可以更改源代碼,并且無需重啟服務器即可進行測試。
Web服務器自動啟動,您應該在Eclipse控制臺中看到以下消息
服務器運行在http:// localhost:8080 /
您可以訪問該應用程序以及使用以下URL創建的樣本servlet:http:// localhost:8080 / employeeservice
要停止服務器,請單擊終止按鈕 在Eclipse控制臺中。
在應用程序中配置REST支持
為了能夠在您的應用程序中創建和運行REST服務,您需要:
- 在您的項目和應用程序中添加JAX-RS,JAXB Jars
- 配置Web應用程序(web.xml)以處理REST請求
將JAX-RS,JAXB添加到您的項目
注意:我不喜歡此步驟。 我希望通過配置構建路徑來執行此操作,以便在執行/部署應用程序時將JAR自動添加到WEB-INF / lib目錄中。 不幸的是我沒有找到方法,所以,如果您知道它,請隨時發表評論,我將更新本文。
配置Web應用程序
在此步驟中,您將注冊一個新的URI以處理REST請求。 為此,您需要注冊一個使用Jersey API的新servlet,并將其配置為特定的URI(例如:/ ressources和/或/ rest),然后配置包含REST實現類的Java軟件包。 因此,您需要使用以下條目修改應用程序的web.xml:
<servlet><servlet-name>Jersey Web Application</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.grallandco.employee.service.rest.impl</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/resources/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping> 該servlet將回答/ resources /和/ rest / URL。 澤西使用配置參數com.sun.jersey.config.property.packages列出REST服務實現所在的軟件包。請注意,您可以根據需要放置任意數量的軟件包,只需分隔軟件包名稱即可。由一個;創建一個簡單的REST服務以測試環境
現在,該項目已準備好包含REST服務。 現在是時候創建一個了。例如,創建類com.grallandco.employee.service.rest.impl.HelloWorldResource,請確保使用在web.xml中為Jersey servlet配置的包名稱。我們在上一步中進行的配置是com.grallandco.employee.service.rest.impl
這里是帶有JAX-RS批注的示例類:
package com.grallandco.employee.service.rest.impl; import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.Produces; @Path("/hr/") public class EmployeeResource {@GET@Produces("text/plain")@Path("/employee") public String getEmployee() {return "Hello World!";} } 您應該能夠對其進行測試,停止服務器并再次運行它,然后在瀏覽器中輸入以下URL:
http:// localhost:8080 / resources / hr / employee
要么 http:// localhost:8080 / rest / hr / employee
將應用程序部署到Google App Engine
在部署應用程序之前,您需要使用Administartion控制臺在Google App Engine中注冊新應用程序,請參閱此處的文檔。 在我的示例中,我使用“ tugdual”作為應用程序ID。
現在,您可以通過單擊Eclipse工具欄中的“部署App Engine項目”按鈕輕松地將應用程序部署到Google App Engine。
為了將您的應用程序部署到Google App Engine,您需要檢查您的應用程序是否可以注冊,該應用程序ID存儲在WEB-INF / lib / appengine-web.xml中。
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"><application>[your-application-id]</application> <version>1</version> <!-- Configure java.util.logging --><system-properties><property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/></system-properties> </appengine-web-app>App Engine部署按鈕會提示您輸入多個信息:用戶名(您的Google帳戶)和密碼。
部署完成后,您可以使用以下URL訪問您的應用程序:
http:// [your-application-id] .appspot.com / resources / hr / employee
要么 http:// [您的應用程序ID] .appspot.com / rest / hr / employee
將XML和JSON支持到服務
現在,讓我們添加新的方法來使用服務來操作“ Employee”對象,并且數據格式應基于JSON和XML。 這是JAXB有用的地方,因為它可以輕松地轉換XML(顯然)和JSON中的marshall / unmarshall Java對象(不是很酷!)。
創建員工類
從創建一個用于處理Employee數據的新類開始,這是一個非常簡單的Java類,可能類似于以下代碼:
package com.grallandco.employee.service.model; import java.util.Date;public class Employee {private String firstName;private String lastName;private Date hireDate;private String email; public Employee(String firstName, String lastName, Date hireDate, String email) {this.firstName = firstName;this.lastName = lastName;this.hireDate = hireDate;this.email = email;}public Employee() {}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Date getHireDate() {return hireDate;}public void setHireDate(Date hireDate) {this.hireDate = hireDate;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String toString() {StringBuffer sb = new StringBuffer();sb.append("First: ").append(getFirstName());sb.append(" - Last: ").append(getLastName());sb.append(" - Date: ").append(getHireDate());sb.append(" - Email: ").append(getEmail());return sb.toString();} }當使用某些持久層實現“真實”應用程序時,此POJO是作為JDO / JPA實體的一個。
為您的實體創建一個Converter類
我通常將所有轉換封裝在某個轉換器類中,這樣我就不會將我的業務類直接耦合到序列化機制。 (因此,我對類和類列表進行了此操作)。 因此,我們不要將JAXB批注添加到Employee類本身,而是創建一個EmployeeConverter類,該類負責轉換并由REST服務使用。
package com.grallandco.employee.service.converter;import java.util.Date; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import com.grallandco.employee.service.model.Employee;@XmlRootElement(name = "employee") public class EmployeeConverter {private Employee entity = null;public EmployeeConverter() {entity = new Employee();}public EmployeeConverter(Employee entity) {this.entity = entity;}@XmlElementpublic String getFirstName() {return entity.getFirstName();}@XmlElementpublic String getLastName() {return entity.getLastName();}@XmlElementpublic Date getHireDate() {return entity.getHireDate();}@XmlElementpublic String getEmail() {return entity.getEmail();}public Employee getEmployee() {return entity;}public void setFirstName(String firstName) {entity.setFirstName(firstName);}public void setHireDate(Date hireDate) {entity.setHireDate(hireDate);}public void setLastName(String email) {entity.setEmail(email);}public void setEmail(String lastName) {entity.setLastName(lastName);} }現在,您可以更新服務,以使用此實用程序/轉換器類根據請求的內容類型返回XML或JSON對象。
將JSON和XML支持添加到REST服務
您需要更改EmployeeRessource類,更改簽名并添加getEmployee()方法的新注釋。
您要添加的注釋:
- @Produces({“ application / xml”,“ application / json”}):指示服務將產生哪種類型的內容。 基于請求的類型。
- @Path(“ / employee / {employeeEmail} /”):更改Path以指示Path參數,例如,URL可以接受URI中的電子郵件-不是最好的例子,但是您明白了……
- public EmployeeConverter getEmployee(@PathParam(“ employeeEmail”)字符串電子郵件):更改方法返回的類型,并采用與@Path批注中定義的Path參數相匹配的參數String。
這里是完整的類代碼:
package com.grallandco.employee.service.rest.impl;import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import com.grallandco.employee.service.converter.EmployeeConverter; import com.grallandco.employee.service.model.Employee;@Path("/hr/") public class EmployeeRessource {@GET@Produces({"application/xml", "application/json"})@Path("/employee/{employeeEmail}/") public EmployeeConverter getEmployee( @PathParam ("employeeEmail") String email) {//dummy codeEmployee emp = new Employee();emp.setEmail(email);emp.setFirstName("John");emp.setLastName("Doe");EmployeeConverter converter = new EmployeeConverter(emp);return converter;} }測試服務
您現在可以在本地運行服務器并測試服務
http:// localhost:8080/resources/hr/employee/tug@grallandco.com
這將返回一個XML文檔。 如果要測試JSON調用,則有多種選擇:
- 使用以下命令
- 我使用的是HTTP客戶端,它允許您完全配置/設置HTTP請求,而我使用的是Poster Firefox插件
- 在應用程序中使用一些Javascript代碼
您可以在Google App Engine上對已部署的應用程序重復測試。
結論
在本文中,您學習了如何在Google App Engine上創建和部署新的REST服務。 該服務是通過“ JAX-RS參考實施澤西”項目創建的。 在下一篇文章中,您將學習如何在Google App Engine上添加持久性和創建CRUD Rest服務。
參考: Tug博客博客中的JCG合作伙伴 Tugdual Grall在Google App Engine上創建和部署JAX-RS REST服務 。
翻譯自: https://www.javacodegeeks.com/2012/05/google-app-engine-jax-rs-rest-service.html
jax-rs jax-ws
總結
以上是生活随笔為你收集整理的jax-rs jax-ws_Google App Engine JAX-RS REST服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吃鸡n卡设置(吃鸡n卡设置提高帧数)
- 下一篇: 用Java测试多线程代码