WebService技术入门
一、Webservice简介
1、 WebService是一种跨编程语言和跨操作系统平台的远程调用技术。具有异构平台的互通性,软件的复用性等优点。
2、WebService的三要素:
(1)SOAP(简单对象访问协议),基于HTTP协议,采用XML格式,用来传递信息的格式。
(2)WSDL: 用来描述如何访问具体的服务。(相当于说明书)
(3)UDDI: 用户自己可以按UDDI标准搭建UDDI服务器,用来管理,分发,查询WebService 。其他用户可以自己注册 发布WebService调用。
二、实现
1、在编写客户端代码时,需要先了解WSDL文件的基本信息。在所给的WebService访问地址的后面加上“?wsdl”,在 在浏览器中打开访问webservice接口的wsdl文件。需要了解wsdl文件的三个基本属性,在客户端编码时,需要用到这几个属性值。
2、 基于JDK开发的实现方式
服务端的实现一般分为三步:
(1)编写接口
public interface WeatherWS {public String getMsg(String CityName);
}
(2)实现类(需要在实现类中加入注解@Webservice)
@WebService
public class WeatherWSImpl implements WeatherWs{@Overridepublic String getMsg(String CityName) {return "大阴天"+CityName;}
}
(3)发布
public class AppWebService
{public static void main( String[] args ){Endpoint.publish("http://localhost:8080/webservice",new WeatherImpl());System.out.println("发布成功");}
}
其中http://localhost:8080/webservice为发布地址,运行程序后,可用http://localhost:8080/webservice?wsdl访问,访问发布成功后的wsdl文件。
客户端的实现步骤:(并未与上述的服务端配对,只是实现思路)
(1)使用wsimport命令,根据服务端发布的地址在所建项目的src目录下,生成代码。
在黑窗口切换到所建立客户端项目的src目录,再采用wsimport命令生成代码,操作如下图。
(2)编写实现类
public class WeatherClient{public static void main(String[] args) {//1.创建服务类,wsdl文件的server属性。MobileCodeWS ms=new MobileCodeWS();//2.创建实现类对象,wsdl文件的端口类型属性。MobileCodeWSSoap port= ms.getPort(MobileCodeWSSoap.class);//3.获取实现方法,wsdl文件的端口类型属性里面的实现方法。String msg=port.getMobileCodeInfo("手机号码",null);System.out.println(msg);}
}
另外,有些网络上发布的地址,在生成客户端代码时,会出现错误。例如http://www.webxml.com.cn/zh_cn/web_services.aspx 发布的天气预报,根据其wsdl文件生成代码时,会出现错误。
解决方法:把网络上的wsdl文件源码复制下来,在本地创建一个wsdl文件,然后用 <s:any minOccurs="2" maxOccurs="2" />替换掉<s:element ref="s:schema" /> <s:any /> 部分,再根据本地wsdl生成代码即可。
3、基于CXF的实现方式
(1)CXF简介:Apache CXF ( CXF=celtix+Xfire的组合)是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,CXF 大大简化了WebService并且可以天然地和 Spring 进行无缝集成,核心是org.apache.cxf.Bus(总线)。
(2)实现
前提:需要下载CXF框架,并配置好CXF的环境变量,然后把CXF框架中的lib文件下的jar包添加到项目中(客户端和服务端端都一样)。
服务端代码的编写一般分为三步:
第一、编写接口
@WebService
public interface WeatherWS {public String getMsg(String CityName);
}
第二、实现类
public class WeatherImpl implements WeatherWs{@Overridepublic String getMsg(String CityName) {return "大晴天"+CityName;}
}
第三、发布
public class Weathermain{public static void main(String[] args) {JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();//1.设置服务地址factoryBean.setAddress("http://localhost:8888/weather");//2.设置服务接口factoryBean.setServiceClass(WeatherWs.class);//3.设置服务实现类factoryBean.setServiceBean(new WeatherImpl());//通过工厂创建服务factoryBean.create();System.out.println("发布成功!");}
}
客户端的实现:(并未与上述的服务端配对,只是实现思路)
第一、类似于JDK的实现方式,通过 “wsdl2java –d . wsdl文件” 命令,在src目录下生成代码。
第二、编写实现代码
public class test {public static void main(String[] args) {JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();//1、设置地址,在wsdl文件上有。svr.setAddress("http://localhost:8888/weather");//2.实现服务接口,为wsdl上端口类型属性svr.setServiceClass(Weatherdao.class);//3.创建实现对象Weatherdao wea=(Weatherdao)svr.create();//调用方法String Msg=wea.getMsg("海南");System.out.println("jname"+name);}
}
4、Sprintboot整合CXF实现Webservice
(1)添加依赖(我在使用Springboot版本<version>2.2.1.RELEASE</version>,发生运行错误,可以使用<version>2.0.1.RELEASE</version>这个版本)
<!--CXF依赖包,开发webservice--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.11</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.11</version></dependency>
(2)编写代码
服务端代码的编写:
第一、编写接口
@WebService(targetNamespace="http://webservice_cxf.prior.prior/")
public interface WeatherWS{@WebMethodpublic @WebResult String WeatherMsg(@WebParam(CityNeme= "userName") String CityNeme);
}
第二,实现类
@Component("WeatherImpl")
@WebService(serviceName="WeatherService",//【对外发布的服务名 】:需要见名知意targetNamespace="http://webservice_cxf.prior.prior/",//【名称空间】:【实现类包名的反缀】endpointInterface = "prior.prior.webservice_cxf.WeatherWs")//【服务接口全路径】 【接口的包名】
public class WeatherImpl implements WeatherWs{@Overridepublic String WeatherMsg(String CityName) {return "大阴天: " + CityName;}
}
第三、发布
@Configuration//注册到spring启动中
public class CxfConfig {@Beanpublic ServletRegistrationBean dispatcherServlet() {return new ServletRegistrationBean(new CXFServlet(), "/cxf/*");// 发布服务名称 localhost:8080/cxf}@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}@Beanpublic Endpoint hello() {EndpointImpl endpoint = new EndpointImpl(springBus(), new WeatherImpl());// 绑定要发布的服务实现类endpoint.publish("/weather"); // 接口访问地址return endpoint;}
}
客户端代码的编写:(并未与上述的服务端配对,只是实现思路)
第一、根据CXF客户端生成代码的命令,生成客户端代码。
第二、编写实现类
public class getPhoneAddress{public static String getPhoneMessage(String phone) {//1.生成服务对象MobileCodeWS ms=new MobileCodeWS();//2.创建实现类对象MobileCodeWSSoap port= ms.getPort(MobileCodeWSSoap.class);//3.获取实现方法String msg=port.getMobileCodeInfo("手机号",null);return msg;}
WebService技术入门相关推荐
- WebService技术实现方案(转)
参考:http://blog.csdn.net/zolalad/article/details/25158995 Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的 ...
- Java开发中经常使用到的几种WebService技术实现方案
Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的不断增加,WebService的重要性也日益彰显出来.凭借webservice,我们可以实现基于不同程序语言的项目 ...
- 《Docker技术入门与实战》——2.4 本章小结
本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.4节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...
- python编程入门与案例详解pdf-Flutter技术入门与实战 PDF 清晰版
给大家带来的一篇关于Flutter相关的电子书资源,介绍了关于Flutter入门.Flutter实战.Flutter技术方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小162.5 MB, ...
- 《Docker技术入门与实战》——2.3 本书环境介绍
本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.3节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...
- 《SaltStack技术入门与实践》—— Job管理
Job管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 在SaltStack里面执行任何一个操作都会在Master上产生一个jid号.Minion ...
- 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理
[Zigbee技术入门教程-02]一图读懂ZStack协议栈的核心思想与工作机理 广东职业技术学院 欧浩源 Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽 ...
- 《 Docker 技术入门与实战 》读书笔记 ( CentOS 安装 Docker )
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS :个人所有读书笔记只记录个人想要的内容,很可能原书大量内容没有纳入笔记中... ... 以下全 ...
- android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...
老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...
- 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...
最新文章
- 尊重对手就是对自己最好的尊重
- python爬虫实例100-Python 练习实例1
- 【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )
- vc6下c++编译器通不过,c编译器通过
- 微信浏览器取消缓存的方法
- Docker最全教程——MongoDB容器化(十三)
- 字节流转化为文件流_C#文件转换为字节流及字节流转换为文件
- java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文
- mysql 机器复制_MySQL复制在同一台机器上
- 查找html的第三个input元素,获取HTML元素的3个方法
- End-to-end Recovery of Human Shape and Pose
- React antd 使用类式组件 对表单数据域进行控制 this.formRef.current.setFieldsValue
- androidid什么时候会变_高瓷绿松石是什么意思?为何绿松石的瓷度要比颜色重要?...
- librtmp库API介绍及其结构概述
- 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
- c++中文件打开失败
- 敏捷史话系列(一)| 用一半的时间做两倍的事——Jeff Sutherland
- 远控免杀专题文章(4)-Evasion模块免杀(VT免杀率12/71)
- 微电影宣传片制作步骤分享。
- android 屏幕旋转