Apache Abdera的目标是高效的实现Atom Syndication Format(简称Atom) 和 Atom Publishing Protocol(简称AtomPub) 定义的规范,并且功能完整,性能高。
AtomPub Server
Abdera提供classes对应atomPub的basics,详细概念解释见上篇。
引入maven最小依赖
<dependency>
<groupId>org.apache.abdera</groupId>
<artifactId>abdera-server</artifactId>
<version>1.1.1</version>
</dependency>
CollectionAdapter
public class Employee {
private int id;
private String name;
private Date updated;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
}
<dependency>
<groupId>org.apache.abdera</groupId>
<artifactId>abdera-client</artifactId>
<version>1.1.1</version>
</dependency>
检索资源(GET)
Abdera abdera = new Abdera();
AbderaClient client = new AbderaClient(abdera);
ClientResponse resp = client.get("http://localhost:8080/abdera-server-example/employee");
if (resp.getType() == ResponseType.SUCCESS) {
Document<Feed> doc = resp.getDocument();
} else {
// there was an error
}
如果资源不是XML 文档,ClientResponse提供了inputStream
InputStream in = resp.getInputStream();
resp.getContentType();
ClientResponse提供范围headers的方法,比如ETag ,Last-Modified
System.out.println(resp.getEntityTag());
System.out.println(resp.getLastModified());
System.out.println(resp.getContentLocation());
System.out.println(resp.getSlug())
客户端解析Atom Document并且打印entry titles
Abdera abdera = new Abdera();
Parser parser = abdera.getParser();
URL url = new URL("http://intertwingly.net/blog/index.atom");
Document<Feed> doc = parser.parse(url.openStream(),url.toString());
Feed feed = doc.getRoot();
System.out.println(feed.getTitle());
for (Entry entry : feed.getEntries()) {
System.out.println("\t" + entry.getTitle());
}
System.out.println (feed.getAuthor());
创建资源(POST)
AbderaClient client = new AbderaClient(abdera);
Entry entry = abdera.newEntry();
entry.setId(...);
entry.setTitle(...);
entry.setUpdated(...);
entry.setContent(...);
//...
ClientResponse resp = client.post("http://localhost:8080/abdera-server-example/employee",entry);
if (resp.getType() == ResponseType.SUCCESS) {
// success
} else {
// there was an error
}
AbderaClient client = new AbderaClient(abdera);
Entry entry = abdera.newEntry();
// ...
ClientResponse resp = client.put("http://www.example.org/collection",entry);
if (resp.getType() == ResponseType.SUCCESS) {
// success
} else {
// there was an error
}
删除资源
AbderaClient client = new AbderaClient(abdera);
ClientResponse resp = client.delete("http://www.example.org/collection");
if (resp.getType() == ResponseType.SUCCESS) {
// success
} else {
// there was an error
}
使用传统的HTTP方法
Abdera abdera = Abdera.getInstance();
AbderaClient client = new AbderaClient(abdera);
RequestEntity entity = ...
client.execute("PATCH", "http://example.org/foo", entity, null);
if (resp.getType() == ResponseType.SUCCESS) {
// success
} else {
// there was an error
}
请求选项
RequestOptions options = client.getDefaultRequestOptions();
options.setIfMatch(new EntityTag("foo"));
options.setNoCache(true);
ClientResponse resp = client.get("http://example.org/foo", options);
if (resp.getType() == ResponseType.SUCCESS) {
// success
} else {
// there was an error
}
使用SSL
Abdera abdera = new Abdera();
AbderaClient client = new AbderaClient(abdera);
// Default trust manager provider registered for port 443
AbderaClient.registerTrustManager();
client.get("https://localhost:9080/foo");
参考:
https://cwiki.apache.org/confluence/display/ABDERA/AtomPub+Client
http://abdera.apache.org/index.html