Added code to fetch more detailed error message from XMLBeans when there's error...
authorjwang36 <jwang36@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 23 Oct 2006 08:34:59 +0000 (08:34 +0000)
committerjwang36 <jwang36@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 23 Oct 2006 08:34:59 +0000 (08:34 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1828 6f19259b-4bc3-4df7-8a09-765794883524

Tools/Java/Source/GenBuild/org/tianocore/build/global/GlobalData.java
Tools/Java/Source/GenBuild/org/tianocore/build/global/Spd.java

index bf4cd43..c736952 100644 (file)
@@ -18,6 +18,8 @@ package org.tianocore.build.global;
 \r
 import java.io.File;\r
 import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Iterator;\r
@@ -27,11 +29,7 @@ import java.util.Set;
 \r
 import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
-\r
-import org.tianocore.common.definitions.ToolDefinitions;\r
-import org.tianocore.common.exception.EdkException;\r
-import org.tianocore.common.logger.EdkLog;\r
-import org.tianocore.pcd.entity.MemoryDatabaseManager;\r
+import org.apache.xmlbeans.XmlOptions;\r
 import org.tianocore.DbPathAndFilename;\r
 import org.tianocore.FrameworkDatabaseDocument;\r
 import org.tianocore.ModuleSurfaceAreaDocument;\r
@@ -45,6 +43,10 @@ import org.tianocore.build.toolchain.ToolChainElement;
 import org.tianocore.build.toolchain.ToolChainInfo;\r
 import org.tianocore.build.toolchain.ToolChainKey;\r
 import org.tianocore.build.toolchain.ToolChainMap;\r
+import org.tianocore.common.definitions.ToolDefinitions;\r
+import org.tianocore.common.exception.EdkException;\r
+import org.tianocore.common.logger.EdkLog;\r
+import org.tianocore.pcd.entity.MemoryDatabaseManager;\r
 \r
 /**\r
   GlobalData provide initializing, instoring, querying and update global data.\r
@@ -133,7 +135,6 @@ public class GlobalData {
     private static Map<ModuleIdentification, ToolChainMap> msaBuildOption = new HashMap<ModuleIdentification, ToolChainMap>();\r
     private static Map<ModuleIdentification, ToolChainMap> msaFamilyBuildOption = new HashMap<ModuleIdentification, ToolChainMap>();\r
 \r
-//    private static Pattern flagPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");\r
     /**\r
       Parse framework database (DB) and all SPD files listed in DB to initialize\r
       the environment for next build. This method will only be executed only once\r
@@ -173,14 +174,9 @@ public class GlobalData {
         // Parse Framework Database\r
         //\r
         File dbFile = new File(workspaceDir + File.separatorChar + workspaceDatabaseFile);\r
+        FrameworkDatabaseDocument db = null;\r
         try {\r
-            FrameworkDatabaseDocument db = (FrameworkDatabaseDocument) XmlObject.Factory.parse(dbFile);\r
-            //\r
-            // validate FrameworkDatabaseFile\r
-            //\r
-            if (!db.validate()) {\r
-                throw new EdkException("Framework Database file [" + dbFile.getPath() + "] format is invalid!");\r
-            }\r
+            db = (FrameworkDatabaseDocument)parseXmlFile(dbFile);\r
             //\r
             // Get package list\r
             //\r
@@ -203,7 +199,18 @@ public class GlobalData {
                     spdTable.put(spd.getPackageId(), spd);\r
                 }\r
             }\r
+        } catch(IOException ex) {\r
+            EdkException edkException = new EdkException("Parse of WORKSPACE Database file [" + dbFile.getPath() + "] failed!\n" + ex.getMessage());\r
+            edkException.setStackTrace(ex.getStackTrace());\r
+            throw edkException;\r
+        } catch(XmlException ex) {\r
+            EdkException edkException = new EdkException("Parse of WORKSPACE Database file [" + dbFile.getPath() + "] failed!\n" + ex.getMessage());\r
+            edkException.setStackTrace(ex.getStackTrace());\r
+            throw edkException;\r
+        }\r
 \r
+        File fpdFile = null;\r
+        try {\r
             //\r
             // Get platform list\r
             //\r
@@ -212,17 +219,11 @@ public class GlobalData {
                 Iterator<DbPathAndFilename> iter = platforms.iterator();\r
                 while (iter.hasNext()) {\r
                     String fileName = iter.next().getStringValue().trim();\r
-                    File fpdFile = new File(workspaceDir + File.separatorChar + fileName);\r
+                    fpdFile = new File(workspaceDir + File.separatorChar + fileName);\r
                     if ( !fpdFile.exists() ) {\r
                         throw new EdkException("Platform file [" + fpdFile.getPath() + "] not exists. ");\r
                     }\r
-                    XmlObject fpdDoc = XmlObject.Factory.parse(fpdFile);\r
-                    //\r
-                    // Verify FPD file, if is invalid, throw Exception\r
-                    //\r
-                    if (!fpdDoc.validate()) {\r
-                        throw new EdkException("Framework Platform Surface Area file [" + fpdFile.getPath() + "] format is invalid!");\r
-                    }\r
+                    XmlObject fpdDoc = parseXmlFile(fpdFile);\r
                     //\r
                     // We can change Map to XmlObject\r
                     //\r
@@ -244,11 +245,11 @@ public class GlobalData {
                 }\r
             }\r
         } catch(IOException ex) {\r
-            EdkException edkException = new EdkException("Parse WORKSPACE Database file [" + dbFile.getPath() + "] Error.\n" + ex.getMessage());\r
+            EdkException edkException = new EdkException("Parse of platform definition file [" + fpdFile.getPath() + "] failed!\n" + ex.getMessage());\r
             edkException.setStackTrace(ex.getStackTrace());\r
             throw edkException;\r
         } catch(XmlException ex) {\r
-            EdkException edkException = new EdkException("Parse WORKSPACE Database file [" + dbFile.getPath() + "] Error.\n" + ex.getMessage());\r
+            EdkException edkException = new EdkException("Parse of platform definition file [" + fpdFile.getPath() + "] failed!\n" + ex.getMessage());\r
             edkException.setStackTrace(ex.getStackTrace());\r
             throw edkException;\r
         }\r
@@ -416,13 +417,7 @@ public class GlobalData {
             throw new EdkException("Module Surface Area file [" + msaFile.getPath() + "] can't be found!");\r
         }\r
         try {\r
-            ModuleSurfaceAreaDocument doc = (ModuleSurfaceAreaDocument)XmlObject.Factory.parse(msaFile);\r
-            //\r
-            // Validate File if they accord with XML Schema\r
-            //\r
-            if ( !doc.validate()){\r
-                throw new EdkException("Module Surface Area file [" + msaFile.getPath() + "] format is invalid!");\r
-            }\r
+            ModuleSurfaceAreaDocument doc = (ModuleSurfaceAreaDocument)parseXmlFile(msaFile);\r
             //\r
             // parse MSA file\r
             //\r
@@ -441,11 +436,11 @@ public class GlobalData {
             msaMap.put("ModuleBuildOptions", cloneXmlObject(msa.getModuleBuildOptions(), true));\r
             return msaMap;\r
         } catch(IOException ex) {\r
-            EdkException edkException = new EdkException("Parsing MSA file [" + msaFile.getPath() + "] error. \n" + ex.getMessage());\r
+            EdkException edkException = new EdkException("Parse of MSA file [" + msaFile.getPath() + "] failed!\n" + ex.getMessage());\r
             edkException.setStackTrace(ex.getStackTrace());\r
             throw edkException;\r
         } catch(XmlException ex) {\r
-            EdkException edkException = new EdkException("Parsing MSA file [" + msaFile.getPath() + "] error. \n" + ex.getMessage());\r
+            EdkException edkException = new EdkException("Parse of MSA file [" + msaFile.getPath() + "] failed!\n" + ex.getMessage());\r
             edkException.setStackTrace(ex.getStackTrace());\r
             throw edkException;\r
         }\r
@@ -908,5 +903,29 @@ public class GlobalData {
 \r
         return pcdBuildDef;\r
     }\r
+\r
+    public static XmlObject parseXmlFile(File xmlFile) throws IOException, XmlException {\r
+        Collection errors = new ArrayList();            \r
+        XmlOptions opt = new XmlOptions();\r
+\r
+        opt.setLoadLineNumbers();\r
+        opt.setLoadMessageDigest();\r
+        opt.setErrorListener(errors);\r
+\r
+        XmlObject doc = XmlObject.Factory.parse(xmlFile, opt);\r
+        //\r
+        // Validate File if they accord with XML Schema\r
+        //\r
+        if (!doc.validate(opt)){\r
+            StringBuilder errorMessage = new StringBuilder(1024);\r
+            for (Iterator it = errors.iterator(); it.hasNext(); ) {\r
+                errorMessage.append(it.next());\r
+                errorMessage.append("\n");\r
+            }\r
+            throw new XmlException(errorMessage.toString());\r
+        }\r
+\r
+        return doc;\r
+    }\r
 }\r
 \r
index 965e8ef..951817f 100644 (file)
@@ -98,13 +98,7 @@ public class Spd {
             throw new EdkException("Package file [" + packageFile.getPath() + "] does not exist!");\r
         }\r
         try {\r
-            XmlObject spdDoc = XmlObject.Factory.parse(packageFile);\r
-            //\r
-            // Verify SPD file, if is invalid, throw Exception\r
-            //\r
-            if (! spdDoc.validate()) {\r
-                throw new EdkException("Package Surface Area file [" + packageFile.getPath() + "] format is invalid!");\r
-            }\r
+            XmlObject spdDoc = GlobalData.parseXmlFile(packageFile);\r
             //\r
             // We can change Map to XmlObject\r
             //\r