一、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技术入门相关推荐

  1. WebService技术实现方案(转)

    参考:http://blog.csdn.net/zolalad/article/details/25158995 Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的 ...

  2. Java开发中经常使用到的几种WebService技术实现方案

    Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的不断增加,WebService的重要性也日益彰显出来.凭借webservice,我们可以实现基于不同程序语言的项目 ...

  3. 《Docker技术入门与实战》——2.4 本章小结

    本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.4节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  4. python编程入门与案例详解pdf-Flutter技术入门与实战 PDF 清晰版

    给大家带来的一篇关于Flutter相关的电子书资源,介绍了关于Flutter入门.Flutter实战.Flutter技术方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小162.5 MB, ...

  5. 《Docker技术入门与实战》——2.3 本书环境介绍

    本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.3节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  6. 《SaltStack技术入门与实践》—— Job管理

    Job管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 在SaltStack里面执行任何一个操作都会在Master上产生一个jid号.Minion ...

  7. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的核心思想与工作机理 广东职业技术学院  欧浩源   Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽 ...

  8. 《 Docker 技术入门与实战 》读书笔记 ( CentOS 安装 Docker )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS :个人所有读书笔记只记录个人想要的内容,很可能原书大量内容没有纳入笔记中... ... 以下全 ...

  9. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...

    老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...

  10. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

最新文章

  1. 尊重对手就是对自己最好的尊重
  2. python爬虫实例100-Python 练习实例1
  3. 【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )
  4. vc6下c++编译器通不过,c编译器通过
  5. 微信浏览器取消缓存的方法
  6. Docker最全教程——MongoDB容器化(十三)
  7. 字节流转化为文件流_C#文件转换为字节流及字节流转换为文件
  8. java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文
  9. mysql 机器复制_MySQL复制在同一台机器上
  10. 查找html的第三个input元素,获取HTML元素的3个方法
  11. End-to-end Recovery of Human Shape and Pose
  12. React antd 使用类式组件 对表单数据域进行控制 this.formRef.current.setFieldsValue
  13. androidid什么时候会变_高瓷绿松石是什么意思?为何绿松石的瓷度要比颜色重要?...
  14. librtmp库API介绍及其结构概述
  15. 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
  16. c++中文件打开失败
  17. 敏捷史话系列(一)| 用一半的时间做两倍的事——Jeff Sutherland
  18. 远控免杀专题文章(4)-Evasion模块免杀(VT免杀率12/71)
  19. 微电影宣传片制作步骤分享。
  20. android 屏幕旋转

热门文章

  1. opencv 快速生成scv文件 java
  2. lingo的目标规划
  3. ENSP静态路由配置
  4. 开发isv应用的权限处理
  5. AMADA阿玛达触摸屏维修折弯机主机维修
  6. multisim安装后无法连接数据库_如何解决multisim无法安装的问题
  7. [转贴]九大职业之一了百了[启示录]
  8. 嵌入式硬件入门——74HC138译码器(三个IO实现8选1)
  9. 计算机图形学的学习心得,计算机图形学学习心得
  10. Windows+WSL+DockerDesktop下安装OpenV2X