CXF内容总结

CXF = XFire(webservice框架) + Celtrix(ESB框架)
http://cxf.apache.org/
内置jettyweb服务器

服务器端:
1.开发webservice接口,要用@webservice注解;
2.定义实现类,要用@WebService注解,并指定参数;
3.发布webservice(必要jar包:servlet,jetty) ;

客户端:
1.调用cxf的wsdl2java工具,根据wsdl文档生成java代码;
2.找到wsdl2java生成的java代码中继承了service的类,该类的实例可作为工厂;
3.调用getport方法,可返回webservice代理;

形参返回值为复杂类型,list集合,数组等时cxf都可以处理
还是一些map,非java式的复合类,处理不了
在实际的项目中,webservice组件自己并不会去实现业务功能,它只是调用业务逻辑组件的方法来暴漏webservice

在cxf开发中,如果遇到系统无法自动处理的类型,自行解决,处理思路就是提供一个转换器。
(1)使用@xmljavatypeadapter(….class) extends xmlapapter修饰cxf无法处理的类型。使用该注解时,通过value属性指定一个转换器。
(2)实现自己的转换器。转换器负责他们之间的转换。

xml里面的两个属性
targetNamespace 相当于java语言里面的package
xmlns 相当于java语言的import

一次webservice的调用,其实并不是方法的调用,而是发送soap消息(xml文档片段)
对于sayHi来说
传入消息是:

字符串

传出消息是:

字符串

对于getCatByUser操作来说
传入消息是:


字符串
整数字符串字符串


传出消息是:


字符串整数值字符串

调用一次webservice的本质:
1.客户端把调用方法参数,转换为xml文档片段(soap消息)。
2.通过网络,把xml文档片段传给服务器。
3.服务器接收xml文档片段。
4.服务器解析xml文档片段,得到webservice所需的参数。
5.服务器执行方法。
6.把执行方法得到的返回值,在此转换为xml文档片段。
7.通过网络,把xml文档给客户端。
8.客户端接收到xml。
9.客户端解析xml文档片段,提取数据。

一个语言要支持webservice
要求,该语言支持xml文档解析,生成,支持网络传输。

webservice 需要解决的问题,如何进行权限控制?
服务器端要求input消息总是携带用户名和密码。

如果不用cxf框架,soap消息的生成与解析都是由程序员负责的,但此时需要cxf框架来完成,cxf提供了拦截器。
客户端和服务器端都有两种拦截器
in拦截器
out拦截器

服务器端添加拦截器
1.获取endpoint的publish方法返回值。
2.调用该方法返回值的getininterceptor,getoutinterceptor方法来获取in,out拦截器列表,接下来添加拦截器。

自定义拦截器
需要实现interceptor接口,实际上是继承其一个实现类。

客户端添加拦截器

你可能感兴趣的:(CXF内容总结)