如何用IDEA一步一步開發WebService客戶端程式
好不容易把WebService伺服器端搭建起來,我們還需要客戶端程式也同樣跑起來才能夠進行和伺服器端程式的通訊:
在這篇文章裡面,我會先自己寫程式碼去實現呼叫WebService伺服器端程式,接下來,通過IDEA配置的方式來呼叫WebService服務端:
首先,我寫了一個WebService客戶端程式來呼叫伺服器端程式:
import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
import javax.xml.namespace.QName;
/**
* @param
* @author wu.lin
* @description
* @create 2016年10月25日 19:51
* @throws
*/
public class HelloWorldClient {
public static void main(String[] argv) {
Service service = new Service();
String url = "http://localhost:8080/flight/services/HelloWorld?wsdl";
try {
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(url));
call .setOperationName(new QName("http://example","sayHelloWorldFrom"));
call.addParameter(new QName("from"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.setUseSOAPAction(true);
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
String result = (String)call .invoke(new Object[]{"Tom"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
執行這段程式,得到如下的結果:
嗯程式沒有問題,接下來我們用IDEA來建立一個WebService客戶端工程(注意這裡選擇WebService客戶端工程):
點選next:
Finsh,注意以下一些地方的填寫;
然後得到一個工程,IDE會生成一些類,但是這些類可能會有一些錯誤,需要我們手動去修改,經過修改後得到的HelloWorldClient類 的程式碼如下:
public static void main(String[] argv) {
try {
HelloWorldServiceLocator locator = new HelloWorldServiceLocator();
HelloWorld_PortType service = locator.getHelloWorld();
// If authorization is required
//((HelloWorldSoapBindingStub)service).setUsername("user3");
//((HelloWorldSoapBindingStub)service).setPassword("pass3");
// invoke business method
String str = service.sayHelloWorldFrom("Tom!");
System.out.println(str);
} catch (javax.xml.rpc.ServiceException ex) {
ex.printStackTrace();
} catch (java.rmi.RemoteException ex) {
ex.printStackTrace();
}
}
還有單元測試類也會報錯,是因為沒有匯入 Junit jar 包。有個解決方法,可以很快的匯入 jar 包,比如在測試類中的任何一個方法上面加一個註解 @Test , IDE就會發現缺少 jar ,然後根據錯誤提示,把 Junit 加入到 classpath 中,就 OK 了。到此為止, axis 客戶端的程式碼算是完成了。工程修改完之後,我們再執行:
又報錯了,找了很多解決方法都不行,最後我對比我們寫的程式碼和工具生成的呼叫WebService方法,並對方法做修改:
下面類是HelloWorldSoapBindingStub中的程式碼:
通過將第57行程式碼註釋掉,我得到了正確結果:
至此,通過IDEA建立WebService客戶端程式調通。
現在發現,每個人都會遇到一些不同的問題,只要耐心細心的去除錯,總能夠得到正確結果的,快去構建自己的WebService程式吧,加油!