1、写一个需要发布的接口
1 package com.hb; 2 3 import javax.jws.WebParam; 4 import javax.jws.WebService; 5 6 @WebService 7 public interface IService { 8 9 public void hello(@WebParam(name="username") String username); 10 }
备注: 一定要在接口名称上面用 @WebService 注解标示,参数@WebParam(name="username")只是说明在wsdl中指明参数的名字是username
2、对定义接口的实现
1 package com.hb; 2 3 import java.util.Date; 4 import javax.jws.WebParam; 5 import javax.jws.WebService; 6 7 @WebService(endpointInterface="com.hb.IService") 8 public class ServiceImp implements IService{ 9 10 @Override 11 public void hello(@WebParam(name = "username") String username) { 12 System.out.println("hello " + username + " now is " + new Date()); 13 } 14 15 }
备注: 一定要在接口名称上面用 @WebService 注解标示 ,里面一定要标注它对外的接口,在后面的客户端调用会体现出来。
3、发布对外提供的接口
1 package com.hb; 2 3 import javax.xml.ws.Endpoint; 4 5 public class ServiceMain { 6 7 public static void main(String[] args) { 8 String address = "http://172.16.32.72:7777/hb"; 9 Endpoint.publish(address, new ServiceImp()); 10 System.out.println("发布消息成功"); 11 } 12 13 }
在地址栏中输入 http://172.16.29.89:7777/hb?wsdl,就会出现一系列xml格式的文档,这个就表示发布的成功。
客户端
1 package com.hb; 2 3 import java.net.MalformedURLException; 4 import java.net.URL; 5 6 import javax.xml.namespace.QName; 7 import javax.xml.ws.Service; 8 9 public class Client { 10 11 /** 12 * @param args 13 * @throws MalformedURLException 14 */ 15 public static void main(String[] args) throws MalformedURLException { 16 // TODO Auto-generated method stub 17 //创建访问wsdl服务地址的url 18 URL url = new URL("http://172.16.32.72:7777/hb?wsdl"); 19 //通过Qname指明服务的具体信息 20 /* 21 * 第一个参数:接口的包名称,反序 22 * 第二个参数:实现类名+Service 23 * */ 24 QName qname = new QName("http://hb.com/","ServiceImpService"); 25 //创建服务 26 Service service = Service.create(url, qname); 27 //实现接口 28 IService iservice = service.getPort(IService.class); 29 //以上服务有问题,依然依赖于IMyServie接口 30 iservice.hello("huangbiao"); 31 32 } 33 34 }
备注:QName qname = new QName("http://hb.com/","ServiceImpService");两个参数分别对应上图中的targetNamespace 和 name。
如果在实现对外提供的接口类中没有@WebService(endpointInterface="com.hb.IService"),则会提示不认识这个接口。
上面全部操作不需要引入任何外部jar包。