package com.fourinone; import java.io.*; import java.util.ArrayList; import javax.xml.parsers.*; import org.xml.sax.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import org.w3c.dom.*; //import com.file.*; //import com.base.*; //import com.log.LogUtil; //import javax.servlet.*; //import javax.servlet.http.*; //import com.lang.MulLangBean; import java.util.List; import java.io.FileNotFoundException; public class XmlUtil { public ArrayList getXmlPropsByFile(String filePath) { return getXmlPropsByFile(filePath, null, null); } public ArrayList getXmlPropsByFile(String filePath, String PROPSROW_DESC) { return getXmlPropsByFile(filePath, PROPSROW_DESC, null); } public ArrayList getXmlPropsByFile(String filePath, String PROPSROW_DESC, String KEY_DESC) { /*filePath += ".xml"; FileUse fu = new FileUse(); BaseBean base = new BaseBean(); if(!fu.checkFile(filePath)) filePath = base.getClassPath()+fu.getSeparator()+filePath; */ ArrayList al = new ArrayList(); try { XmlCallback handler = new XmlCallback(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); InputSource src = new InputSource(new FileInputStream(filePath)); //LogUtil.fine(filePath); if(PROPSROW_DESC!=null) handler.setPROPSROW_DESC(PROPSROW_DESC); if(KEY_DESC!=null) handler.setKEY_DESC(KEY_DESC); saxParser.parse(src ,handler); al = handler.getPropsAl(); } catch(Throwable t) { //LogUtil.fine("[XmlUtil]", "[getXmlPropsByFile]", "[Error Exception:"+filePath+"]", t); System.err.println("[XmlConfig][Error:get XmlProps From File]"+t); } return al; } public ArrayList getXmlPropsByTable() { ArrayList al = new ArrayList(); return al; } public ArrayList getXmlPropsByObject() { ArrayList al = new ArrayList(); return al; } public void getXmlFileByTable() { } public ArrayList getXmlObjectByFile(String filePath) { return getXmlObjectByFile(filePath, null, null); } public ArrayList getXmlObjectByFile(String filePath, String PROPSROW_DESC) { return getXmlObjectByFile(filePath, PROPSROW_DESC, null); } public ArrayList getXmlObjectByFile(String filePath, String PROPSROW_DESC, String KEY_DESC) { /*filePath += ".xml"; FileUse fu = new FileUse(); BaseBean base = new BaseBean(); if(!fu.checkFile(filePath)) filePath = base.getClassPath()+fu.getSeparator()+filePath; */ ArrayList al = new ArrayList(); try { XmlObjectCallback handler = new XmlObjectCallback(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); InputSource src = new InputSource(new FileInputStream(filePath)); if(PROPSROW_DESC!=null) handler.setPROPSROW_DESC(PROPSROW_DESC); if(KEY_DESC!=null) handler.setKEY_DESC(KEY_DESC); saxParser.parse(src ,handler); al = handler.getObjAl(); } catch(FileNotFoundException fex){ System.err.println("[XmlConfig][Can't find config file:"+filePath+",and create default config.xml in the path.]"); FileAdapter fa = new FileAdapter(filePath); fa.getWriter().write(getDefaultConfig().getBytes()); fa.close(); return getXmlObjectByFile(filePath, PROPSROW_DESC, KEY_DESC); } catch(Throwable t) { //LogUtil.fine("[XmlUtil]", "[getXmlObjectByFile]", "[Error Exception:"+filePath+"]", t); System.err.println("[XmlConfig][Error:get XmlObject From File]"+t); } return al; } private String getDefaultConfig(){ StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); sb.append("<PROPSTABLE DESC=\"TABLENAME\">\n"); sb.append("\t<PROPSROW DESC=\"PARK\">\n"); sb.append("\t\t<SERVICE>ParkService</SERVICE>\n"); sb.append("\t\t<SERVERS>localhost:1888,localhost:1889</SERVERS>\n"); sb.append("\t\t<SAFEMEMORYPER>0.95</SAFEMEMORYPER>\n"); sb.append("\t\t<HEARTBEAT>3000</HEARTBEAT>\n"); sb.append("\t\t<MAXDELAY>30000</MAXDELAY>\n"); sb.append("\t\t<EXPIRATION>24</EXPIRATION>\n"); sb.append("\t\t<CLEARPERIOD>0</CLEARPERIOD>\n"); sb.append("\t\t<ALWAYSTRYLEADER>false</ALWAYSTRYLEADER>\n"); sb.append("\t\t<STARTWEBAPP>true</STARTWEBAPP>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"COOLHASH\">\n"); sb.append("\t\t<DATAROOT>data</DATAROOT>\n"); sb.append("\t\t<KEYLENTH DESC=\"B\">256</KEYLENTH>\n"); sb.append("\t\t<VALUELENGTH DESC=\"M\">2</VALUELENGTH>\n"); sb.append("\t\t<REGIONLENGTH DESC=\"M\">2</REGIONLENGTH>\n"); sb.append("\t\t<LOADLENGTH DESC=\"M\">64</LOADLENGTH>\n"); sb.append("\t\t<HASHCAPACITY>1000000</HASHCAPACITY>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"CACHE\">\n"); sb.append("\t\t<SERVICE>CacheService</SERVICE>\n"); sb.append("\t\t<SERVERS>localhost:2000,localhost:2001</SERVERS>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"CACHEGROUP\">\n"); sb.append("\t\t<STARTTIME>2010-01-01</STARTTIME>\n"); sb.append("\t\t<GROUP>localhost:2000,localhost:2001@2010-01-01;localhost:2002,localhost:2003@2010-05-01;localhost:2004,localhost:2005@2010-05-01</GROUP>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"CACHEGROUP\">\n"); sb.append("\t\t<STARTTIME>2018-05-01</STARTTIME>\n"); sb.append("\t\t<GROUP>localhost:2008,localhost:2009@2018-05-01;localhost:2010,localhost:2011@2018-05-01</GROUP>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"CACHEFACADE\">\n"); sb.append("\t\t<SERVICE>CacheFacadeService</SERVICE>\n"); sb.append("\t\t<SERVERS>localhost:1998</SERVERS>\n"); sb.append("\t\t<TRYKEYSNUM>100</TRYKEYSNUM>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"WORKER\">\n"); sb.append("\t\t<TIMEOUT DESC=\"FALSE\">2</TIMEOUT>\n"); sb.append("\t\t<SERVERS>localhost:2088</SERVERS>\n"); sb.append("\t\t<SERVICE>false</SERVICE>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"CTOR\">\n"); sb.append("\t\t<!-- <CTORSERVERS>localhost:1988</CTORSERVERS> -->\n"); sb.append("\t\t<INITSERVICES>20</INITSERVICES>\n"); sb.append("\t\t<MAXSERVICES>100</MAXSERVICES>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"COMPUTEMODE\">\n"); sb.append("\t\t<MODE DESC=\"DEFAULT\">0</MODE>\n"); sb.append("\t\t<MODE>1</MODE>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"FTTP\">\n"); sb.append("\t\t<SERVERS>localhost:2121</SERVERS>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"WEBAPP\">\n"); sb.append("\t\t<SERVERS>localhost:9080</SERVERS>\n"); sb.append("\t\t<USERS>admin:admin,guest:123456,test:test</USERS>\n"); sb.append("\t</PROPSROW>\n"); sb.append("\t<PROPSROW DESC=\"LOG\">\n"); sb.append("\t\t<LEVELNAME>ALL</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>SEVERE</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>WARNING</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>INFO</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>CONFIG</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME DESC=\"LOGLEVEL\">FINE</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>FINER</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>FINEST</LEVELNAME>\n"); sb.append("\t\t<LEVELNAME>OFF</LEVELNAME>\n"); sb.append("\t\t<INFO>true</INFO>\n"); sb.append("\t\t<FINE>false</FINE>\n"); sb.append("\t</PROPSROW>\n"); sb.append("</PROPSTABLE>"); return sb.toString(); } /* public void getXmlFileByObject(ArrayList objArray, String filePath) throws Exception { getXmlOutByObject(objArray, new FileOutputStream(filePath));//FileWriter bad code } public void getExportByObject(List objArray, HttpServletResponse response, MulLangBean mull, int exportType) throws Exception { if(exportType==1)//excel { response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition","attachment; filename=data.xls"); response.getWriter().println(getTableStrByObject(objArray, mull)); } else if(exportType==2)//word { response.setContentType("application/msword"); response.setHeader("Content-disposition","attachment; filename=data.doc"); response.getWriter().println(getTableStrByObject(objArray, mull)); } else if(exportType==3)//html { response.setContentType("text/html"); response.setHeader("Content-disposition","attachment; filename=data.html"); response.getWriter().println(getTableStrByObject(objArray, mull)); } else if(exportType==4)//xml { getXmlExportByObject((ArrayList)objArray, response, mull); } } public String getTableStrByObject(List objArray, MulLangBean mull) { StringBuffer tableSb = new StringBuffer(); BaseBean base = new BaseBean(); tableSb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); tableSb.append("<table border=1>"); for(int i=0;i<objArray.size();i++) { ObjValue obj = (ObjValue)objArray.get(i); ArrayList objNames = obj.getObjNames(); if(i==0) { tableSb.append("<tr>"); for(int j=0;j<objNames.size();j++) { String tagName = (String)objNames.get(j); tableSb.append("<td>"); tableSb.append(mull!=null?mull.getString(tagName):tagName); tableSb.append("</td>"); } tableSb.append("</tr>"); } tableSb.append("<tr>"); for(int j=0;j<objNames.size();j++) { String tagName = (String)objNames.get(j); String tagValue = base.getString(obj.get(tagName)); if(tagName!=null&&(tagName.equals("DATE_CREATE")||tagName.equals("DATE_UPDATE"))) tagValue = base.getDateViewDesc(obj.get(tagName)); tableSb.append("<td>"); tableSb.append(tagValue); tableSb.append("</td>"); } tableSb.append("</tr>"); } tableSb.append("</table>"); return tableSb.toString(); } public void getXmlOutByObject(ArrayList objArray, OutputStream out)//Writer { try { Document doc = getXmlDocByObject(objArray); xmlTrans(doc, out); } catch(Exception e) { LogUtil.fine("[XmlUtil]", "[getXmlOutByObject]", "[Error Exception:]", e); } } public void getXmlOutByObject(ArrayList objArray, HttpServletResponse response) { try { //for return xml doc response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); response.setContentType("text/xml; charset=UTF-8"); //send Document doc = getXmlDocByObject(objArray); xmlTrans(doc, response.getWriter());//getOutputStream() has already been called for } catch(Exception e) { LogUtil.fine("[XmlUtil]", "[getXmlOutByObject]", "[Error Exception:]", e); } } public void getXmlExportByObject(ArrayList objArray, HttpServletResponse response, MulLangBean mull) { try { response.setContentType("application"); response.setHeader("Content-disposition","attachment; filename=data.xml"); Document doc = getXmlDocByObject(objArray, mull); xmlTrans(doc, response.getWriter()); } catch(Exception e) { LogUtil.fine("[XmlUtil]", "[getXmlExportByObject]", "[Error Exception:]", e); } } public Document getXmlDocByObject(ArrayList objArray) throws Exception { return getXmlDocByObject(objArray, null); } public Document getXmlDocByObject(ArrayList objArray, MulLangBean mull) throws Exception { Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Element PROPSTABLE = doc.createElement(mull!=null?mull.getString("PROPSTABLE"):"PROPSTABLE");//MUST HAVA A ROOT ELEMT BaseBean base = new BaseBean(); for(int i=0;i<objArray.size();i++) { Element PROPSROW = doc.createElement(mull!=null?mull.getString("PROPSROW"):"PROPSROW"); ObjValue obj = (ObjValue)objArray.get(i); ArrayList objNames = obj.getObjNames(); for(int j=0;j<objNames.size();j++) { String tagName = (String)objNames.get(j); String tagValue = base.getString(obj.get(tagName)); Element tagNameElem = doc.createElement(mull!=null?mull.getString(tagName,""):tagName); tagNameElem.appendChild(doc.createTextNode(tagValue)); PROPSROW.appendChild(tagNameElem); } PROPSTABLE.appendChild(PROPSROW); } doc.appendChild(PROPSTABLE); return doc; } public void xmlTrans(Document doc, Writer out) throws Exception { DOMSource doms = new DOMSource(doc); StreamResult sr = new StreamResult(out);//response.getOutputStream() TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.setOutputProperty("encoding", "UTF-8"); t.transform(doms, sr); } public void xmlTrans(Document doc, OutputStream out) throws Exception { DOMSource doms = new DOMSource(doc); StreamResult sr = new StreamResult(out);//response.getOutputStream() TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.setOutputProperty("encoding", "UTF-8"); t.transform(doms, sr); } */ public static void main(String args[]) { XmlUtil xu = new XmlUtil(); ArrayList al = xu.getXmlPropsByFile("db","SQLSERVER");// System.out.println(al); } }