java开发中使用CXF发布rest风格的webservice服务

本文介绍如何使用CXF框架发布RESTful风格的WebService服务,包括REST简介、POJO类定义、WebService接口及其实现,并提供了具体的服务器启动示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java开发中使用CXF发布rest风格的webservice服务

1.什么是cxf

Cxf,apache下的webservice的开源框架。

Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTPRESTful HTTP 或者 CORBA

CORBA(Common Object Request BrokerArchitecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)

Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。

灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),weblogic上面。

2.使用cxf发布webservice步骤

l  使用jaxwsServerFactoryBean发布 webservice服务端。

        需要设置:

                        jaxwsServerFactoryBean.setAddress(“webservice地址”)

                         jaxwsServerFactoryBean.setServiceClass(“porttype类路径”);//由程序员编写的

                         jaxwsServerFactoryBean.setServiceBean(“porttype类对象”);

                         jaxwsServerFactoryBean.create();//发布一个服务

l  使用jaxwsProxyFactoryBean实现客户端调用webservice服务

                      jaxwsServerFactoryBean.setAddress(“webservice的wsdl地址”)

        jaxwsServerFactoryBean.setServiceClass(“porttype类路径”);//portType是由wsdl2java工具生成

        jaxwsServerFactoryBean.setCreate();//创建porttype对象

3. CXF发布rest风格的webservice

3.1  什么是rest

REST是什么呢? 它是一种架构风格,腾讯公司或其他公司建立API时要遵守的一种规则/风格,当然也有其他规则可以用。
使用rest方式表达url更加简单、可以准确表达这个url是一个学生信息查询url
不使用rest的url:http://ip:port/queryUser.action?userType=XXX&studentid=001&XXXX
使用 rest的url:http://ip:port/user/student/001  

3.2 创建pojo

package com.zl.ws.cxf.rest.pojo;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;

/**
 *  * @author: zenglong
 *  * @ClassName: com.zl.ws.cxf.rest.pojo
 *  * @Description:
 *  * @date: 2018/1/15
 *  
 */
@XmlRootElement
public class Student {
    private  long id;
    private  String name;
    private Date  date;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Date getDate() {
        return date;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDate(Date date) {
        this.date = date;
    }
}
3.3 webservice接口
package com.zl.ws.cxf.rest.service;

import com.zl.ws.cxf.rest.pojo.Student;

import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List;

/**
 *  * @author: zenglong
 *  * @ClassName: com.zl.ws.cxf.rest.service
 *  * @Description:
 *  * @date: 2018/1/15
 *  
 */
@WebService
@Path("/student")
public interface StudentService {

    //查询学生信息
    @GET
    @Path("/query/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Student queryStudent(@PathParam("id") long id);

    @GET
    @Path("/querylist/{type}")
    //@Produces(MediaType.APPLICATION_XML)
    @Produces({"application/json;charset=utf-8",MediaType.APPLICATION_XML})//设置媒体类型xml格式和json格式
    //如果想让rest返回xml需要在rest的url后边添加?_type=xml,默认为xml
    //如果想让rest返回json需要在rest的url后边添加?_type=json
    public List<Student> queryStudentList(@PathParam("type") String type);



}

3.4  接口实现类

package com.zl.ws.cxf.rest.service;

import com.zl.ws.cxf.rest.pojo.Student;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *  * @author: zenglong
 *  * @ClassName: com.zl.ws.cxf.rest.service
 *  * @Description:
 *  * @date: 2018/1/15
 *  
 */
public class StudentServiceImpl implements StudentService {

    @Override
    public Student queryStudent(long id) {
        // 使用静态数据
        Student student = new Student();
        student.setId(id);
        student.setName("张三");
        student.setDate(new Date());
        return student;
    }

    @Override
    public List<Student> queryStudentList(String type) {
        // 使用静态数据
        List<Student> list = new ArrayList<Student>();
        Student student1 = new Student();
        student1.setId(1000l);
        student1.setName("张三");
        student1.setDate(new Date());

        Student student2 = new Student();
        student2.setId(1000l);
        student2.setName("张三");
        student2.setDate(new Date());

        list.add(student1);
        list.add(student2);
        return list;
    }


}

3.5 服务器:

package com.zl.ws.cxf.rest.service;

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

/**
 *  * @author: zenglong
 *  * @ClassName: com.zl.ws.cxf.rest.service
 *  * @Description:服务器
 *  * @date: 2018/1/15
 *  
 */
public class StudentServer {
    public static void main(String[] args) {
        //使用jaxrsServerFactoryBean发布rest服务
        JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
        //设置rest的服务地址
        jaxrsServerFactoryBean.setAddress("http://127.0.0.1:12345/rest");
        //设置服务对象
        jaxrsServerFactoryBean.setServiceBean(new StudentServiceImpl());
        //设置资源 对象,如果有多个pojo资源 对象中间以半角逗号隔开
        jaxrsServerFactoryBean.setResourceClasses(StudentServiceImpl.class);
        //发布rest服务
        jaxrsServerFactoryBean.create();
    }
}
4.启动后,输入地址查看效果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值