CXF(服务框架)的使用

  1. CXF简介

    1. CXF是Apache社区的一个java实现webservice的框架
    2. CXF提供了两种独立的实现webservice的方式
      1. JAX-WS : 基于SOAP协议,传输XML数据
      2. JAX-RS : 基于HTTP协议,遵守restful风格,支持xml,json等http支持的数据
    3. webservice也是一种service,基本的代码和以前的service没有差别
    4. webservice的整体分为两个部分: 服务器和客户端
    5. webservice的服务器端,一定要是一个web应用。
  2. JAX-RS服务

    1. restful风格

    2. JAX-RS服务的使用(服务器端的发布)

      1. 用于webservice数据传输的javabean对象,要添加注解 @XmlRootElement(name = “User”)

      2. service接口注解

        1. 接口注解

        2. @Path(“/userService”) 请求的路径,可选

        3. @Produces(“/“) 当前webservice支持的数据类型,可选

        4. 方法注解

        5. restful风格,请求的方式。必须

          1. @POST
          2. @GET
          3. @PUT
          4. @DELETE
        6. @Path(“/user”) 请求的路径,必须

        7. @Consumes({ “application/xml”, “application/json” }) 只要方法带参数

          @Produces({ “application/xml”, “application/json” }) 只要方法带返回值

          结论: 只要是webservice的方法,都加上上述两个注解,就可以

        8. 接收path的参数的注解

          @PathParam(“id”) 接收客户端传递的path参数,方法的参数中

          @Path(“/user/{id}”) 定义path参数的名称

          调用的时候:http://127.0.0.1:8080/userService/user/1

      3. RS服务的调用

        1. 导入rs-client的依赖

        2. WebClient 类来调用RS服务

        3. create 参数就是请求的webservice的url

        4. type 发送给服务器数据格式 — @Consumes

        5. accept 接收服务器传输数据格式 —- @Produces

        6. 通过http请求方式发生请求

          1. //查询方法,返回的是list集合
            Collection<? extends User> collection = WebClient
                        // 请求的url
                        .create("http://localhost:9997/userService/user")
                        // 接收的webservice方法返回数据的类型(服务器必须支持)
                        .accept(MediaType.APPLICATION_XML)
                        // 通过get请求,想获取对象的集合
                        .getCollection(User.class);
            
            User user = WebClient
                        .create("http://localhost:9997/userService/user")
                        .accept(MediaType.APPLICATION_XML)
                        .get(User.class);
            
            //保存
            WebClient.create("http://localhost:9997/userService/user")
                        .type(MediaType.APPLICATION_JSON).post(user);
            
            //修改
            WebClient.create("http://localhost:9997/userService/user")
                        .type(MediaType.APPLICATION_JSON).put(user);
            
            // 删除用户
            WebClient.create("http://localhost:9997/userService/user/1")
                // 向webservice的方法发送参数的数据类型
                        .type(MediaType.APPLICATION_JSON).delete();
            
            
          2. 如果要使用JSON作为rs服务的数据传输格式,必须依赖

                <!-- 在CXF扩展提供者,提供转换json接口  -->
                <dependency>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-rt-rs-extension-providers</artifactId>
                    <version>3.0.1</version>
                </dependency>
            
                <!-- cxf 扩展提供者 转换json 默认需求一个工具包  -->
                <dependency>
                    <groupId>org.codehaus.jettison</groupId>
                    <artifactId>jettison</artifactId>
                    <version>1.3.7</version>
                </dependency>

      spring整合RS服务

      1. 代码的编写和注解的使用和单独使用RS服务完全一致

      2. 配置

        1. web.xml

              <!-- spring配置文件位置 -->
              <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:applicationContext.xml</param-value>
              </context-param>
              <!-- spring核心监听器 -->
              <listener>
                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              </listener>
          
          <!-- CXF在web应用中的处理的servlet -->
              <servlet>
                  <servlet-name>CXFService</servlet-name>
                  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
                  <load-on-startup>1</load-on-startup>
              </servlet>
              <servlet-mapping>
                  <servlet-name>CXFService</servlet-name>
                  <url-pattern>/services/*</url-pattern>
              </servlet-mapping>

          注意: 一旦配置了CXFServlet就必须要有RS服务,不然项目启动报错,缺少一个cxf放入bean.

        2. application.xml

          引入名称空间
          xmlns:jaxrs="http://cxf.apache.org/jaxrs"
          
              <!--  
                  address 发布服务地址 
                  servicesBeans 服务实现类 
               -->
              <jaxrs:server id="userService" address="/userService" >
                  <jaxrs:serviceBeans>
                      <!-- 配置具体的实现类 -->
                      <bean class="cn.itcast.cxf.service.UserServiceImpl" />
                  </jaxrs:serviceBeans>
                <!-- 添加调用的日志拦截器,在开发阶段建议配置 -->
                  <jaxrs:inInterceptors>
                      <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                  </jaxrs:inInterceptors>
                  <jaxrs:outInterceptors>
                      <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                  </jaxrs:outInterceptors>
              </jaxrs:server>
          
        3. spring整合的rs服务的请求路径
          http://ip:port/projectName/servletUrl/springAddress/接口Path/方法Path

          http://localhost:9996/cxf_rs_spring/cxf_rs_spring/userService/userService/user
    3. 一个spring整合的JAX-RS服务的创建过程

      1. 创建maven工程,添加依赖。
      2. 先写JavaBean,添加对应的注解
      3. 再写 Service,Dao的代码,正常编写,再Service接口中,添加对应的注解
      4. 配置web.xml listener,servlet(复制)
      5. 配置application.xml,发布webservice
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen-xs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值