Domino中java代理利用jdom生成XML

首先要把jdom-1.0.jar这个包放到notes客户端和Domino服务器端的java库路径下:...\jvm\lib\ext,并分别在服务器和客户端的安装路径下更改notes.ini的javaUserClasses参数。

    假设代理的名称为xmlJava,用ajax方式传入若干参数,调用该代理,url形如:/xxx.nsf/xmlJava?openagent&param1=aaa&param2=bbb&param3=ccc,最后用PrintWriter返回xml形式的数据给浏览器解析。

    JavaAgent.java如下:

import java.io.PrintWriter;
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Document;
import lotus.domino.Session;
/**
 * @author Kenny
 * Nov 6, 2009
 */
public class JavaAgent extends AgentBase {

 public void NotesMain() {
  Session session = null;
  AgentContext agentContext = null;
  Document context = null;
  PrintWriter pw = null;
  try {
   session = getSession();
   agentContext = session.getAgentContext();
   context = agentContext.getDocumentContext();
   String param = context.getItemValueString("Query_String_Decoded");
   //得到浏览器的参数,就是url的?后面的部分,
   //如openagent&param1=aaa&param2=bbb&param3=ccc
   String[] ps = param.split("\\&|\\=");
   //用特定的字符拆分,这里用&和=来拆分,得到参数的数组,这里ps[2]=aaa,ps[4]=bbb,ps[6]=ccc
   pw = getAgentOutput();
   Xml xml = new Xml();
   //生成xml的方法,注意一定要另写一个类来实现,否则jdom与Domino的Document对象会有冲突!!!
   xml.createXML(pw,ps);
   pw.close();
  } catch(Exception e) {
   System.out.println("JavaAgent method NotesMain() run error: " + e.toString());
  } finally {
   try {
    if(pw != null) pw.close();
    if(context != null) context.recycle();
    if(agentContext != null) agentContext.recycle();
    if(session != null) session.recycle();
   } catch(Exception e) {
    System.out.println("NotesMain() recycle objects error: " + e.toString());
   }   
  }
 }
}

    生成XML的实现类Xml.java如下:

import java.io.PrintWriter;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;

/**
 * @author Kenny
 * Nov 6, 2009
 */
public class Xml {

 public void createXML(PrintWriter pw,String[] params){
  Element root = null;
  Document doc = null;
  try{
   root = new Element("list");//创建根节点
   doc = new Document(root);//创建XML对象
   /*
    * 这里可以放上与关系数据库交互得到的数据,此处略去
    */
   for(int i = 0;i<params.length;i++){
    //添加节点,此处仅作示例,具体jdom生成xml方法参考Google
    root.addContent(new Element("value").setText(params[i]));
   }
   //下面这句很重要,一定要,否则返回的是普通的字符串,在客户端将无法解析成XML对象
   pw.println("Content-type:text/xml");
   XMLOutputter XMLOut = new XMLOutputter();
   XMLOut.output(doc, pw);
   pw.close();
  }catch(Exception e){
   System.out.println("Xml.java method createXML() run error: " + e.toString());
  }finally{
   try{
    if(pw != null) pw.close();
   }catch(Exception e){
    System.out.println("createXML() recycle objects error: " + e.toString());
   }
  }
 }
}

    最后,在浏览器端,用JavaScript对得到的responseXML对象进行解析(具体方法参考Google),就可以得到相应的数据了。以上代码在Domino R8.5下测试通过。

posted @ 2010-10-01 08:00  hannover  阅读(1353)  评论(0编辑  收藏  举报