orcad自上而下_开发自上而下的Web服务项目
orcad自上而下
這是從Alessio Soldano編輯的Advanced JAX-WS Web Services手冊中摘錄的示例章節(jié)。
第一章介紹了自底向上創(chuàng)建Web服務端點的方法。 它允許非常快地將現(xiàn)有bean作為Web Service端點公開:在大多數(shù)情況下,將類轉換為端點只需在代碼中添加少量注釋即可。
但是,在使用已定義的合同開發(fā)服務時,使用自頂向下方法要簡單得多(有效),因為wsdl-to-java工具可以生成與WSDL匹配的帶注釋的代碼。 這是在多種情況下(例如以下情況)的首選解決方案:
- 創(chuàng)建一個服務,該服務遵循預先開發(fā)的XML Schema和WSDL;
- 公開符合第三方規(guī)定的合同的服務(例如,使用已定義的一組消息調用該服務的供應商);
- 在保持與較舊客戶端的兼容性的同時,替換現(xiàn)有Web Service的實現(xiàn)(不得更改合同)。
在下一部分中,將提供一個自上而下的 Web Service端點開發(fā)示例,以及一些有關開發(fā)人員在進行編碼時必須意識到的約束的詳細信息,無論選擇哪種方法。
使用自上而下的方法創(chuàng)建Web服務
為了建立一個包括Web服務端點和JAX-WS客戶端的完整項目,我們將使用兩個Maven項目。 第一個將是一個標準的webapp-javaee7項目,其中將包含Web服務端點。 第二個只是一個快速啟動的Maven項目,它將對Web Service執(zhí)行一個測試用例。
讓我們像往常一樣開始創(chuà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服務接口和存根。 步驟與為同一合同建立客戶的步驟相似。 唯一的區(qū)別是wsconsume腳本會將生成的源文件輸出到我們的Maven項目中:
$ wsconsume.bat -k CustomerService.wsdl -o ws-demo-wsdl\src\main\java除了本章開頭已經(jīng)討論過的生成的類之外,我們還需要提供一個包含Web服務功能的服務端點實現(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;} }端點實現(xiàn)類實現(xiàn)端點接口,并通過@WebService批注引用它。 我們的WebService類什么也沒做,只是使用接收到的參數(shù)作為輸入創(chuàng)建一個CustomerRecord對象。 在一個真實的示例中,您將使用例如持久層來收集CustomerRecord。
一旦將實現(xiàn)類包含在項目中,則需要將項目打包并部署到目標容器,這將使用與該工具使用的相同的合約公開服務端點。
還可以在服務接口的@WebService wsdlLocation屬性中引用本地WSDL文件,并將該文件包含在部署中。 這樣可以準確地提供所提供的文檔。
如果要將Web服務部署到WildFly應用程序服務器,則可以從管理控制臺(如管理控制臺)中檢查端點現(xiàn)在是否可用。 選擇“上層運行時”選項卡,然后單擊“子系統(tǒng)左側”選項中包含的“ Web服務”鏈接:
JAX-WS端點的需求
無論選擇哪種方法來開發(fā)JAX-WS端點,實際的實現(xiàn)都需要滿足一些要求:
- 必須使用j avax.jws.WebService或javax.jws.WebServiceProvider批注對實現(xiàn)類進行批注。
- 實現(xiàn)類可以通過@WebService批注的endpointInterface元素顯式引用服務終結點接口,但并非必須如此。 如果@WebService中沒有指定endpointInterface,服務端點接口被隱含的實現(xiàn)類定義。
- 實現(xiàn)類的業(yè)務方法必須是公共的,并且不能聲明為靜態(tài)或最終的。
- javax.jws.WebMethod批注將在要向Web服務客戶端公開的業(yè)務方法上使用; 如果沒有使用@WebMethod注釋任何方法,則將公開所有業(yè)務方法。
- 向Web服務客戶端公開的業(yè)務方法必須具有與JAXB兼容的參數(shù)和返回類型。
- 實現(xiàn)類不能聲明為final,并且不能抽象。
- 實現(xiàn)類必須具有默認的公共構造函數(shù),并且不能定義finalize方法。
- 實現(xiàn)類可以在其方法中將javax.annotation.PostConstruct或javax.annotation.PreDestroy注釋用于生命周期事件回調。
構建和運行JAX-WS客戶端的要求
JAX-WS客戶端可以是任何Java項目的一部分,并且不需要明確要求它是部署在JavaEE容器上的JAR / WAR歸檔的一部分。 例如,客戶端可以簡單地包含在快速入門Maven項目中,如下所示:
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由于您的客戶端需要引用端點接口和存根,因此需要提供它們或者從服務器項目復制它們,或者使用wsconsume再次生成它們:
$ wsconsume.bat -k CustomerService.wsdl -o client-demo-wsdl\src\main\java現(xiàn)在包括一個最小的Client Test應用程序,它是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);} }編譯并運行測試
為了成功運行WS客戶端應用程序,需要正確設置類加載器以包括所需的JAX-WS實現(xiàn)庫(以及所需的傳遞依賴項(如果有))。 根據(jù)客戶端要在其中運行的環(huán)境,這可能意味著向類路徑中添加了一些jar,或者向Maven依賴關系樹中添加了一些工件依賴關系,正確設置了IDE等。
由于Maven用于構建包含客戶端的應用程序,因此您可以按以下方式配置pom.xml ,使其包含對JBossWS的依賴關系:
<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í)行測試用例,該用例將調用JAX-WS API以使用JBossWS服務客戶端調用。
mvn clean package test專注于客戶端使用的JAX-WS實現(xiàn)
通過在應用程序類加載器中查找META-INF / services / javax.xml.ws.spi.Provider資源,可以在運行時選擇要用于運行JAX-WS客戶端的JAX-WS實現(xiàn)。 每個JAX-WS實現(xiàn)都有一個包含該資源文件的庫(jar),該資源文件在內部引用實現(xiàn)JAX-WS SPI提供程序的適當類。
在WildFly 8.0.0.Final應用程序服務器上,JAX-WS實現(xiàn)包含在文件jbossws-cxf-factories-4.2.3.Final的META-INF / services / javax.xml.ws.spi.Provider中:
org.jboss.wsf.stack.cxf.client.ProviderImpl因此,控制構建應用程序類加載器的類路徑中包含哪些工件或jar庫非常重要。 如果找到多個實現(xiàn),則順序很重要,因此將使用類路徑中的第一個實現(xiàn)。
避免任何類路徑問題(從而加載另一個JAX-WS實現(xiàn))的最安全方法是將java.endorsed.dirs系統(tǒng)屬性設置為包含jbossws-cxf-factories.jar; 如果不這樣做,請確保沒有在類路徑之前包含其他META-INF / services / javax.xml.ws.spi.Provider資源,這將觸發(fā)另一個JAX-WS實現(xiàn)。
最后,如果JAX-WS客戶端打算作為JavaEE應用程序的一部分在WildFly上運行,則JBossWS JAX-WS實現(xiàn)將自動選擇為客戶端提供服務。
該摘錄摘自“ Advanced JAX-WS Web Services ”一書,在該書中,您將學習基于SOAP的Web服務體系結構的概念,并獲得有關在企業(yè)中構建和部署Web服務的實用建議。
本書從建立開發(fā)環(huán)境的基礎知識和最佳實踐入手,以清晰簡潔的方式介紹了JAX-WS的內部細節(jié)。
您還將了解可用于創(chuàng)建,編譯和測試SOAP Web服務的主要工具包,以及如何解決常見的問題,例如調試數(shù)據(jù)和保護其內容。
您將從這本書中學到什么:
- 使用SOAP Web服務邁出第一步。 安裝開發(fā)和測試應用程序所需的工具。
- 使用自上而下和自下而上的方法開發(fā)Web服務。
- 使用Maven原型來加速Web服務的創(chuàng)建。
- 深入探討JAX-WS類型的細節(jié):Java到XML的映射以及XML到Java的映射
- 在WildFly 8和Tomcat上開發(fā)SOAP Web服務。 在WildFly上運行本機Apache CXF。
- 保護Web服務。 將身份驗證策略應用于您的服務。 加密通信。
翻譯自: https://www.javacodegeeks.com/2014/09/developing-a-top-down-web-service-project.html
orcad自上而下
總結
以上是生活随笔為你收集整理的orcad自上而下_开发自上而下的Web服务项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想一体机好不好一体机联想电脑如何
- 下一篇: Windows 11提高电池寿命的6个技