--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中测试通过