基于CXF Servlet方式发布Restful的Web服务(入门篇)

基于CXF Servlet方式发布Restful的Web服务(入门篇) ##。

最近在学WebService,刚刚做好一个实习,希望对自己的学习进行记录,也希望能给其他感兴趣的小伙伴提供帮助。


1.首先,编写POJO类CalNums,@XmlRootElement注解可以实现CalNums类在java 和xml之间转换。

package POJO;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="CalNums")
public class CalNums {

  //第一个操作数
  private int firstNum;
  //第二个操作数
  private int secondNum;
  //运算结果
  private int result;

  public int getResult() {
    return result;
}
public void setResult(int result) {
    this.result = result;
}
public int getFirstNum() {
    return firstNum;
  }
  public void setFirstNum(int firstNum) {
    this.firstNum = firstNum;
  }
  public int getSecondNum() {
    return secondNum;
  }
  public void setSecondNum(int secondNum) {
    this.secondNum = secondNum;
  }  
}

2.编写Calculator接口
@GET @DELETE @POST @PUT 标注HTTP的请求类型
@Path 标注资源类或方法的相对路径
@Produces 标注返回的MIME 媒体类型(注解标注,这
个注解可以包含一组字符串,默认值是/,它指定REST 服务的响应
结果的MIME 类型,例如:application/xml、application/json、image/jpeg
等),也可以同时返回多种类型,但具体生成结果时使用哪种格式取
决于ContentType。CXF 默认返回的是JSON 字符串;
@PathParam(“fn”)与@Path(“/add/{fn}+{sn}”)中的{fn}对应,用来得到URL中的参数

package POJO;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("/calculator")
@Produces("application/xml")
public interface Calculator {
  @GET
  @Path("/add/{fn}+{sn}")
  public CalNums add(@PathParam("fn")String fn,@PathParam("sn")String sn);
  @GET
  @Path("/minus/{fn}-{sn}")
  public CalNums minus(@PathParam("fn")String fn,@PathParam("sn")String sn);
  @GET
  @Path("/multi/{fn}*{sn}")
  public CalNums multi(@PathParam("fn")String fn,@PathParam("sn")String sn);

}

3.实现接口

package DAO;

import javax.xml.bind.annotation.XmlRootElement;

import POJO.CalNums;
import POJO.Calculator;
public class CalculatorImpl implements Calculator {
    CalNums calnum=new CalNums();
    @Override

    public CalNums add(String fn, String sn) {
        // TODO Auto-generated method stub
        int a=Integer.parseInt(fn);
        int b=Integer.parseInt(sn);
        int result=a+b;
        System.out.println("result of add="+result);
        calnum.setFirstNum(a);
        calnum.setSecondNum(b);
        calnum.setResult(result);
        return calnum;
    }

    @Override
    public CalNums minus(String fn, String sn) {
        // TODO Auto-generated method stub
        int a=Integer.parseInt(fn);
        int b=Integer.parseInt(sn);
        int result=a-b;
        System.out.println("result of minus="+result);
        calnum.setFirstNum(a);
        calnum.setSecondNum(b);
        calnum.setResult(result);
        return calnum;

    }

    @Override
    public CalNums multi(String fn, String sn) {
        // TODO Auto-generated method stub
        int a=Integer.parseInt(fn);
        int b=Integer.parseInt(sn);
        int result=a*b;
        System.out.println("result of multiple="+result);
        calnum.setFirstNum(a);
        calnum.setSecondNum(b);
        calnum.setResult(result);
        return calnum;
    }

}

4.编写发布类,通过JAXRSServerFactoryBean实例对象来完成。
该类中有一些主要的方法:
public void setResourceClasses(Class… classes);
Class类型的参数,是告诉这个类,发布服务时,会用到的类

public void setAddress(String address);
设置服务的地址,例如”http://localhost:9997/rs

package Service;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

import DAO.CalculatorImpl;
import POJO.CalNums;

public class CalculatorService {
 public static void main(String[] args) {
     JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean();

     restServer.getInInterceptors().add(new LoggingInInterceptor());
     restServer.getOutInterceptors().add(new LoggingOutInterceptor());

     restServer.setResourceClasses(CalculatorImpl.class,CalNums.class);

     restServer.setAddress("http://localhost:9997/rs");
     restServer.create();
 }
}

到此就可以run一下我们的程序了。

5.测试,浏览器输入
http://localhost:9997/rs/calculator/add/1+1
可以看见如下代码

<?xml version="1.0" encoding="UTF-8" standalone="true"?>

-<CalNums>

<firstNum>1</firstNum>

<result>2</result>

<secondNum>1</secondNum>

</CalNums>

这样就完成了一个入门的小例子。
再次感谢我的老师。

猜你喜欢

转载自blog.csdn.net/qq_25353433/article/details/51458274