我个人感觉webservice 过于繁琐,完全可以用http接口的方式取代。但是鉴于有很多公司还在使用它,有时候你要和一些第三方交互时有可能就需要和webservice打交道。那么,还是必要了解一下它的。
首先,这第一篇来看看怎么创建一个webservice。
首先,创建server端。新建一个java工程,名字叫 WebServiceServer
新建一个接口 MyServiceInter
package com.zhutulang.service;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService
public interface MyServiceInter {
@WebResult(name="addResult")
publicint add(@WebParam(name="a")int a, @WebParam(name="b")intb);
}
接口的实现类 MyServiceInterImpl
packagecom.zhutulang.service;
importjavax.jws.WebService;
@WebService(endpointInterface="com.zhutulang.service.MyServiceInter")
public class MyServiceInterImpl implements MyServiceInter {
@Override
public int add(int a, int b) {
System.out.println(a+"+"+b+"="+(a+b));
return a+b;
}
}
注意使用的注解。
然后是MyServer
packagecom.zhutulang.service;
importjavax.xml.ws.Endpoint;
public class MyServer {
public static void main(String[] args) {
String address = "http://localhost:8888/myservice";
Endpoint.publish(address, new MyServiceInterImpl());
System.out.println("publish success!");
}
}
将服务发布在http://localhost:8888/myservice
运行后打印出publish success!
在浏览器中输入:http://localhost:8888/myservice?wsdl
出现下图的 xml,则表示已经发布成功。
接下来,我们用wsimport来生成wsdl的客户端代码。打开cmd窗口,输入:
wsimport -d E:\tmp -keep -encoding utf-8 -verbose http://localhost:8888/myservice?wsdl
生成的代码保存在E盘的tmp文件夹下。至于wsdl的各个参数,可以自行查看。
然后,我们创建客户端工程,新建一个java工程,名字叫WebServiceClient。将E盘tmp目录下生成的代码拷过去。
在该包下,新建MyClient 类,然后我们就可以这样访问服务了:
packagecom.zhutulang.service;
public class MyClient {
public static void main(String[] args) {
MyServiceInterImplService myService = new MyServiceInterImplService();
MyServiceInter myServiceInter = myService.getMyServiceInterImplPort();
System.out.println(myServiceInter.add(12, 55));
}
}
Wsdl文件的结构:
type: 用来定义访问的类型
message: soap消息
portType : 指定服务接口
operation: 方法名
input: 入参
output: 出参
binding: 指定消息传递所使用的格式
service : 指定服务发布的名称
可以使用tcpmon 来监控webservice的请求。
相关的代码下载:http://download.csdn.net/detail/zhutulang/9487929