您的位置:首页 > 编程语言 > Java开发

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

2016-05-19 23:27 405 查看

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

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

希望通过:http://localhost:9997/rs/calculator/add 来访问服务。

该服务以两个参数的各种计算为简单例子。

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(
8ffa
));
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>


这样就完成了一个入门的小例子。

再次感谢我的老师。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java CXF Restful