--sunfruit
近來webservice很流行,所以自己也做了一個(gè)webservice的server和client調(diào)試成功,其中也遇到了一些問題為了讓大家在調(diào)試的時(shí)候少走冤路,把寫好的server和client的源代碼發(fā)布出來給大家做一個(gè)參考
由于用JB發(fā)布一個(gè)webservice的server很容易,所以就不具體說明發(fā)布過程了,而且網(wǎng)上也有很多這樣的例子,或者自己摸索著也能發(fā)布成功
在源代碼中寫了必要的注釋便于大家解讀
server的源代碼
package com.service;
public class HelloWorld{
public String sayHello(){
return "Hello world!";
}
public String echo(String u){
return "Hello " + u;
}
public void setName(String name){
System.out.println(name);
}
}
很簡(jiǎn)單吧,本來就不復(fù)雜的,主要是對(duì)于接口的設(shè)計(jì)和接口的實(shí)現(xiàn)設(shè)計(jì)牽扯的業(yè)務(wù)啦、擴(kuò)展啦等等比較多,那些才算復(fù)雜,就webservice的技術(shù)本身來說不復(fù)雜的
下面來看click的源代碼
package clicktest;
import java.util.*;
import java.net.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
public class ClickTest {
public static void main(String[] args) throws Exception {
//改成你的地址
URL url = new URL ("http://localhost:8080/WebModule2/services/HelloWorld");
// 創(chuàng)建調(diào)用
Call call = new Call ();
//設(shè)置編碼方式,不用修改
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Response resp = null;
//調(diào)用方法名,因?yàn)闆]有返回值所以只需要這一行
call.setMethodName("setName");
//設(shè)置該方法的參數(shù),如果沒有參數(shù),則不需要設(shè)置
Vector params = new Vector();
params.addElement(new Parameter("test", String.class, "my name setName", null));
call.setParams(params);
call.invoke(url, "");
//調(diào)用方法名
call.setMethodName("echo");
params.clear();
params.addElement(new Parameter("test", String.class, "my name echo", null));
call.setParams(params);
//返回值對(duì)象
try {
resp = call.invoke(url, "");
}
catch (SOAPException e) {
e.printStackTrace();
}
// 檢查返回值
if (resp != null && !resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println("Answer--> " + value);
}
else {
Fault fault = resp.getFault();
System.err.println("Generated fault echo: ");
System.out.println(" Fault Code = " + fault.getFaultCode());
System.out.println(" Fault String = " + fault.getFaultString());
}
//調(diào)用方法名
call.setMethodName("sayHello");
//由于沒有參數(shù)所以將Params置為null
call.setParams(null);
//返回值對(duì)象
resp = null;
try {
resp = call.invoke(url, "");
}
catch (SOAPException e) {
e.printStackTrace();
}
// 檢查返回值
if (resp != null && !resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println("Answer--> " + value);
}
else {
Fault fault = resp.getFault();
System.err.println("Generated fault sayHello: ");
System.out.println(" Fault Code = " + fault.getFaultCode());
System.out.println(" Fault String = " + fault.getFaultString());
}
}
}
感覺有些多是吧,其實(shí)也不多的,主要是模擬了接口的三個(gè)方法的調(diào)用,如果是一個(gè)沒有返回值得方法調(diào)用也就是幾行就可以了,是不是感覺清楚了
這個(gè)server和client在JBX中測(cè)試通過