checkxml.java

来源:互联网 发布:拟态防御 知乎 编辑:程序博客网 时间:2024/06/05 19:31
  1. /**
  2.  * Title:        检验XML数据文件
  3.  * Description:  检验XML数据项
  4.  * @date :       2006-3-20
  5.  * @author :     zhanglei
  6.  * @version :    1.0
  7.  */
  8. package server;
  9. import java.io.*;
  10. import java.util.*;
  11. import java.sql.*;
  12. public class CheckXml {
  13.     private DomXML DomXML = MainServer.DomXML;
  14.     private StringBuffer log = new StringBuffer();
  15.     private String xmlFileName = "";
  16.     private int JLS = 0//读出XML文件JLS的记录数的值
  17.     private String checkFlag = "y"//是否检测XML
  18.     private String TableName = "";
  19.     public CheckXml(String fileName, String tablename) {
  20.         xmlFileName = fileName;
  21.         DomXML.GetBeginItem("CheckXmlConfig");
  22.         checkFlag = DomXML.GetItemVal("CheckFlag").trim().toLowerCase();
  23.         TableName = tablename;
  24.     }
  25.     //读取config文件,对packagehead相映ITEMNAME检验其ITEMVAL,返回检验结果
  26.     public int GetHeadCheckFlg(String itemName, String itemVal) {
  27.         int flag = 0;
  28.         if (DomXML.GetBeginItem("PackageHead") == null) {
  29.             SaveLog.SetInfo(xmlFileName + "config配置文件无法定位<PackageHead>!"1);
  30.             return -1;
  31.         }
  32.         //得到JLS头中的record记录数
  33.         if (itemName.equals("JLS") && MyFunction.IsNumber(itemVal)) {
  34.             JLS = Integer.parseInt(itemVal);
  35.             return JLS;
  36.         }
  37.         if (itemName.equals("SJBLX") && MyFunction.IsNumber(itemVal)) {
  38.             DomXML.GetBeginItem("CheckType");
  39.             String sjblx = DomXML.GetItemAttribute(xmlFileName.substring(36), "sjblx").trim();
  40.             //对数据包进行判断,文件名的数据包类型和sjblx是否一致,否则写失败库
  41.             if (!itemVal.equals(sjblx)) {
  42.                 log.setLength(0);
  43.                 log.append(xmlFileName.substring(46) + "文件名中包类型" + sjblx + "与包内类型代码" + itemVal + "不相符合;");
  44.                 SaveLog.SetInfo(xmlFileName + log.toString(), 1);
  45.                 flag = -1;
  46.             }
  47.         }
  48.         String len = DomXML.GetItemAttribute(itemName, "len").trim().toLowerCase();
  49.         if (len.length() != 0) { //数据值长度不位
  50.             if (itemVal.length() != Integer.parseInt(len)) {
  51.                 SaveLog.SetInfo(xmlFileName + itemName + "值长度不为" + len, 1);
  52.                 return -1;
  53.             }
  54.         }
  55.         //是否进行检测
  56.         if (!checkFlag.equals("y")) {
  57.             return 0;
  58.         }
  59. //        DomXML.GetBeginItem(TableName);
  60. //        String itemType = DomXML.GetItemAttribute(itemName, "itemtype").trim().toLowerCase();
  61. //        if (itemType.equals("")) { //数据项为空
  62. //            SaveLog.SetInfo(TableName + "检测内容为空!" + len, 1);
  63. //            return -1;
  64. //        }
  65.         return flag;
  66.     }
  67.     //读取config文件,对data相映ITEMNAME检验其ITEMVAL,返回检验结果
  68.     public int GetDataCheckFlg(String itemName, String itemVal) {
  69.         //是否进行检测
  70.         if (!checkFlag.equals("y")) {
  71.             return 0;
  72.         }
  73.         if (itemName.equals("Data") || itemName.equals("Package")) {
  74.             return 0;
  75.         }
  76.         int flag = 0;
  77.         if (DomXML.GetBeginItem(TableName) == null) {
  78.             //SaveLog.SetInfo(xmlFileName + "config配置文件无法定位<" + TableName + ">!", 1);
  79.             //return -1;
  80.         }else{
  81.             flag = ItemCheck(itemName, itemVal);
  82.         }
  83.         return flag;
  84.     }
  85.     //对应config中的项目进行检验
  86.     public int ItemCheck(String itemName, String itemVal) {
  87.         log.setLength(0);
  88.         String sfId = "";
  89.         try {
  90.             DomXML.GetBeginItem(TableName);
  91.             String itemType = DomXML.GetItemAttribute(itemName, "itemtype").trim().
  92.                 toLowerCase();
  93.             if (itemType.equals("")) {
  94.                 log.append(itemName + "不存在此项目字段;");
  95.                  //数据返回1,不生成SQL,此项不入库
  96.                 return 1;
  97.             }
  98.             if (itemType.indexOf("number") != -1) {
  99.                 if (!MyFunction.IsNumber(itemVal)) {
  100.                     log.append(itemName + "值不为数字;");
  101.                 }
  102.             }
  103.             if (itemType.indexOf("nonull") != -1) {
  104.                 if (itemVal.length() == 0) {
  105.                     log.append(itemName + "值为空;");
  106.                 }
  107.             }
  108.             String len = DomXML.GetItemAttribute(itemName, "len").trim().toLowerCase();
  109.             if (len.length() != 0) {
  110.                 if (itemVal.length() != Integer.parseInt(len)) {
  111.                     log.append(itemName + "值长度不为" + len + ";");
  112.                 }
  113.             }
  114.             String maxlen = DomXML.GetItemAttribute(itemName, "maxlen").trim().
  115.                 toLowerCase();
  116.             if (maxlen.length() != 0 && !itemType.equals("blob")) {
  117.                 if (itemVal.length() > Integer.parseInt(maxlen)) { //
  118.                     log.append(itemName + "值长度超过" + maxlen + ";");
  119.                 }
  120.             }
  121.             if (log.length() > 0) {
  122.                 log.insert(0, xmlFileName + "文件检验错误:身份ID为" + sfId + "的record内");
  123.                 SaveLog.SetInfo(log.toString(), 1);
  124.                 return -1;
  125.             }
  126.         }
  127.         catch (Exception e) {
  128.             SaveLog.SetInfo("config文件检验PackageHead出错:" + itemName, 2);
  129.             return -1;
  130.         }
  131.         return 0;
  132.     }
  133.     //生成数据表检验XML文件
  134.     public void GetCheckTableXml(String tablename) {
  135.         WriteXml myxml = new WriteXml();
  136.         try {
  137.             myxml.WriteFile(tablename + ".xml");
  138.             myxml.AddRoot(0, tablename);
  139.             String aa[] = new String[2];
  140.             String bb[] = new String[2];
  141.             JdbcWork jw = new JdbcWork();
  142.             ResultSet rs = jw.SelectSql("SELECT * FROM " + tablename + " WHERE 1=1");
  143.             ResultSetMetaData rsmd = rs.getMetaData();
  144.             for (int i = 1; i <= rsmd.getColumnCount(); i++) {
  145.                 System.out.println(rsmd.getColumnName(i) + " " + rsmd.getColumnTypeName(i) +
  146.                                    " " + rsmd.getColumnDisplaySize(i));
  147.                 aa[0] = "itemtype";
  148.                 bb[0] = rsmd.getColumnTypeName(i);
  149.                 aa[1] = "maxlen";
  150.                 bb[1] = String.valueOf(rsmd.getColumnDisplaySize(i));
  151.                 myxml.AddItem(0, rsmd.getColumnName(i), "", aa, bb);
  152.             }
  153.             myxml.toSave("1");
  154.             System.out.print(tablename + ".xml writing is successful.");
  155.         }
  156.         catch (Exception ex) {
  157.             System.out.print(tablename + ".xml writing is unsuccessful.");
  158.         }
  159.     }
  160.     //检测数据库字段与配置文件是否一致
  161.     public int CheckDbToXml(String TableName) {
  162.         String colName, colType, colSize;
  163.         try {
  164.             JdbcWork ZzJw = new JdbcWork();
  165.             DomXML DomXML = null;
  166.             ResultSet rs = ZzJw.SelectSql("select * from " + TableName + " where 1=2");
  167.             ResultSetMetaData rsmd = rs.getMetaData();
  168.             for (int m = 0; m < DomXML.GetItemCount(TableName); m++) {
  169.                 colName = DomXML.GetItemNoName(m).toUpperCase().trim();
  170.                 if (colName.equals("")) {
  171.                     continue;
  172.                 }
  173.                 colType = DomXML.GetItemAttribute(colName, "itemtype").toUpperCase().trim();
  174.                 colSize = DomXML.GetItemAttribute(colName, "maxlen").toUpperCase().trim();
  175.                 int cFlag = 0;
  176.                 for (int i = 1; i <= rsmd.getColumnCount(); i++) {
  177.                     if (rsmd.getColumnName(i).toLowerCase().equals(colName)) {
  178.                         if (!colType.equals(rsmd.getColumnTypeName(i))) {
  179.                             System.out.println(TableName + "表" + colName + "字段的数据库类型为" + colType + "与配置文件不匹配!");
  180.                         }
  181.                         if (!colSize.equals(String.valueOf(rsmd.getColumnDisplaySize(i)))) {
  182.                             System.out.println(TableName + "表" + colName + "字段的长度为" + colType + "与配置文件不匹配!");
  183.                         }
  184.                         cFlag = 1;
  185.                         break;
  186.                     }
  187.                 }
  188.                 if (cFlag == 0) {
  189.                     System.out.println("配置文件中字段" + colName + "不存在!");
  190.                 }
  191.             }
  192.         }
  193.         catch (Exception ex) {
  194.         }
  195.         return 1;
  196.     }
  197. }
原创粉丝点击