基于RESTful类型的webService

RESTful是基于jax-rs的WebService.它即支持XML也支持JSON.
JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services的简写,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java标注来简化Web服务的客户端和服务端的开发和部署。
JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:

	@Path,标注资源类或者方法的相对路径 
	@GET,@PUT,@POST,@DELETE,标注方法是HTTP请求的类型。 
	@Produces,标注返回的MIME媒体类型  xml,json
	@Consumes,标注可接受请求的MIME媒体类型 
	@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。

RESTful的webService包括以下步骤:
第一步:添加jsr311.jar(支持JSR)文件 和jettison-1.3.jar(解析JSON)。此文件是jdk1.6提供的新支持包。支持json格式的WebService. 必须。
第二步:必须 - 创建一个JavaBean.并添加@XmlRootElement注解。
第三步:必须 - 创建一个服务类,并使用@Path等注解进行标注。
第四步:使用JaxRsServerFactoryBean发布WebService. 必须。
可以给JaxRsServerFactoryBean添加消息拦截器 – 可选。
发布成功以后,可以输入以下地址访问XML描述文件,注意此描述文件不能生成本地代码。
http://localhost:9005/users?_wadl&_type=xml
注意上面的参数是:_wadl 而不是wsdl
第五步:客户端使用HttpClient进行调用。
第六步:或是客户端使用Ajax调用。

代码示例:

package com.cxf.my;

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

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

import com.cxf.bean.User;

@Path(value="/rs")
@Produces(value={"application/xml","application/json"})
public class Restful {
	
	@GET
	@Path(value="/say/{name}")  //http://http://127.0.0.1:8080/rs/say/hello
	public User say(@PathParam("name")String nm){
		System.err.println("Hello...."+nm);
		User u = new User();
		u.setName("你好:"+nm);
		u.setAge(99);
		return u;
	}
	
	public static void main(String[] args) {
		//RESTful的请求
		JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean();
		bean.setAddress("http://127.0.0.1:8080");
		bean.setServiceBean(new Restful());
		bean.create();
	}
	

}

如果需要返回值,必须是一个JavaBean,且必须是添加了@XmlRootElement注解的,否则不能正常解析

package com.cxf.bean;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="user")
public class User {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
}

运行结果:
查看wsdl
基于RESTful类型的webService_第1张图片

发送请求:
基于RESTful类型的webService_第2张图片

你可能感兴趣的:(WebService)