首先加入:org.restlet.ext.xml.jar
获取XML类型参数
服务端的定义可以用如下方式:
@Post
public String pause(DomRepresentation param) throws IOException{
/*
* 可以用下面这行代码将xml内容打印出来。但是如果调用下面的getText()方法。
* 就不能继续再解析param对象了。因为getText()方法会将内容从流中将内容读完
*/
//System.out.println("xml内容:\n" + param.getText() );
//解析xml
Document doc = param.getDocument() ;
Element mailEle = doc.getDocumentElement() ;
Element nameEle = (Element)mailEle.getElementsByTagName("name").item(0);
Element sizeEle = (Element)mailEle.getElementsByTagName("size").item(0);
Element minutsEle = (Element)mailEle.getElementsByTagName("minuts").item(0);
String name = nameEle.getTextContent() ;
String size = sizeEle.getTextContent() ;
String minuts = minutsEle.getTextContent() ;
String result = String.format("name:%s size:%s minuts:%s", name , size , minuts);
return result ;
}
在这里介绍一个RestClientUI工具。可以用该工具直接调用我们的Restlet服务。
自己去google RestClient就有下载
一、使用RestClientUI工具访问客户端
第1步,URL中输入http://localhost:8888/
第2步,在Method选项卡下的单选按钮中选择Post
第3步,在Body选项卡下的下拉框选择String Body,然后在文本框中输入如下内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><movie><name>速度与激情6</name><size>10000000</size><minuts>120</minuts></movie>
第四步,提交请求。会看到返回内容:name:速度与激情6 size:10000000 minuts:120
二、使用Restlet的客户端支持开发客户端
@Test
public void test02() throws IOException{
ClientResource client = new ClientResource("http://localhost:8080/");
//创建请求参数
DomRepresentation param = new DomRepresentation(MediaType.APPLICATION_XML);
Document doc = param.getDocument() ;
//创建节点
Node movieNode = doc.createElement("movie");
Node nameNode = doc.createElement("name");
Node sizeNode = doc.createElement("size");
Node minutsNode = doc.createElement("minuts");
//设置值
nameNode.setTextContent("速度与激情6");
sizeNode.setTextContent("10000000");
minutsNode.setTextContent("120");
movieNode.appendChild(nameNode);
movieNode.appendChild(sizeNode);
movieNode.appendChild(minutsNode);
doc.appendChild(movieNode);
Representation result = client.post(param) ; //调用post方法
System.out.println(result.getText());
}
同样会打印出结果:name:速度与激情6 size:10000000 minuts:120
同时DomRepresentation对象也支持使用Xpath来解析。在服务端多加上一个方法。加上@Put注解。
@Put
public String put(DomRepresentation param) throws IOException{
/**
* 使用XPath方式来解析XML
*/
String name = param.getText("/movie/name");
String size = param.getText("/movie/size");
String minuts = param.getText("/movie/minuts");
String result = String.format("name:%s size:%s minuts:%s", name , size , minuts);
return result ;
}
然后在使用RestClientUI测试时只需要将Method选项卡中的单选按钮Post改为Put。然后再测试就能访问服务器端的Put方法了
返回XML类型参数
在服务端再加入一个getMovie方法,使用@Get注解
@Get
public DomRepresentation getMovieInfo() throws IOException{
//创建请求参数
DomRepresentation movieInfo = new DomRepresentation(MediaType.APPLICATION_XML);
Document doc = movieInfo.getDocument() ;
//创建节点
Node movieNode = doc.createElement("movie");
Node nameNode = doc.createElement("name");
Node sizeNode = doc.createElement("size");
Node minutsNode = doc.createElement("minuts");
//设置值
nameNode.setTextContent("速度与激情6");
sizeNode.setTextContent("10000000");
minutsNode.setTextContent("120");
movieNode.appendChild(nameNode);
movieNode.appendChild(sizeNode);
movieNode.appendChild(minutsNode);
doc.appendChild(movieNode);
return movieInfo ;
}
然后就可以用浏览器访问http://localhost:8080/就可以看到返回的xml信息了。
也可以使用RestClient客户端编写代码调用。客户端如下:
@Test
public void test04() throws IOException{
ClientResource client = new ClientResource("http://localhost:8888/");
Representation result = client.get() ;
DomRepresentation dr = new DomRepresentation(result);
String name = dr.getText("/movie/name");
String size = dr.getText("/movie/size");
String minuts = dr.getText("/movie/minuts");
System.out.printf("name:%s size:%s minuts:%s", name , size , minuts);
}
输出结果为 <?xml version="1.0" encoding="UTF-8" standalone="no"?><movie><name>速度与激情6</name><size>10000000</size><minuts>120</minuts></movie>