随笔 - 17  文章 - 84  trackbacks - 0
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

如非特别说明,所有文章均为原创。如需引用,请注明出处
Email:liangtianyu@gmail.com
MSN:terry.liangtianyu@hotmail.com

常用链接

留言簿(4)

随笔分类(12)

随笔档案(17)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 51237
  • 排名 - 961

最新评论

阅读排行榜

评论排行榜

以下代码实现了XML的读写,LDAP的连接查找,返回结果为XML字符串,所有public方法参数均为字符串。
因为要用Applet进行LDAP的直接操作,考虑到综合效率问题,所以我没有一些现成的库,比如DOM4J。

DirContext环境设置XML:
<?xml version="1.0" encoding="UTF-8"?>
<environment>
 <factory>com.sun.jndi.ldap.LdapCtxFactory</factory>
 <providerURL</providerURL>
 <principal></principal>
 <authentication></authentication>
 <credentials></credentials>
 <version></version>
</environment>

SearchControls设置XML:
<?xml version="1.0" encoding="UTF-8"?>
<searchControls>
 <countLimit></countLimit>
 <derefLinkFlag></derefLinkFlag>
 <returningAttributes></returningAttributes>
 <returningObjFlag></returningObjFlag>
 <searchScope></searchScope>
 <timeLimit></timeLimit>
</searchControls>

  1import java.applet.*;
  2import javax.naming.*;
  3import javax.naming.directory.*;
  4import java.util.*;
  5import javax.xml.parsers.*;
  6import org.w3c.dom.*;
  7import java.io.*;
  8import org.xml.sax.*;
  9import javax.xml.transform.*;
 10import javax.xml.transform.dom.*;
 11import javax.xml.transform.stream.*;
 12
 13public class LdapUtil{
 14    /**
 15     * 把XML格式字符串转换为Document
 16     * @param xml XML格式字符串
 17     * @return org.w3c.dom.Document
 18     * @throws Exception
 19     */

 20    private Document lodaXmlString(String xml) throws Exception{
 21        DocumentBuilder docBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
 22        
 23        StringReader strReader=new StringReader(xml);
 24        InputSource inSrc=new InputSource(strReader);
 25        
 26        Document xmlDoc=docBuilder.parse(inSrc);
 27        
 28        return xmlDoc;
 29    }

 30    
 31    /**
 32     * 把Document转换为XML格式字符串
 33     * @param xmlDoc Document
 34     * @return String
 35     * @throws Exception
 36     */

 37    private String xmlDocumentToString(Document xmlDoc) throws Exception{
 38        DOMSource domSource=new DOMSource(xmlDoc);
 39        StringWriter writer=new StringWriter();
 40        StreamResult result=new StreamResult(writer);
 41        TransformerFactory tf=TransformerFactory.newInstance();
 42        Transformer transformer=tf.newTransformer();
 43        transformer.transform(domSource, result);
 44        
 45        return writer.toString();
 46    }

 47    
 48    /**
 49     * 读取XML格式配置信息
 50     * @param env XML格式配置信息
 51     * @return javax.naming.directory.DirContext
 52     * @throws Exception
 53     */

 54    private DirContext connect(String env) throws Exception{
 55        Element root=this.lodaXmlString(env).getDocumentElement();
 56        NodeList nodeList=root.getChildNodes();
 57        
 58        int length=nodeList.getLength();
 59        
 60        Properties pro=new Properties();
 61        
 62        for(int i=0;i<length;i++){
 63            Node node=nodeList.item(i);
 64            
 65            if(node.getNodeName()=="factory"){
 66                pro.put(Context.INITIAL_CONTEXT_FACTORY, node.getTextContent());
 67            }

 68            else if(node.getNodeName()=="providerURL"){
 69                pro.put(Context.PROVIDER_URL, node.getTextContent());
 70            }

 71            else if(node.getNodeName()=="principal"){
 72                pro.put(Context.SECURITY_PRINCIPAL, node.getTextContent());
 73            }

 74            else if(node.getNodeName()=="authentication"){
 75                pro.put(Context.SECURITY_AUTHENTICATION, node.getTextContent());
 76            }

 77            else if(node.getNodeName()=="credentials"){
 78                pro.put(Context.SECURITY_CREDENTIALS, node.getTextContent());
 79            }

 80            else if(node.getNodeName()=="version"){
 81                pro.put("java.naming.ldap.version", node.getTextContent());
 82            }

 83            
 84        }

 85        
 86        return new InitialDirContext(pro);
 87    }

 88    
 89    /**
 90     * 报XML字符串转换为SearchControls
 91     * @param ctr
 92     * @return SearchControls
 93     * @throws Exception
 94     */

 95    private SearchControls parseXmlToSearchControls(String ctr) throws Exception{
 96        Element root=this.lodaXmlString(ctr).getDocumentElement();
 97        
 98        NodeList nodeList=root.getChildNodes();
 99        
100        int length=nodeList.getLength();
101        
102        SearchControls sc=new SearchControls();
103        
104        for(int i=0;i<length;i++){
105            Node node=nodeList.item(i);
106            
107            if(node.getNodeName()=="countLimit"){
108                sc.setCountLimit(Long.parseLong(node.getTextContent()));
109            }

110            else if(node.getNodeName()=="derefLinkFlag"){
111                sc.setDerefLinkFlag(Boolean.parseBoolean(node.getTextContent()));
112            }

113            else if(node.getNodeName()=="returningAttributes"){
114                sc.setReturningAttributes(node.getTextContent().split(","));
115            }

116            else if(node.getNodeName()=="returningObjFlag"){
117                sc.setReturningObjFlag(Boolean.parseBoolean(node.getTextContent()));
118            }

119            else if(node.getNodeName()=="searchScope"){
120                sc.setSearchScope(Integer.parseInt(node.getTextContent()));
121            }

122            else if(node.getNodeName()=="searchScope"){
123                sc.setSearchScope(Integer.parseInt(node.getTextContent()));
124            }

125            else if(node.getNodeName()=="timeLimit"){
126                sc.setTimeLimit(Integer.parseInt(node.getTextContent()));
127            }

128        }

129        
130        return sc;
131    }

132    
133    public String search(String env,String name,String filter,String ctr){
134        DirContext ctx=null;
135        SearchControls sc=new SearchControls();
136        NamingEnumeration<SearchResult> rs=null;
137        String result="";
138        
139        try{
140            ctx=this.connect(env);
141            if(ctr!=null && ctr!=""){
142                sc=this.parseXmlToSearchControls(ctr);
143            }

144            
145            rs=ctx.search(name,filter,sc);
146            
147            DocumentBuilder docBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
148            
149            Document xmlDoc=docBuilder.newDocument();
150            
151            Element rootEl=xmlDoc.createElement("searchResult");
152            
153            while(rs!=null && rs.hasMore()){
154                SearchResult el=rs.next();
155                String elName=el.getName();
156                NamingEnumeration<? extends Attribute> attrs=el.getAttributes().getAll();
157                
158                Element recordEl=xmlDoc.createElement("record");
159                
160                recordEl.setAttribute("name", elName);
161                
162                while(attrs!=null && attrs.hasMore()){
163                    Attribute attr=attrs.next();
164                    NamingEnumeration<?> attrEnu=attr.getAll();
165                    String attrName=attr.getID();
166                    
167                    while(attrEnu!=null && attrEnu.hasMore()){
168                        Object o=attrEnu.next();
169                        Element attrEl=xmlDoc.createElement("attribute");
170                        
171                        attrEl.setAttribute("name",attrName);
172                        attrEl.setTextContent(o.toString());
173                        
174                        recordEl.appendChild(attrEl);
175                    }

176                }

177                
178                rootEl.appendChild(recordEl);
179            }

180            
181            ctx.close();
182            
183            xmlDoc.appendChild(rootEl);
184            
185            result=xmlDocumentToString(xmlDoc);
186        }

187        catch(Exception ex){
188            ex.printStackTrace();
189            
190        }

191        
192        return result;
193    }

194}

195
posted on 2007-08-08 14:05 Terry Liang 阅读(840) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: