restlet2.1 学习笔记(五)使用契约优先方式

为了方便服务端与客户端之间相互传输复杂的对象。 我们可以先将对象的定义使用schema(.xsd文件)定义好。然后将.xsd文件转换为java对象再通过Jaxb工具包来进行操作。

加入org.restlet.ext.jaxb.jar

第一步:定义对象Movie.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/Mail"
	xmlns:tns="http://www.example.org/Mail" elementFormDefault="qualified">
	
	<complexType name="Movie">
		<sequence>
			<element type="string" name="name" />
			<element type="long" name="size" />
			<element type="int" name="minutes" />
		</sequence>
	</complexType>
	
</schema>

第二步:进入xsd文件所在目录, 通过命令 xjc -npa -p com.zf.restlet.demo05.vo ./Movie.xsd 生成Java源文件。 然后将生成的Java源文件复制到项目中(因该包含Movie.java , ObjectFactory.java)

注意:然后打开Movie.java类,在类名上面加入@XmlRootElement注解


第三步:编写服务端资源

@Get
	public Representation getMovieInfo() throws IOException{
		Movie movie = new Movie() ;
		movie.setName("速度与激情6");
		movie.setSize(100000l);
		movie.setMinutes(120);
		//将movie对象包装成为一个JaxbRepresentation并返回
		JaxbRepresentation<Movie> result = new JaxbRepresentation<Movie>(movie);
		return result ;
	}


第四步:启动服务器,并使用浏览器访问http://localhost:8888,将会看到Movie对象的xml形式输出


第五步:使用restlet支持开发客户端

	@Test
	public void test02() throws IOException{
		ClientResource client = new ClientResource("http://localhost:8888/");  
		
		//获取返回结果
		Representation result = client.get() ;
		
		//包装为JaxbRepresentation , 注意:这里不能直接将result强制转换为JaxbRepresentation类型
		JaxbRepresentation<Movie> jr = new JaxbRepresentation<Movie>(result,Movie.class) ;
		
		Movie movie = jr.getObject() ;
		  
		System.out.printf("name:%s  size:%d  minuts:%d" , movie.getName() , movie.getSize()
				,movie.getMinutes());  
	}

执行客户端,将会看到输出:

name:速度与激情6  size:100000  minuts:120



也可以不先定义.xsd文件,而直接编写Movie.java对象。但是就要手动加上必要的注解了。

使用.xsd文件的另一个好处是对服务器端与客户端的相互传输的对象的约束。该文件可以提供给客户端,客户端就可以根据.xsd文件知道我们要接受或返回的是个什么类型的对象了。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值