中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

使用JAX-WS創(chuàng)建SOAP Web服務(wù)

發(fā)布于:2021-01-11 10:24:19

0

184

0

創(chuàng)建 SOAP Web服務(wù) JAX WS

本文介紹了如何使用JAX-WS API創(chuàng)建基于SOAP的Web服務(wù)并將其與Tomcat一起部署。本教程遵循使用Java的wsimport實用程序逐步編寫客戶端的方法。

本文中顯示的Web服務(wù)已在此處實時部署。

有多種創(chuàng)建Web服務(wù)的方法。在本文中,我們將使用JAX-WS創(chuàng)建基于SOAP的Web服務(wù),該服務(wù)是XML Web Services的Java API,并將其部署在Tomcat下。

要記住的重要一點是,可以使用JAX-WS構(gòu)建SOAP和REST樣式的Web服務(wù)。有一個常見的誤解,即JAX-WS用于創(chuàng)建基于SOAP的Web服務(wù),而JAX-RS用于創(chuàng)建REST風(fēng)格的Web服務(wù)。

JAX-WS API非常豐富,并提供了一些注釋,使開發(fā)人員的工作變得輕松。

不同樣式的基于SOAP的Web服務(wù)

基于SOAP的Web服務(wù)可以歸類為

  • RPC樣式– RPC樣式用于創(chuàng)建包括簡單數(shù)據(jù)類型(內(nèi)置類型)的SOAP Web服務(wù)。

  • 文檔樣式–這是默認(rèn)樣式,用于創(chuàng)建包含復(fù)雜數(shù)據(jù)類型的SOAP Web服務(wù)

DiscoverIndia Web服務(wù)

我們將創(chuàng)建一個名為DiscoverIndia的基于SOAP的Web服務(wù)。該網(wǎng)絡(luò)服務(wù)的全部意義是,您將印度州的名稱傳遞給該服務(wù),然后您可以檢索

  • 該州的首都

  • 該州的區(qū)數(shù)

  • 該州的當(dāng)?shù)卣Z言

  • 該州的機(jī)場

  • 在該州參觀的地方

  • 關(guān)于國家的一些有趣的事實

在開始實施之前,讓我們了解基于SOAP的Web服務(wù)的體系結(jié)構(gòu)。

{xunruicms_img_title}

因此,事不宜遲,讓我們開始使用代碼。

實施網(wǎng)絡(luò)服務(wù)

這是該服務(wù)的服務(wù)端點接口(SEI)

@WebService public interface Country {       @WebMethod     String getCapital(String s);       @WebMethod     String getLanguages(String s);       @WebMethod     String getAirports(String s);       @WebMethod     int getDistricts(String s);       @WebMethod     String getPlacesToVisit(String s);       @WebMethod     String getInterestingFacts(String s); }

CountryImpl是服務(wù)實現(xiàn)Bean(SIB),用于實現(xiàn)SEI的所有方法。

@WebService public class CountryImpl implements Country {     private Utility states;     public CountryImpl(){         states=new Utility();         states.loadData();     }     @WebMethod     public String getCapital(String stateName) {         return states.getState(stateName).getCapital();     }     @WebMethod     public String getLanguages(String stateName) {         return states.getState(stateName).getLanguages();     }     @WebMethod     public String getAirports(String stateName) {         return states.getState(stateName).getAirports();     }     @WebMethod     public int getDistricts(String stateName) {         return states.getState(stateName).getDistricts();     }     @WebMethod     public String getPlacesToVisit(String stateName) {         return states.getState(stateName).getPlacesToVisit();     }     @WebMethod     public String getInterestingFacts(String stateName) {         return states.getState(stateName).getInterestingFacts();     } }

請注意,在CountryImpl類中,我們有Utility類的成員,該類將狀態(tài)信息存儲在Map中。

這是國家類別,代表使用吸氣劑和吸氣劑的國家。

public class State {     private String name;     private String capital;     private int districts;     private String languages;     private String airports;     private String placesToVisit;     private String interestingFacts;       State(String name,String capital,int districts,String languages,String airports,String placesToVisit,String interestingFacts){         this.name=name;         this.capital=capital;         this.districts=districts;         this.languages=languages;         this.airports=airports;         this.placesToVisit=placesToVisit;         this.interestingFacts=interestingFacts;     }       public String getName(){         return name;     }     public void setName(String name){         this.name=name;     }     public String getAirports() {         return airports;     }     public void setAirports(String airports) {         this.airports = airports;     }     public String getCapital() {         return capital;     }     public void setCapital(String capital) {         this.capital = capital;     }     public String getLanguages() {         return languages;     }     public void setLanguages(String languages) {         this.languages = languages;     }     public int getDistricts() {         return districts;     }     public void setDistricts(int districts) {         this.districts = districts;     }     public String getPlacesToVisit() {         return placesToVisit;     }     public void setPlacesToVisit(String placesToVisit) {         this.placesToVisit = placesToVisit;     }     public String getInterestingFacts() {         return interestingFacts;     }     public void setInterestingFacts(String interestingFacts) {         this.interestingFacts = interestingFacts;     }   }

我們有一個實用程序類,該類具有一個Map <String,State> state_map,用于存儲狀態(tài)名稱為鍵的狀態(tài)信息。該實用程序類還具有l(wèi)oadData() ,其填充方法state_map。

public class Utility {       Map<String, State> state_map;       Utility() {         state_map = new HashMap<String, State>();     }       void loadData(){           State rajasthan=new State("Rajasthan","Jaipur",33,"Hindi, Rajasthani","Jaipur, Jodhpur, Udaipur","Ajmer, Udaipur, Jaipur","Rajasthan is famous for its marbles");         State punjab=new State("Punjab","Chandigarh",22,"Hindi, Punjabi","Amritsar","Amritsar, Ludhiana","Punjab is popular for its joyful punjabi people");         State mp=new State("Madhya Pradesh","Bhopal",51 ,"Hindi","Bhopal, Gwalior","Bhopal, Gwalior","Madhya Pradesh is well known for its wildlife and monuments");         State haryana=new State("Haryana","Chandigarh",21 ,"Hindi, Haryanvi","","Hisar, Rohtak, Fridabad","Haryana is popular for its haryanvi language");         State gujrat=new State("Gujrat","Gandhinagar",33 ,"Hindi, Gujrati","Ahmedabad, Vadodara, Gandhinagar","Ahmedabad, Vadodara","Gujrat is famous for its rich culture and dandiya nights");           state_map.put("Rajasthan", rajasthan);         state_map.put("Punjab", punjab);         state_map.put("Madhya Pradesh", mp);         state_map.put("Haryana", haryana);         state_map.put("Gujrat", gujrat);               }       State getState(String stateName) {         State state = null;         state = state_map.get(stateName);         return state;     }   }

配置Web服務(wù)

由于在本例中為Apache Tomcat,因此將Web服務(wù)部署在Web容器中,因此我們必須在web.xml文件中配置Web服務(wù),如下所示。

<listener>         <listener-class>             com.sun.xml.ws.transport.http.servlet.WSServletContextListener         </listener-class> </listener> <servlet>         <servlet-name>xyz</servlet-name>         <servlet-class>             com.sun.xml.ws.transport.http.servlet.WSServlet         </servlet-class>         <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>         <servlet-name>xyz</servlet-name>         <url-pattern>/discoverIndia</url-pattern> </servlet-mapping>

最后一種配置是必需的–在WEB-INF文件夾中創(chuàng)建一個文件sun-jaxws.xml,該文件定義了Service實現(xiàn)類。

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"     version="2.0">     <endpoint name="WebServicImpl"         implementation="net.mahtabalam.ws.CountryImpl"         url-pattern="/discoverIndia" /> </endpoints>

請注意,您將需要額外的jax-ws庫才能在Tomcat下發(fā)布基于SOAP的Web服務(wù)。您可以從jax-ws.net下載這些庫 ,并將它們放在WEB-INF / lib文件夾中。

現(xiàn)在運行該項目,您的Web服務(wù)將被部署并可以在web.xml文件(在本例中為/ discoverIndia)中提到的任何URL下使用。

{xunruicms_img_title}

您可以通過在已部署的Web服務(wù)URL的末尾附加?wsdl來訪問WSDL(服務(wù)合同)。

{xunruicms_img_title}

發(fā)布Web服務(wù)后,您可以使用任何語言的Python,Perl,C#,Java等針對Web服務(wù)編寫客戶端。

這就是Web服務(wù)的美,它們獨立于語言。讓我們編寫一個Java客戶端來使用Web服務(wù)。

我們將使用JDK6附帶的 wsimport實用程序來生成客戶端構(gòu)件,以使其很容易針對discoverIndia Web服務(wù)編寫客戶端。

{xunruicms_img_title}

上面的命令將生成人工制品,我們將使用它們來編寫一個簡單的客戶端。

這是Client.java,它使用wsimport生成的類編寫一個簡單的Web服務(wù)客戶端。

package wsclient;  public class Client {       public static void main(String[] args) {         CountryImplService service=new CountryImplService();         CountryImpl country=service.getCountryImplPort();         System.out.println("Capital of Kerala : "+country.getCapital("Kerala"));         System.out.println("No. of districts in Telangna : "+country.getDistricts("Telangna"));         System.out.println("Local languages of Gujrat : "+country.getLanguages("Gujrat"));         System.out.println("Airports in Uttrakhand : "+country.getAirports("Uttrakhand"));         System.out.println("Places to visit in Rajasthan : "+country.getPlacesToVisit("Rajasthan"));         System.out.println("Interesting Facts about Meghalaya : "+country.getInterestingFacts("Meghalaya"));     }  }

現(xiàn)在編譯Client.java并運行它。

{xunruicms_img_title}

請記住,如果使用狀態(tài)名稱來調(diào)用Web服務(wù),而該狀態(tài)名稱未被Web服務(wù)處理,則將獲得SOAP Fault作為響應(yīng)。

獲取源代碼:如果您有興趣親自嘗試該代碼,可以從GitHub獲得它。

使用實時Web服務(wù): 此Web服務(wù)已在mathabalam.net上實時部署, 并且WSDL文件在此處可用。