注意:用jdk_1.6.0_21以后的版本
在JDK1.6中JAX-WS规范定义了如何发布一个webService服务
JAX-WS是指Java Api for XML – WebService
与Web服务相关的类,都位于javax.xml.ws.*包中
主要类有:
(1)@WebService
它是一个注解,用在类上指定将此类发布成一个webservice服务
* 类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。
* 不支持静态方法,final方法。
* 如果希望某个方法不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开
* 如果一个类上,添加了@WebService注解,此类中至少有一个公有的方法,否则将会启动失败
(2)Endpoint
此类为端点服务类
方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上
Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,
一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中
idea中
步骤:第一步:创建一个java项目 wsjdk_client
第二步:新建服务类
@WebService
public class HelloServer {
public String sayHello(String name){
return "hello "+name;
}
//表示此方法不会发布
@WebMethod(exclude=true)
public String sayHaha(String name){
return "哈哈"+ name;
}
}
第三步:编写TestServer类,进行发布服务
public class TestServer {
public static void main(String[] args) {
//使用静态方法 publish
Endpoint.publish("http://localhost:888/hello", new HelloServer());
}
}
第四步:测试
打开浏览器,输入:http://localhost/hello?wsdl
查看发布的webservice的wsdl描述
附:wsdl文档元素名称修改
@WebService(
serviceName="helloServers",//服务访问点集合名称
portName="helloServerPort",//访问端口类型
name="helloServer",//服务对应的类名
targetNamespace="xr.hello.com"//名称空间
)
//返回值的名称@WebResult(name="myResult")
//@WebParam(name="name")传入的参数名称
public @WebResult(name="myResult")String sayHello(@WebParam(name="name")String name){
return "hello "+name;
}
可以在浏览器上输入http://localhost/hello?wsdl查看wsdl描述
http://localhost/hello?xsd=1 查看发布的服务类中的方法描述
可以稍微做复杂一点的:
第一步:服务端
(1)新建Users类
public class Users {
private Integer id;
private String name;
//get set方法
}
第二步:服务类
@WebService
public class UsersServer {
List<Users> userList = new ArrayList<Users>();
public void addUser(Users user){
userList.add(user);
}
public List<Users> getUserList(){
return userList;
}
}
第三步:发布
public static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:808/users", new UsersServer());
}
查看结果: http://127.0.0.1:8080/users?wsdl