新聞中心
WSDL(Web Services Description Language)是一種用于描述Web服務(wù)的XML語(yǔ)言。它提供了一種通用的方式,描述Web服務(wù)如何訪問(wèn)、操作以及使用消息進(jìn)行通信。在Linux下,我們可以使用各種工具來(lái)調(diào)用并測(cè)試WSDL接口,如命令行工具curl、SOAPUI等。本文將介紹如何使用這些工具來(lái)進(jìn)行WSDL接口調(diào)用和測(cè)試。

一、使用curl調(diào)用WSDL接口
curl是一款常用的Linux命令行工具,用于發(fā)送和接收HTTP和HTTPS請(qǐng)求。我們可以使用curl來(lái)調(diào)用WSDL接口。
在調(diào)用WSDL接口之前,我們需要先獲取WSDL文件的URL地址。假設(shè)WSDL文件的URL地址為http://localhost:8080/Service/Service.wsdl,我們可以使用curl發(fā)送如下命令:
“`
$ curl -X GET -H “Content-Type: application/xml” http://localhost:8080/Service/Service.wsdl
“`
其中,-X參數(shù)指定請(qǐng)求方法為GET,-H參數(shù)指定請(qǐng)求頭中的Content-Type為application/xml,后面的URL為WSDL文件的URL地址。
執(zhí)行以上命令后,curl會(huì)向WSDL服務(wù)發(fā)送請(qǐng)求,并返回WSDL文件的內(nèi)容。
接下來(lái),我們需要使用WSDL工具來(lái)生成客戶端代碼,以便調(diào)用WSDL接口。在Linux下,常用的WSDL工具有wsdl2java和gsoap。
以wsdl2java為例,我們可以使用以下命令來(lái)生成Java客戶端代碼:
“`
$ wsdl2java -uri http://localhost:8080/Service/Service.wsdl -d /path/to/output/dir -p com.example.service
“`
其中,-uri參數(shù)指定WSDL文件的URL地址,-d參數(shù)指定生成的代碼存放路徑,-p參數(shù)指定生成的包名。
執(zhí)行以上命令后,wsdl2java工具會(huì)下載并解析WSDL文件,生成相應(yīng)的Java客戶端代碼。
使用生成的客戶端代碼調(diào)用WSDL接口需要相應(yīng)的運(yùn)行環(huán)境和依賴(lài)庫(kù)支持,例如JDK、Axis等。
二、使用SOAPUI測(cè)試WSDL接口
SOAPUI是一款功能強(qiáng)大的開(kāi)源API測(cè)試工具,可以用于測(cè)試各種類(lèi)型的API,包括WSDL接口。在Linux下,我們可以使用SOAPUI來(lái)測(cè)試WSDL接口。
我們需要在SOAPUI中創(chuàng)建一個(gè)新的項(xiàng)目,并將WSDL文件導(dǎo)入到項(xiàng)目中。在SOAPUI的主界面上,點(diǎn)擊左上角的File菜單,選擇New SOAPUI Project,輸入項(xiàng)目名稱(chēng)和WSDL文件的URL地址,點(diǎn)擊OK按鈕即可創(chuàng)建一個(gè)新的項(xiàng)目并導(dǎo)入WSDL文件。
接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)新的測(cè)試用例,以便測(cè)試WSDL接口。在SOAPUI的左側(cè)欄中,選擇剛剛創(chuàng)建的項(xiàng)目,右鍵點(diǎn)擊并選擇New Test Case,輸入測(cè)試用例名稱(chēng),點(diǎn)擊OK按鈕即可創(chuàng)建一個(gè)新的測(cè)試用例。
在測(cè)試用例中,我們可以創(chuàng)建多個(gè)測(cè)試步驟,每個(gè)測(cè)試步驟可以對(duì)應(yīng)WSDL接口中的一個(gè)操作。在SOAPUI的左側(cè)欄中,選擇剛剛創(chuàng)建的測(cè)試用例,右鍵點(diǎn)擊并選擇New Test Step,在彈出的菜單中選擇From WSDL,并選擇一個(gè)操作名稱(chēng)作為測(cè)試步驟名稱(chēng),點(diǎn)擊OK按鈕即可創(chuàng)建一個(gè)新的測(cè)試步驟。
對(duì)于每個(gè)測(cè)試步驟,我們需要設(shè)置相應(yīng)的請(qǐng)求和斷言。在SOAPUI的右側(cè)欄中,分別選擇Request和Assertion選項(xiàng)卡,填寫(xiě)相應(yīng)的請(qǐng)求和預(yù)期結(jié)果,然后點(diǎn)擊運(yùn)行按鈕即可運(yùn)行測(cè)試用例。
在運(yùn)行測(cè)試用例之前,我們需要設(shè)置相應(yīng)的環(huán)境變量、認(rèn)證信息等。在SOAPUI的頂部工具欄中,選擇File -> Preferences,進(jìn)入全局配置界面,可以設(shè)置環(huán)境變量、認(rèn)證信息、代理設(shè)置等。
本文介紹了在Linux下如何使用curl和SOAPUI來(lái)調(diào)用和測(cè)試WSDL接口。通過(guò)使用這些工具,我們可以方便地測(cè)試WSDL接口,并保證接口的正確性和可靠性。在實(shí)際開(kāi)發(fā)中,我們還可以使用其他工具來(lái)進(jìn)行更加專(zhuān)業(yè)、高效的接口測(cè)試和調(diào)試,例如Postman、JMeter等。
相關(guān)問(wèn)題拓展閱讀:
- java如何調(diào)用webservice接口
- 跪求大神指導(dǎo):linux下使用gsoap生成C++代碼訪問(wèn)WebService編譯出錯(cuò)
- 如何獲取天氣預(yù)報(bào)的wsdl
java如何調(diào)用webservice接口
Java調(diào)用WebService可以直接使用Apache提供的axis.jar自己編寫(xiě)代碼,伍余或者利用Eclipse自動(dòng)生成WebService Client代碼,利用其中的Proxy類(lèi)進(jìn)行調(diào)用。理論上是一樣的,只不過(guò)用Eclipse自動(dòng)生成代碼省事些。
1、編寫(xiě)代碼方虛衫式:
package com.yudun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標(biāo)識(shí)Web Service的具體路徑
String endpoint = “WebService服務(wù)地址”;
// 創(chuàng)建 Service實(shí)例
Service service = new Service();
// 通過(guò)Service實(shí)例創(chuàng)建Call的實(shí)腔譽(yù)滾例
Call call = (Call) service.createCall();
//將Web Service的服務(wù)路徑加入到call實(shí)例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設(shè)置服務(wù)的位置
// 由于需要認(rèn)證,故需要設(shè)置調(diào)用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName(“發(fā)布的wsdl里的targetNamespace里的url”, “string_itemName”) );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( “blablabla” );
call.addHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“發(fā)布的wsdl里的targetNamespace里的url”, “SoapHeader”);
// soapHeaderElement.setNamespaceURI(“發(fā)布的wsdl里的targetNamespace里的url”);
// try
// {
//soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);
// }
// catch (SOAPException e)
// {
//e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調(diào)用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName(“opName”);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“
“, “string”), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“
“, “string”), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“
“, “string”), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(“
“, “string”));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName(“發(fā)布的wsdl里的targetNamespace里的url”, “Exception”),
“Exception”,
new javax.xml.namespace.QName(“發(fā)布的wsdl里的targetNamespace里的url”, “Exception”),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName(“發(fā)布的wsdl里的targetNamespace里的url”, “opName”));
//調(diào)用Web Service,傳入?yún)?shù)
String res = ( String ) call.invoke( new Object(“arg0″,”arg1”));
System.out.println(“===============”);
return res;
}
/**
* @param args
*/
public static void main(String args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}
2、利用Eclipse自動(dòng)生成WebService client代碼就容易多了:(由于還不會(huì)發(fā)圖片,就用語(yǔ)言描述了,大家酬和看吧。。。)
首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索后的結(jié)果,點(diǎn)擊Next,在Service definition中輸入 WebService的發(fā)布地址,點(diǎn)擊Finish
這樣,WebService Client代碼已經(jīng)生成好了。
接下來(lái)寫(xiě)一個(gè)Test類(lèi),在main函數(shù)中輸入如下代碼:
String endpoint = “服務(wù)器的WebService的地址”;
YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);
try {
String resultStr = umsp.opMethod(“arg0″,”arg1”);
System.out.println(resultStr);
} catch (Exception e) {
System.out.println(“異?!?;
e.printStackTrace();
} catch (RemoteException e) {
System.out.println(“RemoteException異常”);
e.printStackTrace();
}
如果還有疑問(wèn)的話還有視頻,如果對(duì)你有幫助請(qǐng)采納!
Java通過(guò)WSDL文件來(lái)調(diào)用webservice:
注意,以下的代碼并沒(méi)有經(jīng)過(guò)真正的測(cè)試,只是說(shuō)明這些情況,不同版本的Axis相差很大,大家更好以apache網(wǎng)站上的例子為準(zhǔn),這里僅僅用于說(shuō)明其基本用法。
1,直悄扮接AXIS調(diào)用遠(yuǎn)程的web service
這種方法比較適合那些高手,他們能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是專(zhuān)門(mén)搞這行歷塵的,即使一段時(shí)間看懂,后來(lái)也就忘記肢運(yùn)禪了。直接調(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 = “
“;
//直接引用遠(yuǎn)程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(“addUser”);//WSDL里面描述的接口名稱(chēng)
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);//設(shè)置返回類(lèi)型
String temp = “測(cè)試人員”;
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)用遠(yuǎn)程的webservice
這種模式我從來(lái)沒(méi)有見(jiàn)過(guò),也沒(méi)有試過(guò),但是網(wǎng)絡(luò)上有人貼出來(lái),我也轉(zhuǎn)過(guò)來(lái)
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 inParam = new Parameter(“userName”, String.class, user, null);
soapParams.addElement(inParam);
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();
}
}
}
3,使用wsdl2java把WSDL文件轉(zhuǎn)成本地類(lèi),然后像本地類(lèi)一樣使用,即可。
這是像我這種懶人最喜歡的方式,仍然以前面的global weather report為例。
首先 java org.apache.axis.wsdl.WSDL2Java
原本的網(wǎng)址是
,中間個(gè)各問(wèn)號(hào),但是Linux下面它不能解析,所以去掉問(wèn)號(hào),改為點(diǎn)號(hào)。
那么就會(huì)出現(xiàn)4個(gè)文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我們最為關(guān)心的接口文件,如果你對(duì)RMI等SOAP實(shí)現(xiàn)的具體細(xì)節(jié)不感興趣,那么你只需要看接口文件即可,在使用的時(shí)候,引入這個(gè)接口即可,就好像使用本地類(lèi)一樣。
Java通過(guò)WSDL文件來(lái)調(diào)用webservice直接調(diào)用模慶局蔽式如下:譽(yù)州
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 = “
//直接引臘圓用遠(yuǎn)程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(“addUser”);//WSDL里面描述的接口名稱(chēng)
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);//設(shè)置返回類(lèi)型
String temp = “測(cè)試人員”;
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());
}
}
}
有掘棚幾種州基方冊(cè)散謹(jǐn)法
跪求大神指導(dǎo):linux下使用gsoap生成C++代碼訪問(wèn)WebService編譯出錯(cuò)
高端了~gsoap是什么?
找人來(lái)幫助你解決問(wèn)題,這將是幫助吧!
我不知道為什么學(xué)生認(rèn)為你好運(yùn)。游帶
請(qǐng)stdsoap2.cpp和stdsoap2.h添加到您的項(xiàng)目螞森中去悶?zāi)ギ€……
已發(fā)送到您的E-mail地址
已發(fā)送到您的E-mail地址
如何獲取天氣預(yù)報(bào)的wsdl
1、天氣預(yù)報(bào)web services地址
用瀏覽器打開(kāi)此地址,保存頁(yè)面為Weather.xml
2、新建一個(gè)java工程 webservices
建立包名 com.test.ws
將Weather.xml拷山纖貝到src目錄下
3、編寫(xiě)批處理WSDL-SQUARED.CMD,使用wsdj2java生成客戶啟唯仔悄汪端調(diào)用代碼
set AXIS_HOME=D:\axis-1_4
set CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar
java org.apache.axis.wsdl.WSDL2Java -p com.test.ws Weather.xml
Java調(diào)用以WSDL形式發(fā)布的web service
webservice的 發(fā)布一般都是使用WSDL(web service descriptive language)文件的樣式來(lái)發(fā)布的,在WSDL文件里面,包含這個(gè)webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列閉塵表
這上面列出了70多個(gè)包括很多方面的free webservice provider,utilities->global weather就可以獲取全球的天氣預(yù)報(bào)。
下面我們來(lái)看Java如何通過(guò)WSDL文件來(lái)調(diào)用這些web service:
注意,以下的代碼并沒(méi)有經(jīng)過(guò)真正的測(cè)試,只是說(shuō)明這些情況,不同版本的Axis相差很大,大家更好以apache網(wǎng)站上的例子為準(zhǔn),這里僅僅用于說(shuō)明其基本用法。
1,直接AXIS調(diào)用遠(yuǎn)程的web service
我覺(jué)得這種方法嘩敏比較適合那些高手,他們能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是專(zhuān)門(mén)搞這行的,即使一段時(shí)間看懂,后來(lái)也就忘記了。直接調(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 = “
“;
//直接引用遠(yuǎn)程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(“addUser”);//WSDL里面描述的接口名稱(chēng)
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);//設(shè)置返回類(lèi)型
String temp = “轎蘆禪測(cè)試人員”;
String result = (String)call.invoke(new Object{temp});
//給方法傳遞參數(shù),并且調(diào)用方法
System.out.println(“result is “+result);
}
關(guān)于linux 調(diào)用 測(cè)試wsdl的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享文章:Linux下如何調(diào)用并測(cè)試WSDL接口?(linux調(diào)用測(cè)試wsdl)
本文地址:http://www.5511xx.com/article/djhoece.html


咨詢
建站咨詢
