| @WebService //表示,这就是一个webservice组件,就是一个对外允许远程访问的类 @BindingType(value=SOAPBinding.SOAP12HTTP_BINDING) public class AdminWsService { @WebResult(name="loginReturn") //设置返回接收wsdl里字段的名称,没有太大作用 public String login(@WebParam(name="name") String name,@WebParam(name="password") String password){ System.out.println("用户名:"+name+"密码:"+password); return "登录成功"+name; } /** * 默认情况,在websercie组件里面的方法都是可以远程调用 * 有么一种情况,虽然方法写在webservice组个里面,但不希望远程调用。 * @param name * @param password * @return */ @WebMethod(exclude=true) public String register(String name,String password){ System.out.println("用户名:"+name+"密码:"+password); return "注册成功"+name; } /** * 默认情况,远程客户端代码生成的方法与服务端是一样的。 * @param name * @param password * @return */ @WebMethod(operationName="todo") public String undo(String name,String password){ System.out.println("用户名:"+name+"密码:"+password); return "注册成功"+name; } public Date update(User user){ System.out.println("用户名:"+user.getName()+"密码:"+user.getPassword()+"生日:"+user.getDay()); return new Date(); } } public class RunServer { public static void main(String[] args) { //创建一个服务对象 AdminWsService ass=new AdminWsService(); //发布服务 Endpoint.publish("http://localhost:8090/admin", ass); System.out.println("=================发布服务成功================"); } } public class RunClient { public static void main(String[] args) { //1.创建一个代理对象,默认情况下生成名字格式:服务端webservice组件的类型+Service; AdminWsServiceService ass=new AdminWsServiceService(); //2.通过代理对象获调用对象,默认情况下生成的名字与服务端webservice组件一样。 AdminWsService as=ass.getAdminWsServicePort(); //getXXXPort(); XXX是组件名 //3.通过调用对象调用远程方法 //String msg=as.login("张三", "123456"); //System.out.println(msg); //as.todo(arg0, arg1) User user=new User(); user.setName("张三"); user.setPassword("123"); //Date是一个有数据结构的类型,所以每一个开发语言实现的方式都不一样的。 //webservice是跨语言远程的调用技术,对于这些有数据结构的类型统一使用了一种兼容的格式。 //java对这个webservice规范统一的日期类型使用了类XMLGregorianCalendar来实现 user.setDay(DateUtils.datetoXMLGregorianCalendar(new Date())); XMLGregorianCalendar xmlGc=as.update(user); Date d=DateUtils.xmlGregorianCalendarToDate(xmlGc); System.out.println(d); }} |
| 参数 | 说明 |
-p | 指定客户端生成类的包路径;值如:cn.abc |
-s | 指定客户端执行类的源文件存放目录 |
-d | 指定客户端执行类的class文件的存放目录 |
-keep | 表示不覆盖已经生成的同名源代码 |
-b | 指定jaxws/jaxb绑定文件或额外的schemas |
-extension | 扩展来支持SOAP1.2 |
| wsimport -keep -p cn.itcast.ws.client.hello http://localhost:9080/ws/hello?wsdl |
| public static void main(String []args){ HelloWebServiceService service = new HelloWebServiceSerivce(); HelloWebService helloWebServicePort = service.getHelloWebServicePort(); String str = helloWebServicePort.sayHello(“Hello”); System.out.println(“返回值是:” + str); } |
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |