欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java WebService技術(shù)詳解

 更新時間:2021年12月12日 11:16:08   作者:春水上行  
本文詳細(xì)講解了Java WebService技術(shù)工作原理以及調(diào)用方式。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

WebService

WebService簡介

Web Service技術(shù), 能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數(shù)據(jù)或集成。依據(jù)Web Service規(guī)范實施的應(yīng)用之間, 無論它們所使用的語言、 平臺或內(nèi)部協(xié)議是什么, 都可以相互交換數(shù)據(jù)。

簡單的說,WebService就是一種跨編程語言和跨操作系統(tǒng)平臺的遠(yuǎn)程調(diào)用技術(shù)。所謂跨編程語言和跨操作平臺,就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然。跨操作系統(tǒng)平臺則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。 遠(yuǎn)程調(diào)用,就是一臺計算機(jī)的應(yīng)用可以調(diào)用其他計算機(jī)上的應(yīng)用。例如:支付寶,支付寶并沒有銀行卡等數(shù)據(jù),它只是去調(diào)用銀行提供的接口來獲得數(shù)據(jù)。還有天氣預(yù)報等,也是氣象局把自己的系統(tǒng)服務(wù)以webservice服務(wù)的形式暴露出來,讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能。

WebService原理

XML,SOAP和WSDL就是構(gòu)成WebService平臺的三大技術(shù) 。

  • WebService采用Http協(xié)議來在客戶端和服務(wù)端之間傳輸數(shù)據(jù)。WebService使用XML來封裝數(shù)據(jù),XML主要的優(yōu)點在于它是跨平臺的。
  • WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時,發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議規(guī)定的。
  • WebService服務(wù)器端首先要通過一個WSDL文件來說明自己有什么服務(wù)可以對外調(diào)用。簡單的說,WSDL就像是一個說明書,用于描述WebService及其方法、參數(shù)和返回值。 WSDL文件保存在Web服務(wù)器上,通過一個url地址就可以訪問到它??蛻舳艘{(diào)用一個WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:1.注冊到UDDI服務(wù)器,以便被人查找;2.直接告訴給客戶端調(diào)用者。

WebService交互的過程就是,WebService遵循SOAP協(xié)議通過XML封裝數(shù)據(jù),然后由Http協(xié)議來傳輸數(shù)據(jù)。

JAVA WebService規(guī)范

Java 中共有三種WebService 規(guī)范,分別是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。

(1)JAX-WS:

JAX-WS(Java API For XML-WebService)。早期的基于SOAP 的JAVA 的Web 服務(wù)規(guī)范JAX-RPC(java API For XML-Remote Procedure Call)目前已經(jīng)被JAX-WS 規(guī)范取代,JAX-WS 是JAX-RPC 的演進(jìn)版本,但JAX-WS 并不完全向后兼容JAX-RPC,二者最大的區(qū)別就是RPC/encoded 樣式的WSDL,JAX-WS 已經(jīng)不提供這種支持。JAX-RPC 的API 從JAVA EE5 開始已經(jīng)移除,如果你使用J2EE1.4,其API 位于javax.xml.rpc.包。JAX-WS(JSR 224)規(guī)范的API 位于javax.xml.ws.包,其中大部分都是注解,提供API 操作Web 服務(wù)(通常在客戶端使用的較多,由于客戶端可以借助SDK 生成,因此這個包中的API 我們較少會直接使用)。

(2)JAXM&SAAJ:

JAXM(JAVA API For XML Message)主要定義了包含了發(fā)送和接收消息所需的API,相當(dāng)于Web 服務(wù)的服務(wù)器端,其API 位于javax.messaging.*包,它是Java EE 的可選包,因此你需要單獨下載。

SAAJ(SOAP With Attachment API For Java,JSR 67)是與JAXM 搭配使用的API,為構(gòu)建SOAP 包和解析SOAP 包提供了重要的支持,支持附件傳輸,它在服務(wù)器端、客戶端都需要使用。這里還要提到的是SAAJ 規(guī)范,其API 位于javax.xml.soap.*包。

JAXM&SAAJ 與JAX-WS 都是基于SOAP 的Web 服務(wù),相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細(xì)節(jié),編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細(xì)節(jié),更加面向?qū)ο?,實現(xiàn)起來你基本上不需要關(guān)心SOAP 的任何細(xì)節(jié)。那么如果你想控制SOAP 消息的更多細(xì)節(jié),可以使用JAXM&SAAJ。

(3)JAX-RS:

JAX-RS 是JAVA 針對REST(Representation State Transfer)風(fēng)格制定的一套Web 服務(wù)規(guī)范,由于推出的較晚,該規(guī)范(JSR 311,目前JAX-RS 的版本為1.0)并未隨JDK1.6 一起發(fā)行。

WebService入門案例

服務(wù)端的實現(xiàn)

我們來實現(xiàn)一個天氣系統(tǒng)的案例,客戶端發(fā)送城市名稱,服務(wù)器端回應(yīng)相應(yīng)的天氣。

1.  編寫SEI(Service Endpoint Interface),SEI在webservice中稱為portType,在java中就是普通接口 

public interface WeatherInterface {
    public String queryWeather(String cityName);
}
2.  編寫SEI實現(xiàn)類,此類作為webservice提供服務(wù)類 

@WebService     //@WebService表示該類是一個服務(wù)類,需要發(fā)布其中的public的方法
public class WeatherInterfaceImpl implements WeatherInterface {

    @Override
    public String queryWeather(String cityName) {
        System.out.println("獲取城市名"+cityName);
        String weather="暴雨";    
        return weather;
    }

}
3.  第三步:發(fā)布服務(wù),Endpoint類發(fā)布服務(wù),publish方法,兩個參數(shù):1.服務(wù)地址;2.服務(wù)實現(xiàn)類 

public class WeatherServer {
    public static void main(String[] args) {
        Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
    }
}
4. 測試服務(wù)是否發(fā)布成功,通過閱讀wsdl,確定客戶端調(diào)用的接口、方法、參數(shù)和返回值存在,證明服務(wù)發(fā)布成功

//我們在瀏覽器輸入 http://127.0.0.1:12345/weather?wsdl 來獲取wsdl文件進(jìn)行閱讀

//wsdl,是以XML文件形式來描述WebService的”說明書”,有了說明書,我們才可以知道如何使用或是調(diào)用這個服務(wù).

//現(xiàn)在我們還不知道怎么去閱讀,后面我們會詳解,只要能獲取到,就能確定WebService服務(wù)發(fā)布成功 

客戶端的實現(xiàn)

//客戶端調(diào)用服務(wù)有很多種方法,我們先用工具生成客戶端代碼,后面會詳解  

//wsimport是jdk自帶的webservice客戶端工具,可以根據(jù)wsdl文檔生成客戶端調(diào)用代碼(java代碼).當(dāng)然,無論服務(wù)器端的WebService是用什么語言寫的,都可以生成調(diào)用webservice的客戶端代碼。

1.創(chuàng)建一個客戶端空項目,cmd命令行進(jìn)入此項目的src目錄
  使用以下命令生成客戶端代碼  

    wsimport -s . http://127.0.0.1:12345/weather?wsdl

    -s是指編譯出源代碼文件,后面的.(點)指將代碼放到當(dāng)前目錄下.
     最后面的http….是指獲取wsdl說明書的地址

2.編寫客戶端
public class WeatherClient {

    public static void main(String[] args) {
        //創(chuàng)建服務(wù)視圖,視圖是從wsdl文件的service標(biāo)簽的name屬性獲取
        WeatherInterfaceImplService weatherInterfaceImplService=new WeatherInterfaceImplService();  

        //獲取服務(wù)實現(xiàn)類,實現(xiàn)類從wsdl文件的portType的name屬性獲取
        WeatherInterfaceImpl weatherInterfaceImpl=weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class); 
        //獲取查詢方法,從portType的operation標(biāo)簽獲取
        String weather=weatherInterfaceImpl.queryWeather("北京");
        System.out.println(weather);

    }

}

至此,我們的客戶端就可以獲取遠(yuǎn)程服務(wù)端的數(shù)據(jù),接下來我們來詳解一下各個部分。

WSDL

WSDL(Web Services Description Language), web服務(wù)描述語言,他是webservice服務(wù)端使用說明書,說明服務(wù)端接口、方法、參數(shù)和返回值,WSDL是隨服務(wù)發(fā)布成功,自動生成,無需編寫。

文檔結(jié)構(gòu)

  • Service:相關(guān)端口的集合,包括其關(guān)聯(lián)的接口、操作、消息等。
  • Binding:特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范
  • portType: 服務(wù)端點,描述 web service可被執(zhí)行的操作方法,以及相關(guān)的消息,通過binding指向portType
  • message: 定義一個操作(方法)的數(shù)據(jù)參數(shù)
  • types: 定義 web service 使用的全部數(shù)據(jù)類型

閱讀方式

WSDL文檔應(yīng)該從下往上閱讀。

  • 1.先看service標(biāo)簽,看相應(yīng)port的binding屬性,然后通過值查找上面的binding標(biāo)簽。
  • 2.通過binding標(biāo)簽可以獲得具體協(xié)議等信息,然后查看binding的type屬性
  • 3.通過binding的type屬性,查找對應(yīng)的portType,可以獲得可操作的方法和參數(shù)、返回值等。
  • 4.通過portType下的operation標(biāo)簽的message屬性,可以向上查找message獲取具體的數(shù)據(jù)參數(shù)信息。

SOAP

SOAP即簡單對象訪問協(xié)議,他是使用http發(fā)送的XML格式的數(shù)據(jù),它可以跨平臺,跨防火墻,SOAP不是webservice的專有協(xié)議。

SOAP=http+xml

SOAP結(jié)構(gòu)

  • 必需的 Envelope 元素,可把此 XML 文檔標(biāo)識為一條 SOAP 消息
  • 可選的 Header 元素,包含頭部信息
  • 必需的 Body 元素,包含所有的調(diào)用和響應(yīng)信息
  • 可選的 Fault 元素,提供有關(guān)在處理此消息所發(fā)生錯誤的信息

我們來看一下我們上面天氣程序發(fā)送的數(shù)據(jù)的格式,這需要一個工具TCP/IP Monitor ,Eclipse自帶的Debug工具之一,用于捕獲Http、TCP/IP協(xié)議包。原理是一個代理服務(wù),客戶端先把數(shù)據(jù)發(fā)送到代理服務(wù),然后代理服務(wù)再把數(shù)據(jù)發(fā)送到服務(wù)器,這樣就能獲取請求數(shù)據(jù)和響應(yīng)數(shù)據(jù)。

第一步:打開這個工具,選擇other,然后輸入TCP/IP Monitor

第二步:設(shè)置要代理的服務(wù)器

第三步:詳細(xì)設(shè)置

  • 第一個參數(shù)是代理服務(wù)器端口,我們設(shè)置為54321
  • 第二個參數(shù)是被代理服務(wù)器的地址
  • 第三個參數(shù)是被代理服務(wù)器的端口
  • 第四個參數(shù)要選擇為TCP/IP

第四步:檢測是否設(shè)置成功,我們訪問代理服務(wù)器來獲得wsdl文件

第五步:設(shè)置成功后,我們需要改一下客戶端要連接的服務(wù)器,改成代理服務(wù)器的端口

將WeatherInterfaceImplService里的所有原來地址的端口改為54321

第六步:我們啟動我們的客戶端,獲取請求數(shù)據(jù)和響應(yīng)數(shù)據(jù)

請求 

//先發(fā)送get請求,去獲得wsdl文件,然后獲得方法、參數(shù)等信息
GET /weather?wsdl HTTP/1.1
User-Agent: Java/1.8.0_111
Host: 127.0.0.1:54321
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

//發(fā)送數(shù)據(jù)
POST /weather HTTP/1.1
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://ws.cad.com/WeatherInterfaceImpl/queryWeatherRequest"
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
Host: 127.0.0.1:54321
Connection: keep-alive
Content-Length: 203

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:queryWeather xmlns:ns2="http://ws.cad.com/">
<arg0>北京</arg0>
</ns2:queryWeather>
</S:Body>
</S:Envelope>
響應(yīng)數(shù)據(jù) 

HTTP/1.1 200 OK
Date: Tue, 25 Jul 2017 05:05:58 GMT
Transfer-encoding: chunked
Content-type: text/xml;charset=utf-8

//響應(yīng)wsdl內(nèi)容,來獲得方法、參數(shù)等信息
899
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.cad.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.cad.com/" name="WeatherInterfaceImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://ws.cad.com/" schemaLocation="http://127.0.0.1:54321/weather?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="queryWeather">
<part name="parameters" element="tns:queryWeather"></part>
</message>
<message name="queryWeatherResponse">
<part name="parameters" element="tns:queryWeatherResponse"></part>
</message>
<portType name="WeatherInterfaceImpl">
<operation name="queryWeather">
<input wsam:Action="http://ws.cad.com/WeatherInterfaceImpl/queryWeatherRequest" message="tns:queryWeather"></input>
<output wsam:Action="http://ws.cad.com/WeatherInterfaceImpl/queryWeatherResponse" message="tns:queryWeatherResponse"></output>
</operation>
</portType>
<binding name="WeatherInterfaceImplPortBinding" type="tns:WeatherInterfaceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="queryWeather">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="WeatherInterfaceImplService">
<port name="WeatherInterfaceImplPort" binding="tns:WeatherInterfaceImplPortBinding">
<soap:address location="http://127.0.0.1:54321/weather"></soap:address>
</port>
</service>
</definitions>
0

//響應(yīng)數(shù)據(jù)
HTTP/1.1 200 OK
Date: Tue, 25 Jul 2017 05:05:59 GMT
Transfer-encoding: chunked
Content-type: text/xml; charset=utf-8

df
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
    <ns2:queryWeatherResponse xmlns:ns2="http://ws.cad.com/">
    <return>暴雨</return> 
    </ns2:queryWeatherResponse> 
</S:Body>
</S:Envelope>
0

UDDI

UDDI 是一種目錄服務(wù),企業(yè)可以使用它對 Web services 進(jìn)行注冊和搜索。

如果我們要使用一種服務(wù),但是不知道地址(wsdl等),我們就可以在UDDI中查找。

大部分情況下,我們都是知道服務(wù)地址的。

Webservice的客戶端調(diào)用方式

一:生成客戶端調(diào)用方式

wsimport是jdk自帶的webservice客戶端工具,可以根據(jù)wsdl文檔生成客戶端調(diào)用代碼(java代碼).
wsimport.exe位于JAVA_HOME\bin目錄下 
常用參數(shù)為:
        -d<目錄>  - 將生成.class文件。默認(rèn)參數(shù)。
        -s<目錄> - 將生成.java文件。
        -p<生成的新包名> -將生成的類,放于指定的包下

調(diào)用公網(wǎng)的手機(jī)歸屬地查詢服務(wù)

公網(wǎng)服務(wù)地址 (里面提供了很多免費(fèi)調(diào)用的服務(wù))

http://www.webxml.com.cn/zh_cn/index.aspx

第一步:wsimport生成客戶端代碼 

wsimport -p cn.cad.mobile -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

會出現(xiàn)一些警告,是因為服務(wù)端提供的一些方法是SOAP1.2標(biāo)準(zhǔn)的,這個工具沒有實現(xiàn)SOAP1.2標(biāo)準(zhǔn)的生成方式。    

第二步:查看wsdl文件,獲取我們需要的信息 

第三步:根據(jù)獲取到的服務(wù)名等信息來創(chuàng)建我們的客戶端  

public class MobileClient {

    public static void main(String[] args) {
        //創(chuàng)建服務(wù)視圖
        MobileCodeWS mobileCodeWS=new MobileCodeWS();
        //獲取服務(wù)實現(xiàn)類
        MobileCodeWSSoap mobileCodeWSSoap= mobileCodeWS.getPort(MobileCodeWSSoap.class);
        //調(diào)用查詢方法
        String message=mobileCodeWSSoap.getMobileCodeInfo("xxxxxxxx", null);
        System.out.println(message);

    }
}
第四步:獲取到信息 

還有天氣等服務(wù),自己可以去實現(xiàn)一下。

該種方式使用簡單,但一些關(guān)鍵的元素在代碼生成時寫死在生成代碼中,不方便維護(hù),所以僅用于測試。

二:service編程調(diào)用方式

public class MobileClient2 {

    public static void main(String[] args) throws IOException {
        //創(chuàng)建WSDL文件的URL
        URL wsdlDocumentLocation=new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"); 
        //創(chuàng)建服務(wù)名稱
        //1.namespaceURI - 命名空間地址
        //2.localPart - 服務(wù)視圖名
        QName serviceName=new QName("http://WebXml.com.cn/","MobileCodeWS");
        Service service=Service.create(wsdlDocumentLocation, serviceName);

        //獲取服務(wù)實現(xiàn)類
        MobileCodeWSSoap mobileCodeWSSoap= service.getPort(MobileCodeWSSoap.class);
        //調(diào)用方法
        String message=mobileCodeWSSoap.getMobileCodeInfo("XXXXXXX", null);
        System.out.println(message);

    }

}

該種方式可以自定義命名空間,服務(wù)視圖名等元素,方便以后維護(hù),是一種標(biāo)準(zhǔn)的開發(fā)方式 。

三:HttpURLConnection調(diào)用方式

這種方式是由自己編寫客戶端,不再由工具生成,比較麻煩。

開發(fā)步驟: 

        第一步:創(chuàng)建服務(wù)地址

        第二步:打開一個通向服務(wù)地址的連接

        第三步:設(shè)置參數(shù)

        第四步:組織SOAP數(shù)據(jù),發(fā)送請求

        第五步:接收服務(wù)端響應(yīng) 
public class MobileClient2 {

    public static void main(String[] args) throws IOException {
                //第一步:創(chuàng)建服務(wù)地址,不是WSDL地址
                URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");
                //第二步:打開一個通向服務(wù)地址的連接
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //第三步:設(shè)置參數(shù)
                //3.1發(fā)送方式設(shè)置:POST必須大寫
                connection.setRequestMethod("POST");
                //3.2設(shè)置數(shù)據(jù)格式:content-type
                connection.setRequestProperty("content-type", "text/xml;charset=UTF-8");
                //3.3設(shè)置輸入輸出,因為默認(rèn)新創(chuàng)建的connection沒有讀寫權(quán)限,
                connection.setDoInput(true);
                connection.setDoOutput(true);

                //第四步:組織SOAP數(shù)據(jù),發(fā)送請求
                String soapXML = getXML("XXXXXXX");
                OutputStream os = connection.getOutputStream();
                os.write(soapXML.getBytes());
                //第五步:接收服務(wù)端響應(yīng),打印
                int responseCode = connection.getResponseCode();
                if(200 == responseCode){//表示服務(wù)端響應(yīng)成功
                    InputStream is = connection.getInputStream();
                    //將字節(jié)流轉(zhuǎn)換為字符流
                    InputStreamReader isr = new InputStreamReader(is,"utf-8");
                    //使用緩存區(qū)
                    BufferedReader br = new BufferedReader(isr);

                    StringBuilder sb = new StringBuilder();
                    String temp = null;
                    while(null != (temp = br.readLine())){
                        sb.append(temp);
                    }
                    System.out.println(sb.toString());

                    is.close();
                    isr.close();
                    br.close();
                }

                os.close();
            }

    //組織數(shù)據(jù),將數(shù)據(jù)拼接一下
    public static String getXML(String phoneNum){
        String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
        +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
            +"<soap:Body>"
            +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"
                +"<mobileCode>"+phoneNum+"</mobileCode>"
              +"<userID></userID>"
            +"</getMobileCodeInfo>"
          +"</soap:Body>"
        +"</soap:Envelope>";
        return soapXML;
    }
}

使用注解修改WSDL內(nèi)容

作用:

通過注解,可以更加形像的描述Web服務(wù)。對自動生成的wsdl文檔進(jìn)行修改,為使用者提供一個更加清晰的wsdl文檔

WebService的注解都位于javax.jws包下: 

@WebService-定義服務(wù),在類上邊
    targetNamespace:指定命名空間
    name:portType的名稱
    portName:port的名稱
    serviceName:服務(wù)名稱
    endpointInterface:SEI接口地址,如果一個服務(wù)類實現(xiàn)了多個接口,只需要發(fā)布一個接口的方法,可通過此注解指定要發(fā)布服務(wù)的接口。 

@WebMethod-定義方法,在公開方法上邊
    operationName:方法名
    exclude:設(shè)置為true表示此方法不是webservice方法,反之則表示webservice方法,默認(rèn)是false 

@WebResult-定義返回值,在方法返回值前邊
    name:返回結(jié)果值的名稱 

@WebParam-定義參數(shù),在方法參數(shù)前邊
    name:指定參數(shù)的名稱
//以我們前面做的天氣案例為例子

@WebService(
        targetNamespace="http://service.cad.com",
        portName="WeatherSOAPPort",
        serviceName="WeatherWSS",
        name="WeatherSOAP"  
)
public class WeatherInterfaceImpl implements WeatherInterface {

    @WebMethod(
            operationName="getWeather",
            exclude=false
    )
    public @WebResult(name="result")String queryWeather(@WebParam(name="cityName")String cityName) {
        System.out.println("獲取城市名"+cityName);
        String weather="暴雨";    
        return weather;
    }

}
然后重新發(fā)布服務(wù),我們再訪問wsdl文件,就可以看到我們改變的內(nèi)容 

到此這篇關(guān)于Java WebService技術(shù)詳解的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java判斷上傳圖片格式的實例代碼

    Java判斷上傳圖片格式的實例代碼

    這篇文章主要介紹了Java判斷上傳圖片格式的實例代碼,在文中給大家提到了Java使用文件頭的類型判斷上傳的文件是否為圖片類型,需要的朋友可以參考下
    2019-06-06
  • SpringBoot整合RestTemplate用法的實現(xiàn)

    SpringBoot整合RestTemplate用法的實現(xiàn)

    本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • JVM系列之String.intern的性能解析

    JVM系列之String.intern的性能解析

    這篇文章主要介紹了JVM系列之String.intern的性能解析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • java獲取反射機(jī)制的3種方法總結(jié)

    java獲取反射機(jī)制的3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于java獲取反射機(jī)制的3種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • SpringMVC編程使用Controller接口實現(xiàn)控制器實例代碼

    SpringMVC編程使用Controller接口實現(xiàn)控制器實例代碼

    這篇文章主要介紹了SpringMVC編程使用Controller接口實現(xiàn)控制器實例代碼,具有一定參考價值,需要的朋友可以參考下。
    2017-11-11
  • SpringBoot各種參數(shù)校驗的實例教程

    SpringBoot各種參數(shù)校驗的實例教程

    經(jīng)常需要提供接口與用戶交互(獲取數(shù)據(jù)、上傳數(shù)據(jù)等),由于這個過程需要用戶進(jìn)行相關(guān)的操作,為了避免出現(xiàn)一些錯誤的數(shù)據(jù)等,一般需要對數(shù)據(jù)進(jìn)行校驗,下面這篇文章主要給大家介紹了關(guān)于SpringBoot各種參數(shù)校驗的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 詳解如何用spring Restdocs創(chuàng)建API文檔

    詳解如何用spring Restdocs創(chuàng)建API文檔

    這篇文章將帶你了解如何用spring官方推薦的restdoc去生成api文檔。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringBoot實現(xiàn)Thymeleaf驗證碼生成

    SpringBoot實現(xiàn)Thymeleaf驗證碼生成

    本文使用SpringBoot實現(xiàn)Thymeleaf驗證碼生成,使用后臺返回驗證碼圖片,驗證碼存到session中后端實現(xiàn)校驗,前端只展示驗證碼圖片。感興趣的可以了解下
    2021-05-05
  • Java多線程中的Phaser使用解析

    Java多線程中的Phaser使用解析

    這篇文章主要介紹了Java多線程中的Phaser使用解析,java多線程技術(shù)提供了Phaser工具類,Phaser表示“階段器”,用來解決控制多個線程分階段共同完成任務(wù)的情景問題,其作用相比CountDownLatch和CyclicBarrier更加靈活,需要的朋友可以參考下
    2023-11-11
  • Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換

    Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換

    這篇文章主要介紹了Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換,Java的數(shù)據(jù)類型主要分為兩類,基本數(shù)據(jù)類型、引用數(shù)據(jù)類型,下文詳細(xì)介紹,感興趣的朋友可以參考一下
    2022-07-07

最新評論