WebService技术详解(⼆):CXF
CXF
CXF简介
CXF是⼀个开源的WebService框架。Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两⼤开源项⽬的精华,提供了对 JAX-WS 全⾯的⽀持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的⽀持,并且可以根据实际项⽬的需要,采⽤代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使⽤。
⽀持多种标准
⽀持 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;
⽀持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;
⽀持 WSDL 1.1 、2.0;
⽀持 MTOM;
它⽀持多种协议,⽐如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语⾔使⽤的WS。C,c++,C#)
Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA⽅式。
灵活的部署:可以运⾏有Tomcat,Jboss,Jetty(内置),weblogic上⾯。
CXF⼊门案例
我们还以昨天的天⽓服务为案例来看⼀下CXF的开发过程。
服务端的实现
如何生成webservice客户端1.创建⼀个空的java项⽬,创建⼀个lib⽬录,将所有jar包放⼊lib⽬录
然后为⼯程引⼊jar包,选择build path,然后Add JARS,只⽤选择cxf-manifest.jar即可。
2.创建⼀个SEI接⼝,需要在接⼝上添加@WebService注解
@WebService
public interface WeatherInterface {
public String queryWeather(String cityName);
}
3.创建SEI接⼝实现类
public class WeatherInterfaceImpl implements WeatherInterface {
public String queryWeather(String cityName) {
if("河南".equals(cityName)) {
return"热爆炸";
}else {
return"冰雹";
}
}
}
4.发布服务
public class WeatherServer {
public static void main(String[] args) {
//创建服务⼯⼚Bean
JaxWsServerFactoryBean jaxWsServerFactoryBean=new JaxWsServerFactoryBean();
//设置服务接⼝
jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);
//设置服务实现类
jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());
/
/设置服务地址
jaxWsServerFactoryBean.setAddress("127.0.0.1:12345/weather");
//创建服务
}
}
5.访问服务的wsdl⽂件地址,看服务是否发布成功
127.0.0.1:12345/weather?wsdl
发布SOAP1.2的服务端
SOAP分为1.1版本和1.2版本。JDK1.6并不⽀持1.2,我们可以通过CXF来发布SOAP1.2的服务端。
只需要在接⼝上添加注解 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)。然后重新发布服务即可
import javax.jws.WebService;
l.ws.BindingType;
l.ws.soap.SOAPBinding;
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
public String queryWeather(String cityName);
}
客户端的实现
Wsdl2java 命令是CXF 提供的⽣成客户端的⼯具,他和wsimport 类似,可以根据WSDL ⽣成客户端代码 Wsdl2java 常⽤参数:
-d ,指定输出⽬录
-p ,指定包名,如果不指定该参数,默认包名是WSDL 的命名空间的倒序
Wsdl2java ⽀持SOAP1.1和
SOAP1.2
CXF+Spring 整合发布SOAP 模式的服务服务端的实现
1.我们先创建⼀个客户端项⽬,然后引⼊jar 包,和上⾯⼀样,使⽤Add JARS 选择cxf-manifest .jar 即可 然后使⽤⼯具⽣成客户端
wsdl2java -p com .f -d . 127.0.0.1:12345/weather?wsdl
2.创建客户端
public class WeatherClient {
public static void main (String[] args) {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean(); //设置服务接⼝
jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);
//设置服务地址
jaxWsProxyFactoryBean.setAddress("127.0.0.1:12345/weather");
//获取服务接⼝实例
WeatherInterface weatherInterface=(WeatherInterface) ate(); //调⽤⽅法
String message=weatherInterface.queryWeather("河南");
System.out .println(message);
}}
1.创建WEB 项⽬,导⼊jar 包
2.创建SEI 接⼝
@WebService
@BindingType (SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
public String queryWeather (String cityName);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论