webservice的發(fā)布一般都是使用WSDL(web service descriptive language)文件的樣式來發(fā)布的,在WSDL文件里面,包含這個webservice暴露在外面可供使用的接口。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設計、成都做網(wǎng)站、皋蘭網(wǎng)絡推廣、小程序設計、皋蘭網(wǎng)絡營銷、皋蘭企業(yè)策劃、皋蘭品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供皋蘭建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:jinyejixie.com
注意,以下的代碼并沒有經(jīng)過真正的測試,只是說明這些情況,不同版本的Axis相差很大,最好以apache網(wǎng)站上的例子為準,這里僅僅用于說明其基本用法。
1,直接AXIS調(diào)用遠程的web service,直接調(diào)用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "";
//直接引用遠程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL里面描述的接口名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的參數(shù)
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數(shù),并且調(diào)用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
2,直接SOAP調(diào)用遠程的webservice ,這種模式很少用,但是網(wǎng)絡上有人貼出來,也轉(zhuǎn)過來 :
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
public class caService{
public static String getService(String user) {
URL url = null;
try {
url=new URL("");
} catch (MalformedURLException mue) {
return mue.getMessage();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();
// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user, null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url,"");
// Check to see if there is an error, return "N/A"
if (soapResponse.generatedFault()) {
Fault fault = soapResponse.getFault();
String f = fault.getFaultString();
return f;
} else {
// read result
Parameter soapResult = soapResponse.getReturnValue ();
// get a string from the result
return soapResult.getValue().toString();
}
} catch (SOAPException se) {
return se.getMessage();
}
}
}
使用Web Service進行WSDL逆向生成服務端步驟:
在Eclipse中新建一個WSDL文件
改個名字為“manager.wsdl”。下一步,定義命名空間和協(xié)議等信息,默認即行
finish后,會在主工作區(qū)出現(xiàn)
這是manager.wsdl的圖形化形式,點擊“Source”會可查看到源代碼
這是默認生成的wsdl,我們要根據(jù)我們的項目需要,首先對方法名進行修改。修改之后,右邊的input和output也跟著修改了,這兩個就是定義plus的輸入和輸出。 點擊input參數(shù)“plus”右邊的提示箭頭
就在這里定義輸入?yún)?shù)和和參數(shù)類型等信息,因為我們plus(float x, float y)方法中有兩個參數(shù)x和y,故我們將上圖改成兩個參數(shù)的序列,對比一下方法plus(float x, float y)
返回manager.wsdl視圖,選擇output參數(shù)右邊的箭頭。設置float plus(float x, float y)方法的返回值及其類型,因其返回值只有一個,我們只須把上面的out的類型改成我們方法中用的float。點擊左上角的圖標。
回到manager.wsdl,在源代碼視圖里右鍵選“Validate”,對xml文檔進行檢驗,如果有錯誤的,就根據(jù)需要修改。
圖形化編寫的wsdl文檔完成了,順便說一下,方法是可以定義多個的
為簡單起見,我們就先以剛才做定義的那個方法為例,看看,如何根據(jù)wsdl文件,自動生成Web Service的服務器端
我們New一個Web Service。在Web Service type中選擇“Top down Java Bean Web Service”。在Service definition中找到剛才寫的那個manager.wsdl文件
Web Service對話框,將服務類型的滑塊調(diào)到“Develop service”處。接下來,就next – next –- finish就行。它會自動生成Web Service服務端的接口和類,在類中,可找到我們定義的方法,我們只要修改方法plus的方法體,以實現(xiàn)我們要實現(xiàn)的功能即行。
本Guide利用Eclipse以及Ant建立一個簡單的Web Service,以演示W(wǎng)eb Service的基本開發(fā)過程:
1.系統(tǒng)條件:
Eclipse Java EE IDE for Web Developers
Java SE 6
Windows XP
2.基本環(huán)境搭建:
1)Java SE6 JDK的安裝:下載Java SE6 JDK,雙擊,安裝默認選項進行安裝即可。
2)Eclipse的安裝與配置:
安裝時直接解壓。
配置處有兩點,WindowPreferencesJavaInstalled JREs確保如下設置:
安裝路徑可能略有不同。
WindowPreferencesJavaCompiler 確保如下設置:
3.建立Server端工程和相關包與類:
創(chuàng)建一個Java Project,命名為wsServerHelloWorld:
在這個項目下建立包:org.gnuhpc.wsServer
在這個包下邊建立類:SayHello
在SayHello.java文件中輸入以下代碼:
package org.gnuhpc.wsServer;
import javax.jws.WebService;
@WebService
public class SayHello {
private static final String SALUTATION = "Hello";
public String getGreeting(String name) {
return SALUTATION + " " + name;
}
}
其中注意到@WebService ,這個稱作annotation或者metadata,Java SE 5中的Web Services Metadata Specification引入的。Java SE 6中對于Web Services規(guī)范的升級以及JAX-WS(Java API for XML Web Services)2.0規(guī)范,這些升級使得我們Web Services的創(chuàng)建和調(diào)用變得更加容易。使用這些新功能,我們可以僅僅使用簡單的Annotations注釋從一個Java類創(chuàng)建Web Services。開發(fā)者將其類和方法之前用該annotations指定,類告訴runtime engine以Web Service的方式和操作來使能該類和方法。這個annotations可以產(chǎn)生一個可布署的Web Service,是一個WSDL映射annotations,將Java源代碼與代表Web Service的WSDL元素連接在了一起。
4.使用Ant產(chǎn)生Server端代碼:
首先在項目中新建一個文件:build.xml,然后使用OpenWithAntEditor打開,輸入以下腳本代碼:
project default="wsgen"
target name="wsgen"
exec executable="wsgen"
arg line="-cp ./bin -keep -s ./src -d ./bin
org.gnuhpc.wsServer.SayHello"/
/exec
/target
/project
default指定了默認執(zhí)行的Target為wsgen,wsgen可以創(chuàng)建一個能夠使用WebService的類,它生成所有用于WebService發(fā)布的源代碼文件和經(jīng)過編譯過的二進制類文件。它還生成WSDL和符合規(guī)范的該類的WebService。
Target名稱為wsgen,具體執(zhí)行的命令的參數(shù):
-cp 為類路徑
-keep后產(chǎn)生的java文件
-s 產(chǎn)生的源文件放在哪
-d 產(chǎn)生的輸出問價放在哪
然后使用Ant Build選項運行:
在成功執(zhí)行的提示后,我們刷新一下Project
我們在Project區(qū)域可以看到,結(jié)果如下:
5.分布Web Service
org.gnuhpc.wsServer下建立一個類RunService:
package org.gnuhpc.wsServer;
import javax.xml.ws.Endpoint;
public class RunService {
/**
*@paramargs
*/
public static void main(String[] args) {
System.out.println("SayHello Web Service started.");
Endpoint.publish("" ,
new SayHello());
}
}
運行Run AsJava Application。我們得到結(jié)果,說明這個web service的Server端已經(jīng)啟動。
6.查看WSDL:
WindowShow ViewOtherGeneralInternal Web Browser,在其中輸入:
你可以看看到底WSDL都記錄了哪些信息。看完后可以停止該Server。
7.監(jiān)測Server
我們創(chuàng)建完Server可以用過Eclipse Web Services Explorer監(jiān)測Server,
WindowOpen PerspectiveOther JavaEE
打開Eclipse Web Services Explorer
點擊右上角的WSDL Page按鈕:
單擊WSDL Main,在URL中輸入: 按Go按鈕后出現(xiàn)一下視圖:
我們可以觸發(fā)一個Web Service操作:點擊getGreetings,添加一個參數(shù),比如gnuhpc,然后點擊Go按鈕:
8.創(chuàng)建Client端 工程和相關包與類:
創(chuàng)建一個Java Project,命名為wsClientHelloWorld,在這個項目下建立包:org.gnuhpc.wsClient
9.使用Ant產(chǎn)生Client代碼框架:
編寫Web service時,可以使用工具來利用WSDL生成進行調(diào)用的客戶端樁;或者也可以使用底層API來手動編寫Web service。前者方便,后者靈活,現(xiàn)在我們通過前者做說明:
新建文件build.xml
NewFilebuild.xml
project default="wsimport"
target name="wsimport"
exec executable="wsimport"
arg line="-keep -s ./src -p org.gnuhpc.wsClient
-d ./bin "/
/exec
/target
/project
注意:wsgen 支持從 Java class 創(chuàng)建 Web services,wsimport 支持從 WSDL 創(chuàng)建 Web services,分別對應于 JAX-RPC 方式下的 Java2WSDL 和 WSDL2Java。要根據(jù)發(fā)布的WSDL進行創(chuàng)建,這也就是為什么要先運行RunServer的原因了。
運行Server的RunService : Run AsJava Application
運行該Ant腳本,產(chǎn)生Client代碼:Run AsAnt Build
運行成功的提示如下:
生成的代碼如下:
這一步讀取WSDL并生成客戶端樁。這些樁是將為我們的代碼所用的Java類和接口。這些樁給服務器端功能提供了一個客戶端接口。例如,如果我們的服務器提供一個Maths服務,該服務帶有一個叫做add的方法。我們的客戶端代碼將調(diào)用樁上的一個方法,而樁實現(xiàn)將對該方法使用參數(shù)封裝,把Java方法調(diào)用變?yōu)閃ebservice請求。這個請求將基于HTTP發(fā)送給服務器,而且將使用SOAP作為RPC協(xié)議。監(jiān)聽服務器接收該SOAP消息,然后(十有八九)將其轉(zhuǎn)換為服務器處的一次方法調(diào)用。
1. SOAP與WSDL
SOAP(Simple Object Access Protocol)簡單對象訪問協(xié)議,是基于HTTP的傳輸協(xié)議,用來訪問遠程服務。
區(qū)別是SOAP傳輸?shù)膬?nèi)容是SOAP數(shù)據(jù)(XML格式),HTTP傳輸?shù)氖荋TTP數(shù)據(jù)。
即,SOAP請求和應答有自己的規(guī)范,也就是傳輸XML文檔,XML中定義了操作,數(shù)據(jù)等。
WSDL是對WebService請求格式的描述,包括方法,參數(shù)。
WSDL基于XML,與平臺語言無關。
WSDL可以基于SOAP,也可以基于其他傳輸協(xié)議,比如HTTP,FTP,SMTP等。
本文題目:go語言如何使用wsdl,go語言入門
轉(zhuǎn)載注明:http://jinyejixie.com/article48/hchhep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站排名、外貿(mào)建站、網(wǎng)站設計、網(wǎng)站維護、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)