基于Atom协议的数据接入规范
.NET系统:利用Atom.NET框架来提供atom源... 3
读者对象
被接入系统开发人员
简介
Atom 发布协议是一种基于 HTTP 的用于创建和编辑 Web 资源的方法。它基本上围绕着这样一种观念设计,即利用 HTTP 协议提供的基本操作(如 GET、PUT 和 DELETE)传输表示 blog 项、博客、wiki 页面、日程记录等内容的 Atom 1.0 Feed and Entry 文档实例。
本文
本文是介绍门户基于atom规范的接入待办工单、待处理事宜、信息发布等列表的开发规范(目前只支持接列表),web系统提供符合规范的atom源,并提供http访问路径,门户系统就能利用来读取并解析web系统提供的列表数据。需要注意的是,被接入方需要协助解决我方利用程序URL访问权限问题,需提供一个访问通道。
导读
读者可先从简介了解,再从提供XML源一节获得感性了解,知道要提供的atom源具体是什么样,然后可以根据您的系统是java或者.net系统对应选择java系统提供atom源或者.net系统提供atom源。然后当知道如何编写代码后,您会发现还需要了解atom的属性,接下来您可根据接入的是工单列表或者信息发布等选择阅读对应章节。
被接入系统需要做的:提供XML源
(1)需要提供一个xml格式的源,并提供完整的访问路径(如:http://ip:port/eoms/workbench/memo/tawWorkbenchMemoMain.do?method=getLists),xml内容示例如下图所示:
.NET系统:利用Atom.NET框架来提供atom源
Atom.NET 是一个开源的用于处理 ATOM 的 C# 组件
项目主页: http://atomnet.sourceforge.net/
文档地址: http://atomnet.sourceforge.net/doc/index.html
下载地址:
http://sourceforge.net/project/showfiles.php?group_id=98691&package_id=105862&release_id=253304
java系统:利用abdera框架提供atom源
使用apache abdera框架接入java web应用的列表,在工程中导入所有需要的jar包。当前使用的版本是Abdera 0.4.0,可以从官方网站http://abdera.apache.org/下载。
在action中添加getAtomLists方法
(1)从当前系统查询出对应的记录以及记录总数
代码说明:
1)参数pageIndex、pageSize直接从request中可以取到,访问时由读源方提供;
2)查询条件由提供atom源方确定,where 1=1 可以读取所有记录;
3)mgr替换成对应模块的mgr,该mgr需要返回查询得到的记录集合和记录总数。
(2)从当前系统查询出对应的记录以及记录总数
代码说明:
1) 以下两条语句创建了一个Feed
Factory factory = Abdera.getNewFactory();
Feed feed = factory.newFeed();
2)接下来就是把查询到的所有记录循环插入到Feed中,在循环体中利用
Entry entry = feed.insertEntry();
为Feed创建一个子节点,可以存一条记录,依次循环即可。
3)entry.setText(tawWorkbenchMemo.getUserName());
这句代码插入后的效果是提供xml源中xml示例图中的 “entry的text字段”。
4)title一般是存储如工单流水号这样的字段,通过链接可以直接访问到详细页面
entry.setTitle(tawWorkbenchMemo.getTitle());
5)entry的其它字段存储请参考提供xml源一节中介绍。主要就是区分String跟Date的输入。
6) 下面这条语句是提供xml源一节的xml示例中的 “38”,该字段约定用来存储总记录数。
feed.setText(map.get("total").toString());
(3)最后将feed输出到response流中
java生成atom源的源代码
所有代码如下,
/**
* 创建atom源
*/
public ActionForward getAtomLists(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// --------------用于分页,得到当前页号-------------
final Integer pageIndex = new Integer(request
.getParameter("pageIndex"));
final Integer pageSize = new Integer(request
.getParameter("pageSize"));
TawWorkbenchMemo tawWorkbenchMemo = null;
// 得到查询的条件
String whereStr = " where 1=1";
ITawWorkbenchMemoManager mgr = (ITawWorkbenchMemoManager) getBean("ItawWorkbenchMemoManager");
Map map = (Map) mgr.getTawWorkbenchMemos(pageIndex, pageSize,
whereStr);
List list = (List) map.get("result");
// 创建ATOM源
Factory factory = Abdera.getNewFactory();
Feed feed = factory.newFeed();
// 分页
for (int i = 0; i < list.size(); i++) {
tawWorkbenchMemo = (TawWorkbenchMemo) list.get(i);
Entry entry = feed.insertEntry();
entry.setTitle(tawWorkbenchMemo.getTitle());
entry.setContent(“http://www.google.com”);
entry.setSummary(tawWorkbenchMemo.getContent());
entry.setLanguage(tawWorkbenchMemo.getReciever());
entry.setText(tawWorkbenchMemo.getUserName());
entry.setRights(tawWorkbenchMemo.getLevel());
entry.setUpdated(tawWorkbenchMemo.getCreattime());
entry.setPublished("2009-01-21");
entry.setEdited(tawWorkbenchMemo.getCreattime());
Person person = entry.addAuthor(tawWorkbenchMemo.getUserid());
person.setName(tawWorkbenchMemo.getUserName());
}
// 每页显示条数
feed.setText(map.get("total").toString());
OutputStream os = response.getOutputStream();
PrintStream ps = new PrintStream(os);
feed.getDocument().writeTo(ps);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}