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

webservice入门之CXF教程

发布时间:2020-12-16 22:34:44 所属栏目:安全 来源:网络整理
导读:http://blog.csdn.net/longshengguoji/article/details/41450177 1.CXF简介 ? ? Apache CXF是一个开源的Service框架,可以用于简化用户的service开发,基于CXF开发的应用可提供SOAP、XML/HTTP、RESTFUL HTTP或CORBA等服务。CXF底层页可以使用不同的传输协议

http://blog.csdn.net/longshengguoji/article/details/41450177


1.CXF简介 ? ?

Apache CXF是一个开源的Service框架,可以用于简化用户的service开发,基于CXF开发的应用可提供SOAP、XML/HTTP、RESTFUL HTTP或CORBA等服务。CXF底层页可以使用不同的传输协议,包括HTTP、JMS或JBI等。

? ? 根据CXF官方的说明,CXF包含以下特性:

  • ? ? 支持大量的Web Service标准,包括SOAP、WS-I Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging和WS-Security。
  • CXF支持大量的前端(frontend)编程模型。CXF实现了标准的JAX-WS API,它也包括一种被称为简单前端(simple frontend)的模型,这种模型无需annotation支持。CXF支持web service的两种开发模式:①规则(contract)优先的开发模式,即通过编写WSDL来开发web service;②代码优先的开发模式,即通过编写java代码来开发webservice.
? ? 说了这么多,下面来看看如何使用CXF。

2.CXF下载和安装

? ? 下载并安装CXF步骤如下:
? ? (1)登陆CXF官方站点:http://cxf.apache.org/,下载CXF最新版。笔者下载的为3.0.1版。
? ? (2)将下载得到的压缩包解压得到apache-cxf-3.0.1文件夹,进入该文件夹可以看到文件夹中包含如下所示的目录结构。
? ? ? ? bin:该目录下保存了CXF提供的一些小工具,这些工具的主要作用是完成根据WSDL代码生成java代码,以及根据WSDL代码生成javascript代码等代码生成任务。
? ? ? ? docs:该目录下有一个api子目录,其中保存了CXF的API文档。
? ? ? ? etc:该目录主要存放了CXF框架的一些杂项。
lib:该目录存放了CXF的核心类库以及编译和运行所依赖的第三方类库。
licenses:该目录下存放CXF以及第三方框架的授权文件。
modules:该目录下存放CXF按模块打包的jar包。
samples:该目录下存放了CXF的大量示例应用。这些应用是学习CXF极好的资料。
license和readme等文档
(3)将解压路径下的bin目录添加到系统的path环境变量,以便操作系统能找到bin目录下的命令,方便以后使用CXF提供的小工具。
(4)为了在项目中使用CXF框架,需要将lib文件夹下的jar包添加到项目中。

3.Web Service注释介绍

webservice注释主要有:
@WebService:定义服务,用在类上
@WebMethod:定义方法,用于方法上
@WebResult:定义返回值,用在方法上
@WebParam:定义参数,用在方法上

4.使用CXF开发web service

? ? 由于是初学,这里先写一个最简单的hello world。
? ? ? ? (1)eclipse下创建一个新的java项目CXFTest
(2)把CXF解压缩目录下bin文件夹中的jar包添加到项目中,图简单可以将在lib所有jar文件都进去,避免到时使用对象时找不到对应的包。
(3)在src目录下新建一个package包,命名为test,然后新建一个接口HelloWorld.java,源码为:
[java]? view plain copy

在CODE上查看代码片

派生到我的代码片

  1. package?test;??
  2. ??
  3. import?javax.jws.WebService;??
  4. @WebService??
  5. public?interface?HelloWorld??
  6. {??
  7. ????public?String?sayHello(String?name);??
  8. }??
(4)在test包中创建HelloWorld接口的实现类HelloWorldImpl,代码为:
[html]?

派生到我的代码片

    package?test;??
  1. import?javax.jws.WebService;??
  2. @WebService??
  3. public?class?HelloWorldImpl?implements?HelloWorld??
  4. ????@Override??
  5. ????public?String?sayHello(String?name)??
  6. ????{??
  7. ??????????
  8. ????????System.out.println("sayHello方法被调用");??
  9. ????????return?("Hello"+name);??
  10. ??????????
  11. ????}??
  12. ??
  13. }??
(5)创建主类MainServer,用来发布webservice

派生到我的代码片

    import?javax.xml.ws.Endpoint;??
  1. import?org.apache.cxf.endpoint.Server;??
  2. import?org.apache.cxf.jaxws.JaxWsServerFactoryBean;??
  3. class?MainServer??
  4. {??
  5. static?void?main(String[]?args)??
  6. //第一种发布方式:通过CXF提供的JaxWsServerFactoryBean来发布webservice??
  7. JaxWsServerFactoryBean?factory?=?new?JaxWsServerFactoryBean();??
  8. factory.setServiceClass(HelloWorldImpl.class);??
  9. factory.setAddress("http://localhost:8080/HelloWorld");??
  10. Server?server?=?factory.create();??
  11. server.start();??
  12. //第二种方式,通过JAX-WS提供的Endpoint来发布webservice??
  13. //首先创建webservice服务提供类的实例??
  14. HelloWorldImpl?implementor?=?new?HelloWorldImpl();??
  15. String?address?=?"http://localhost:8080/HelloWorld";??
  16. Endpoint.publish(address,?implementor);??
  17. }??
  18. }??
执行服务端代码,可以看到eclipse输出如下,说明webservice成功发布

在浏览器输入如下地址http://localhost:8080/HelloWorld?wsdl,可以访问该webservice服务的WSDL

(6)创建调用webservice的客户端代码

派生到我的代码片

    import?org.apache.cxf.jaxws.JaxWsProxyFactoryBean;??
  1. public?class?HelloWorldClient??
  2. ????public?static?void?main(String[]?args)??
  3. ????????JaxWsProxyFactoryBean?factory?=?new?JaxWsProxyFactoryBean();??
  4. ????????factory.setAddress("http://localhost:8080/HelloWorld");??
  5. ????????factory.setServiceClass(HelloWorld.class);??
  6. ????????HelloWorld?helloWorld?=?(HelloWorld)?factory.create();??
  7. ????????System.out.println(helloWorld.sayHello("zhuwei"));??
  8. }??
就可以通过客户端访问webservice服务了。

(编辑:李大同)

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

    推荐文章
      热点阅读