WebService笔记整理(2017-01-08)

1 webservice
1.1 基本概念
1.1.1 Web Service
Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。
采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。
xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。
XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。
当前非SOAP协议的webService以轻量为首要目标,比如http rest方式也是webservice的一种方式,或者直接使用http自定义数据协议,比如http传输json数据,http传输xml数据等。
1.1.2 WSDL
WSDL 指网络服务描述语言(Web Services Description Language)。
WSDL是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务

1.1.3 SOAP
SOAP 是一种网络通信协议
SOAP即Simple Object Access Protocol简易对象访问协议
SOAP 用于跨平台应用程序之间的通信
SOAP 被设计用来通过因特网(http)进行通信
SOAP = HTTP+XML,其实就是通过HTTP发xml数据
SOAP 很简单并可扩展支持面向对象
SOAP 允许您跨越防火墙
SOAP 将被作为 W3C 标准来发展
1.1.4 CXF
Apache CXF 是一个开源的web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。
Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。
灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),weblogic上面。
1.1.5 REST
REST 是一种软件架构模式,只是一种风格,rest服务采用HTTP 做传输协议,REST 对于HTTP 的利用实现精确的资源定位。
Rest要求对资源定位更加准确,如下:
非rest方式:http://ip:port/queryUser.action?userType=student&id=001
Rest方式:http://ip:port/user/student/query/001
Rest方式表示互联网上的资源更加准确,但是也有缺点,可能目录的层级较多不容易理解。
1.2 jax-ws开发
没有外包引入仅支持soap1.1
1.2.1 注解
1.2.1.1 注解说明
WebService的注解都位于javax.jws包下:
@WebService-定义服务,在public class上边
targetNamespace:指定命名空间
name:portType的名称
portName:port的名称
serviceName:服务名称
endpointInterface:SEI接口地址,如果一个服务类实现了多个接口,只需要发布一个接口的方法,可通过此注解指定要发布服务的接口。
@WebMethod-定义方法,在公开方法上边
operationName:方法名
exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法
@WebResult-定义返回值,在方法返回值前边
name:返回结果值的名称
@WebParam-定义参数,在方法参数前边
name:指定参数的名称
作用:
通过注解,可以更加形像的描述Web服务。对自动生成的wsdl文档进行修改,为使用者提供一个更加清晰的wsdl文档。
当修改了WebService注解之后,会影响客户端生成的代码。调用的方法名和参数名也发生了变化

1.2.1.2 注解示例:

/**
* 天气查询服务接口实现类
* @author 传智播客 Java学院
* @version V1.0
*/
@WebService(targetNamespace=”http:// webservice.itcast.cn”,
serviceName=”weatherService”,
portName=”weatherServicePort”,
name=”weatherServiceInterface”
)
public class WeatherInterfaceImpl implements WeatherInterface {

@WebMethod(operationName="queryWeather")
public @WebResult(name="weatherResult")String queryWeather(
        @WebParam(name="cityName")String cityName) {
    System.out.println("from client.."+cityName);
    String result = "晴朗";
    System.out.println("to client..."+result);
    return result;
}

public static void main(String[] args) {
    //发送webservice服务
    Endpoint.publish("http://192.168.1.100:1234/weather", new WeatherInterfaceImpl());
}

}

1.2.1.3 使用注解注意
@WebMethod对所有非静态的公共方法对外暴露为服务.
对于静态方法或非public方法是不可以使用@WebMethod注解的.
对public方法可以使用@WebMethod(exclude=true)定义为非对外暴露的服务。

1.2.2 服务端开发
1.编写SEI(Service Endpoint Interface)
2.编写SEI实现类,作为webservice提供服务类(@WebService)
3.endpoint发布服务
例:Endpoint.publish(“http://192.168.1.100:1234/weather“,new WeatherImpl());
1.2.3 四种客户端开发方式
1.2.3.1 第一种 生成客户端调用方式(不方便维护)
wsimport -s . wsdl地址
//创建服务视图
//获取服务实现类
//调用查询方法
1.2.3.2 第二种 service编程调用方式(标准的开发方式)
//创建WSDL的URL
//创建服务名称QName
//创建服务视图 Service
//获取服务实现类
//调用查询方法
1.2.3.3 第三种 HttpURLConnection调用方式
1.2.3.4 第四种 Ajax调用方式
1.3 CXF框架
1.3.1 CXF介绍
 CXF是一个开源的webservice框架,提供很多完善功能,可以实现快速开发
 CXF支持的协议:SOAP1.1/1.2,REST
 CXF支持数据格式:XML,JSON(仅在REST方式下支持)
1.3.2 CXF发布SOAP协议的服务
1.3.2.1 服务端
开发步骤:
第一步:导入Jar包
第二步:创建SEI接口,要加入@WebService
第三步:创建SEI实现类
第四步:发布服务, JaxWsServerFactoryBean发布,
设置3个参数,1.服务接口;2.服务实现类;3.服务地址;
endpoint仅支持发布实现类,JaxWsServerFactoryBean支持发布接口。
//JaxWsServerFactoryBean发布服务
JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
//设置服务接口
jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);
//设置服务实现类
jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());
//设置服务地址
jaxWsServerFactoryBean.setAddress(“http://127.0.0.1:12345/weather“);
//发布
jaxWsServerFactoryBean.create();

发布SOAP1.2的服务端
 在接口上加入如下注解:
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

1.3.2.2 客户端
第一步:生成客户端代码
Wsdl2java命令:Wsdl2java -d . wsdl地址

第二步:使用说明书,使用生成代码调用服务端
/JaxWsProxyFactoryBean调用服务端
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
//设置服务接口
jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);
//设置服务地址
jaxWsProxyFactoryBean.setAddress(“http://127.0.0.1:12345/weather“);
//获取服务接口实例
WeatherInterface weatherInterface = jaxWsProxyFactoryBean.create(WeatherInterface.class);
//调用查询方法
String weather = weatherInterface.queryWeather(“保定”);

1.3.3 CXF+Spring整合SOAP协议的服务
1.3.3.1 服务端
开发步骤:
第一步:创建web项目(引入jar包)
第二步:创建SEI接口
第三步:创建SEI实现类
第四步:配置spring配置文件,applicationContext.xml,

你可能感兴趣的:(web,service,web服务,cxf,rest)