[原創]基于SOAP的JAVA編寫的WEBSERVICE實例
--sunfruit近來webservice很流行,所以自己也做了一個webservice的server和client調試成功,其中也遇到了一些問題為了讓大家在調試的時候少走冤路,把寫好的server和client的源代碼發布出來給大家做一個參考
由于用JB發布一個webservice的server很容易,所以就不具體說明發布過程了,而且網上也有很多這樣的例子,或者自己摸索著也能發布成功
在源代碼中寫了必要的注釋便于大家解讀
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);
}
}
很簡單吧,本來就不復雜的,主要是對于接口的設計和接口的實現設計牽扯的業務啦、擴展啦等等比較多,那些才算復雜,就webservice的技術本身來說不復雜的
下面來看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");
// 創建調用
Call call = new Call ();
//設置編碼方式,不用修改
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Response resp = null;
//調用方法名,因為沒有返回值所以只需要這一行
call.setMethodName("setName");
//設置該方法的參數,如果沒有參數,則不需要設置
Vector params = new Vector();
params.addElement(new Parameter("test", String.class, "my name setName", null));
call.setParams(params);
call.invoke(url, "");
//調用方法名
call.setMethodName("echo");
params.clear();
params.addElement(new Parameter("test", String.class, "my name echo", null));
call.setParams(params);
//返回值對象
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());
}
//調用方法名
call.setMethodName("sayHello");
//由于沒有參數所以將Params置為null
call.setParams(null);
//返回值對象
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());
}
}
}
感覺有些多是吧,其實也不多的,主要是模擬了接口的三個方法的調用,如果是一個沒有返回值得方法調用也就是幾行就可以了,是不是感覺清楚了
這個server和client在JBX中測試通過
posted on 2006-02-19 17:37 sunfruit 閱讀(3340) 評論(3) 編輯 收藏 所屬分類: WEB SERVICE