日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开发自上而下的Web服务项目

發(fā)布時(shí)間:2023/12/3 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发自上而下的Web服务项目 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是從Alessio Soldano編輯的Advanced JAX-WS Web Services手冊中摘錄的示例章節(jié)。

第一章介紹了自底向上創(chuàng)建Web服務(wù)端點(diǎn)的方法。 它允許非常快地將現(xiàn)有bean作為Web Service端點(diǎn)公開:在大多數(shù)情況下,將類轉(zhuǎn)換為端點(diǎn)只需在代碼中添加少量注釋即可。

但是,當(dāng)使用已定義的合同開發(fā)服務(wù)時(shí),使用自頂向下方法要簡單得多(有效),因?yàn)?strong>wsdl-to-java工具可以生成與WSDL匹配的帶注釋的代碼。 這是在多種情況下(例如以下情況)的首選解決方案:

  • 創(chuàng)建一個(gè)服務(wù),該服務(wù)遵循預(yù)先開發(fā)的XML Schema和WSDL;
  • 公開符合第三方規(guī)定的合同的服務(wù)(例如,使用已定義的一組消息調(diào)用該服務(wù)的供應(yīng)商);
  • 在保持與較舊客戶端的兼容性的同時(shí),替換現(xiàn)有Web Service的實(shí)現(xiàn)(不得更改合同)。

在下一節(jié)中,將提供一個(gè)自上而下的 Web Service端點(diǎn)開發(fā)示例,以及有關(guān)開發(fā)人員在編碼時(shí)必須意識到的約束的一些詳細(xì)信息,無論選擇哪種方法。

使用自上而下的方法創(chuàng)建Web服務(wù)

為了建立一個(gè)包括Web服務(wù)端點(diǎn)和JAX-WS客戶端的完整項(xiàng)目,我們將使用兩個(gè)Maven項(xiàng)目。 第一個(gè)將是一個(gè)標(biāo)準(zhǔn)的webapp-javaee7項(xiàng)目,其中將包含Web服務(wù)端點(diǎn)。 第二個(gè)只是一個(gè)快速啟動(dòng)的Maven項(xiàng)目,它將對Web Service執(zhí)行一個(gè)測試用例。

讓我們像往常一樣開始創(chuàng)建服務(wù)器項(xiàng)目:

mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=0.4-SNAPSHOT -DarchetypeRepository=https://nexus.codehaus.org/content/repositories/snapshots -DgroupId=com.itbuzzpress.chapter2.wsdemo -DartifactId=ws-demo2 -Dversion=1.0 -Dpackage=com.itbuzzpress.chapter2.wsdemo -Darchetype.interactive=false --batch-mode --update-snapshots archetype:generate

下一步將根據(jù)WSDL合同創(chuàng)建Web服務(wù)接口和存根。 步驟與為同一合同建立客戶的步驟相似。 唯一的區(qū)別是wsconsume腳本會(huì)將生成的源文件輸出到我們的Maven項(xiàng)目中:

$ wsconsume.bat -k CustomerService.wsdl -o ws-demo-wsdl\src\main\java

除了本章開始討論的生成的類之外,我們還需要提供一個(gè)包含Web服務(wù)功能的服務(wù)端點(diǎn)實(shí)現(xiàn)

@WebService(endpointInterface="org.jboss.test.ws.jaxws.samples.webresult.Customer") public class CustomerImpl implements Customer {public CustomerRecord locateCustomer(String firstName, String lastName, USAddress address) {CustomerRecord cr = new CustomerRecord();cr.setFirstName(firstName);cr.setLastName(lastName);return cr;} }

端點(diǎn)實(shí)現(xiàn)類實(shí)現(xiàn)端點(diǎn)接口并通過@WebService批注引用它。 我們的WebService類什么也沒做,只是使用接收到的參數(shù)作為輸入創(chuàng)建一個(gè)CustomerRecord對象。 在一個(gè)真實(shí)的示例中,您將使用例如持久層來收集CustomerRecord。

一旦將實(shí)現(xiàn)類包含在項(xiàng)目中,則需要將項(xiàng)目打包并部署到目標(biāo)容器,這將使用與該工具使用的相同的合約公開服務(wù)端點(diǎn)。

還可以在服務(wù)接口的@WebService wsdlLocation屬性中引用本地WSDL文件,并將該文件包含在部署中。 這樣可以準(zhǔn)確地提供所提供的文檔。

如果要將Web服務(wù)部署到WildFly應(yīng)用程序服務(wù)器,則可以從管理控制臺(如管理控制臺)中檢查端點(diǎn)現(xiàn)在是否可用。 選擇“上層運(yùn)行時(shí)”選項(xiàng)卡,然后單擊“左側(cè)子系統(tǒng)左側(cè)”選項(xiàng)中包含的“ Web服務(wù)”鏈接:

JAX-WS端點(diǎn)的需求

無論選擇哪種方法來開發(fā)JAX-WS端點(diǎn),實(shí)際的實(shí)現(xiàn)都需要滿足一些要求:

  • 必須使用j avax.jws.WebService或javax.jws.WebServiceProvider批注對實(shí)現(xiàn)類進(jìn)行批注。
  • 實(shí)現(xiàn)類可以通過@WebService批注的endpointInterface元素顯式引用服務(wù)終結(jié)點(diǎn)接口,但這不是必需的。 如果@WebService中沒有指定endpointInterface,服務(wù)端點(diǎn)接口被隱含的實(shí)現(xiàn)類定義。
  • 實(shí)現(xiàn)類的業(yè)務(wù)方法必須是公共的,并且不能聲明為靜態(tài)或最終的。
  • javax.jws.WebMethod批注將用于公開給Web服務(wù)客戶端的業(yè)務(wù)方法。 如果沒有使用@WebMethod注釋任何方法,則將公開所有業(yè)務(wù)方法。
  • 向Web服務(wù)客戶端公開的業(yè)務(wù)方法必須具有與JAXB兼容的參數(shù)和返回類型。
  • 實(shí)現(xiàn)類不能聲明為final,并且不能抽象。
  • 實(shí)現(xiàn)類必須具有默認(rèn)的公共構(gòu)造函數(shù),并且不能定義finalize方法。
  • 實(shí)現(xiàn)類可以在其方法中為生命周期事件回調(diào)使用javax.annotation.PostConstruct或javax.annotation.PreDestroy注釋。

構(gòu)建和運(yùn)行JAX-WS客戶端的要求

JAX-WS客戶端可以是任何Java項(xiàng)目的一部分,并且不需要明確要求它是部署在JavaEE容器上的JAR / WAR歸檔的一部分。 例如,客戶端可以簡單地包含在快速入門Maven項(xiàng)目中,如下所示:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.itbuzzpress.chapter2.wsdemo -DartifactId=client-demo-wsdl -Dversion=1.0 -Dpackage=com.itbuzzpress.chapter2.wsdemo -Dversion=1.0 -Darchetype.interactive=false --batch-mode

由于您的客戶端需要引用端點(diǎn)接口和存根,因此需要提供它們或者從服務(wù)器項(xiàng)目復(fù)制它們,或者使用wsconsume再次生成它們:

$ wsconsume.bat -k CustomerService.wsdl -o client-demo-wsdl\src\main\java

現(xiàn)在包括一個(gè)最小的Client Test應(yīng)用程序,它是JUnit測試用例的一部分:

public class AppTest extends TestCase {public void testApp() {CustomerService service = new CustomerService();Customer port = service.getCustomerPort();CustomerRecord record = port.locateCustomer("John", "Li", new USAddress()); System.out.println("Customer record is " +record);assertNotNull(record);} }

編譯并運(yùn)行測試

為了成功運(yùn)行WS客戶端應(yīng)用程序,需要正確設(shè)置類加載器,以包括所需的JAX-WS實(shí)現(xiàn)庫(以及所需的傳遞依賴項(xiàng)(如果有))。 根據(jù)客戶端要在其中運(yùn)行的環(huán)境,這可能意味著向類路徑添加了一些jar,或者向Maven依賴關(guān)系樹添加了一些工件依賴項(xiàng),正確設(shè)置了IDE等。

由于Maven用于構(gòu)建包含客戶端的應(yīng)用程序,因此您可以按以下方式配置pom.xml ,使其包含對JBossWS的依賴關(guān)系:

<dependency><groupId>org.jboss.ws.cxf</groupId> <artifactId>jbossws-cxf-client</artifactId> <version>4.2.3.Final</version><scope>provided</scope> </dependency>

現(xiàn)在,您可以執(zhí)行測試用例,該用例將調(diào)用JAX-WS API以使用JBossWS服務(wù)客戶端調(diào)用。

mvn clean package test

專注于客戶端使用的JAX-WS實(shí)現(xiàn)

通過在應(yīng)用程序類加載器中查找META-INF / services / javax.xml.ws.spi.Provider資源,可以在運(yùn)行時(shí)選擇要用于運(yùn)行JAX-WS客戶端的JAX-WS實(shí)現(xiàn)。 每個(gè)JAX-WS實(shí)現(xiàn)都有一個(gè)庫(jar),該庫包含該資源文件,該資源文件在內(nèi)部引用實(shí)現(xiàn)JAX-WS SPI提供程序的適當(dāng)類。

在WildFly 8.0.0.Final應(yīng)用程序服務(wù)器上,JAX-WS實(shí)現(xiàn)包含在文件jbossws-cxf-factories-4.2.3.Final的META-INF / services / javax.xml.ws.spi.Provider中:

org.jboss.wsf.stack.cxf.client.ProviderImpl

因此,控制構(gòu)建應(yīng)用程序類加載器的類路徑中包含哪些工件或jar庫非常重要。 如果找到多個(gè)實(shí)現(xiàn),則順序很重要,因此將使用類路徑中的第一個(gè)實(shí)現(xiàn)。

避免任何類路徑問題(從而加載另一個(gè)JAX-WS實(shí)現(xiàn))的最安全方法是將java.endorsed.dirs系統(tǒng)屬性設(shè)置為包含jbossws-cxf-factories.jar; 如果不這樣做,請確保沒有在類路徑之前包含其他META-INF / services / javax.xml.ws.spi.Provider資源,這將觸發(fā)另一個(gè)JAX-WS實(shí)現(xiàn)。

最后,如果打算將JAX-WS客戶端作為JavaEE應(yīng)用程序的一部分在WildFly上運(yùn)行,則將自動(dòng)選擇JBossWS JAX-WS實(shí)現(xiàn)來為客戶端提供服務(wù)。

該摘錄摘自“ Advanced JAX-WS Web Services ”一書,在該書中,您將學(xué)習(xí)基于SOAP的Web服務(wù)體系結(jié)構(gòu)的概念,并獲得有關(guān)在企業(yè)中構(gòu)建和部署Web服務(wù)的實(shí)用建議。

本書從設(shè)置開發(fā)環(huán)境的基礎(chǔ)知識和最佳實(shí)踐入手,以清晰簡潔的方式介紹了JAX-WS的內(nèi)部細(xì)節(jié)。

您還將了解可用于創(chuàng)建,編譯和測試SOAP Web服務(wù)的主要工具包,以及如何解決常見問題,例如調(diào)試數(shù)據(jù)和保護(hù)其內(nèi)容。

您將從這本書中學(xué)到什么:

  • 使用SOAP Web服務(wù)邁出第一步。 安裝開發(fā)和測試應(yīng)用程序所需的工具。
  • 使用自上而下和自下而上的方法開發(fā)Web服務(wù)。
  • 使用Maven原型加快Web服務(wù)的創(chuàng)建。
  • 深入探討JAX-WS類型的詳細(xì)信息:Java到XML的映射以及XML到Java的映射
  • 在WildFly 8和Tomcat上開發(fā)SOAP Web服務(wù)。 在WildFly上運(yùn)行本機(jī)Apache CXF。
  • 保護(hù)Web服務(wù)。 將身份驗(yàn)證策略應(yīng)用于您的服務(wù)。 加密通信。

翻譯自: https://www.javacodegeeks.com/2014/09/developing-a-top-down-web-service-project.html

總結(jié)

以上是生活随笔為你收集整理的开发自上而下的Web服务项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。