加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService学习笔记3——CXF基础

发布时间:2020-12-16 23:05:16 所属栏目:安全 来源:网络整理
导读:1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JAVA API,它使用户无需编写复杂的SOAP ENV,WSDL。在?JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-W

1.CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JAVA API,它使用户无需编写复杂的SOAP ENV,WSDL。在?JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。?
在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

2.使用CXF开发Webservice工程步骤:?

1).为CXF设置编译和开发环境?
在http://cxf.apache.org/download.html?下载相应的CXF包,/lib目录下的jar?文件引入工程?
2).创建基于XCF的Webservice服务端工程。
3).编写Webservice的客户端程序,调用服务端服务。

3.CXF中的Factory:

CXF不但可以使用JAX-WS开发web服务,也可以将POJO发布为web服务,对于这两种不同的方式,对应的factory如下:

?????????????????????????????????服务端???????????????????????????????客户端??

JAX-WS??????????????????????JaxWsServerFactoryBean?????????????JaxWsProxyFactoryBean

POJO???????????????????????????ServiceFactoryBean?????????????????????ClientProxyFactoryBean

4.CXF使用JAX-WS开发服务端:

(1).定义服务接口:

在接口上添加Webservice注解:@WebService。如:

[java]? view plain copy
  1. package?service;??
  2. import?javax.jws.WebService;??
  3. @WebService??
  4. public?interface?OrderProcess?{??
  5. ????String?processOrder(Order?order);??
  6. }??
?

(2).实现服务接口:

在实现类上也添加Webservice注解:@WebService(endpointInterface =?服务接口全路径,???serviceName =?对外发布的服务名)。如:

[java]? import?javax.jws.WebService;??
  • @WebService(endpointInterface?=?"service.OrderProcess",serviceName=”order”)??
  • class?OrderProcessImpl?implements?OrderProcess?{??
  • ????public?String?processOrder(Order?order)?{??
  • ????????return?"hello?world"+order;??
  • ????}??
  • }??
  • ?

    (3).对外发布服务:

    [java]? //创建web服务工厂??
  • JaxWsServerFactoryBean?factory?=?new?JaxWsServerFactoryBean();??
  • //设置服务类??
  • factory.setServiceClass(服务接口实现类.class);??
  • //设置对外发布服务地址??
  • factory.setAddress(对外发布的服务地址);??
  • //创建服务??
  • Server?server?=?factory.create();??
  • //启动服务??
  • server.start();??
  • ?

    5.CXF使用JAX-WS开发客户端:

    [java]? //创建web服务代理工厂??
  • JaxWsProxyFactoryBean?factory?=?new?JaxWsProxyFactoryBean();??
  • //设置要调用的web服务服务端发布地址??
  • factory.setAddress(web服务的发布地址);??
  • //设置要调用的web服务??
  • factory.setServiceClass(web服务接口.//创建web服务对象??
  • 服务接口?对象?=?(服务接口)?factory.create();??
  • 通过对象调用web服务的方法??
  • 6.CXF使用POJO开发服务端:??
  • 和使用JAX-WS开发方式前两步完全一样,第三步稍有不同如下:??
  • //创建web服务工厂??
  • ServiceFactoryBean?svrFactory?=?new?ServiceFactoryBean();??
  • //设置服务类??
  • svrFactory.setServiceClass(服务接口实现类.class);??
  • //设置对外发布服务地址??
  • svrFactory.setAddress(对外发布的服务地址);??
  • //创建服务??
  • Server?server?=?svrFactory.create();??
  • //启动服务??
  • server.start();??
  • ?

    6.CXF使用POJO开发客户端:

    和JAX-WS方式除了代理工厂不同以外,其他均相同:

    [java]? //创建web服务代理工厂??
  • ClientProxyFactoryBean?factory?=?new?ClientProxyFactoryBean();??
  • //创建web服务对象??
  • 服务接口?对象?=?(服务接口)?factory.create();??
  • ?

    通过对象调用web服务的方法

    7.CXF与Spring的集成:

    (1).对工程引入spring支持。

    (2).在web.xml文件中添加spring和CXF相应的配置如下:

    [xhtml]?
  • <web-app>??
  • ??context-param>??
  • ??param-name>contextConfigLocation</>??
  • ??param-value>spring配置文件路径>??
  • ?>??
  • ?listener>??
  • ??listener-class>??
  • ???org.springframework.web.context.ContextLoaderListener??
  • ??>??
  • ?servlet>??
  • ??servlet-name>CXFServlet>??
  • ??display-name>CXF?Servlet>??
  • ??servlet-class>??
  • ???org.apache.cxf.transport.servlet.CXFServlet??
  • ??load-on-startup>1>??
  • ?servlet-mappingurl-pattern>/service/*>??
  • >??
  • ?

    (3).在spring配置文件中导入CXF的相关配置如下:

    [xhtml]?
  • import?resource="classpath:META-INF/cxf/cxf.xml"?/>??
  • import?resource="classpath:META-INF/cxf/cxf-extension-soap.xml"?/>??
  • import?resource="classpath:META-INF/cxf/cxf-servlet.xml"?/>??
  • ?

    (4).在spring配置文件中配置要发布的web服务如下:

    [xhtml]? jaxws:endpoint??
  • ???id="……"??
  • ???implementor="服务接口实现类全路径"??
  • ???address="/web服务发布地址(相对地址)"?/>??
  • ?

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读