You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/10/25 18:29:28 UTC

svn commit: r328405 - in /beehive/trunk/netui/src/testRecorder: ./ org/apache/beehive/netui/tools/testrecorder/shared/schemas/ org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/ schema/

Author: ekoneil
Date: Tue Oct 25 09:29:09 2005
New Revision: 328405

URL: http://svn.apache.org/viewcvs?rev=328405&view=rev
Log:
Move the test recorder XSDs that are no longer XMLBeans and migrate the testRecorderWebapps.xsd file to DOM parsing / validation.

BB: self
Test: NetUI DRT pass


Added:
    beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/
    beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderDefaultConfig.xsd
      - copied unchanged from r328368, beehive/trunk/netui/src/testRecorder/schema/testRecorderDefaultConfig.xsd
    beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderServer.xsd
      - copied unchanged from r328368, beehive/trunk/netui/src/testRecorder/schema/testRecorderServer.xsd
    beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderWebapps.xsd
      - copied, changed from r328368, beehive/trunk/netui/src/testRecorder/schema/testRecorderWebapps.xsd
Removed:
    beehive/trunk/netui/src/testRecorder/schema/testRecorderDefaultConfig.xsd
    beehive/trunk/netui/src/testRecorder/schema/testRecorderServer.xsd
    beehive/trunk/netui/src/testRecorder/schema/testRecorderWebapps.xsd
Modified:
    beehive/trunk/netui/src/testRecorder/build.xml
    beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java
    beehive/trunk/netui/src/testRecorder/schema/testRecorderTests.xsd

Modified: beehive/trunk/netui/src/testRecorder/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/testRecorder/build.xml?rev=328405&r1=328404&r2=328405&view=diff
==============================================================================
--- beehive/trunk/netui/src/testRecorder/build.xml (original)
+++ beehive/trunk/netui/src/testRecorder/build.xml Tue Oct 25 09:29:09 2005
@@ -42,6 +42,10 @@
                <include name="**/*.java"/>
         </javac>
 
+        <copy todir="${module.classes.dir}">
+            <fileset dir="${module.dir}" includes="org/**/*.xsd"/>
+        </copy>
+
         <copy todir="${module.classes.dir}/org/apache/beehive/netui/tools/testrecorder/shared/schemas">
             <fileset dir="${module.dir}/schema"/>
         </copy>

Copied: beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderWebapps.xsd (from r328368, beehive/trunk/netui/src/testRecorder/schema/testRecorderWebapps.xsd)
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderWebapps.xsd?p2=beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderWebapps.xsd&p1=beehive/trunk/netui/src/testRecorder/schema/testRecorderWebapps.xsd&r1=328368&r2=328405&rev=328405&view=diff
==============================================================================
--- beehive/trunk/netui/src/testRecorder/schema/testRecorderWebapps.xsd (original)
+++ beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/schemas/testRecorderWebapps.xsd Tue Oct 25 09:29:09 2005
@@ -45,4 +45,10 @@
         </xs:sequence>
     </xs:complexType>
 
+    <xs:simpleType name="nonZeroLengthString">
+        <xs:restriction base="xs:string">
+            <xs:minLength value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
 </xs:schema>

Modified: beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java?rev=328405&r1=328404&r2=328405&view=diff
==============================================================================
--- beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java (original)
+++ beehive/trunk/netui/src/testRecorder/org/apache/beehive/netui/tools/testrecorder/shared/xmlbeans/XMLHelper.java Tue Oct 25 09:29:09 2005
@@ -32,8 +32,28 @@
 
 import org.apache.beehive.netui.tools.testrecorder.shared.util.StringHelper;
 import org.apache.beehive.netui.tools.testrecorder.shared.util.DomUtils;
-import org.apache.beehive.netui.tools.testrecorder.shared.config.*;
-import org.apache.beehive.netui.tools.testrecorder.shared.*;
+import org.apache.beehive.netui.tools.testrecorder.shared.Logger;
+import org.apache.beehive.netui.tools.testrecorder.shared.Constants;
+import org.apache.beehive.netui.tools.testrecorder.shared.RecordSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.SessionXMLException;
+import org.apache.beehive.netui.tools.testrecorder.shared.RequestData;
+import org.apache.beehive.netui.tools.testrecorder.shared.ResponseData;
+import org.apache.beehive.netui.tools.testrecorder.shared.TestResults;
+import org.apache.beehive.netui.tools.testrecorder.shared.PlaybackSessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.SessionBean;
+import org.apache.beehive.netui.tools.testrecorder.shared.NVPair;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ServerDefinition;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappDefinition;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.RuntimeConfigException;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinitions;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Config;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Webapps;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.ServerConfig;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.WebappConfig;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Categories;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.Category;
+import org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition;
 import org.apache.beehive.netui.tools.testrecorder.x2004.*;
 import org.apache.beehive.netui.tools.testrecorder.x2004.TestType;
 import org.apache.beehive.netui.tools.testrecorder.x2004.diffsession.RecorderDiffDocument;
@@ -279,7 +299,8 @@
         return list;
     }
 
-    public static void createRecordFile(File recordFile, RecordSessionBean bean) throws IOException {
+    public static void createRecordFile(File recordFile, RecordSessionBean bean)
+        throws IOException {
         XmlOptions xmlOptions = new XmlOptions();
         xmlOptions.setSavePrettyPrint();
         xmlOptions.setSavePrettyPrintIndent(3);
@@ -287,7 +308,8 @@
         doc.save(recordFile, xmlOptions);
     }
 
-    public static void createPlaybackFile(File playbackFile, PlaybackSessionBean bean) throws IOException {
+    public static void createPlaybackFile(File playbackFile, PlaybackSessionBean bean)
+        throws IOException {
         XmlOptions xmlOptions = new XmlOptions();
         xmlOptions.setSavePrettyPrint();
         xmlOptions.setSavePrettyPrintIndent(3);
@@ -310,7 +332,8 @@
         doc.save(playbackFile, xmlOptions);
     }
 
-    public static void createDiffFile(File diffFile, PlaybackSessionBean bean) throws IOException {
+    public static void createDiffFile(File diffFile, PlaybackSessionBean bean)
+        throws IOException {
         XmlOptions xmlOptions = new XmlOptions();
         xmlOptions.setSavePrettyPrint();
         xmlOptions.setSavePrettyPrintIndent(3);
@@ -342,8 +365,7 @@
         doc.save(diffFile, xmlOptions);
     }
 
-    private static RecorderSessionDocument createRecorderSessionDocument(RecordSessionBean bean,
-                                                                         XmlOptions options) {
+    private static RecorderSessionDocument createRecorderSessionDocument(RecordSessionBean bean, XmlOptions options) {
         RecorderSessionDocument doc = createRecorderSessionDocument((SessionBean) bean, options);
         RecorderSessionDocument.RecorderSession session = doc.getRecorderSession();
         session.setTestCount(bean.getTestCount());
@@ -442,21 +464,7 @@
         if (is == null)
             throw new RuntimeConfigException("ERROR: unable to obtain the resource stream for resource( " + Constants.WEBAPPS_FILE + " )");
 
-        Webapps webapps = null;
-        try {
-            webapps = XMLHelper.getWebapps(is, Constants.WEBAPPS_FILE, config);
-        }
-        catch (ConfigException e) {
-            throw new RuntimeConfigException(e.getMessage(), e);
-        }
-        catch (IOException e) {
-            LOGGER.fatal("ERROR: encountered IOException processing resource( " + Constants.WEBAPPS_FILE + " )", e);
-            throw new RuntimeConfigException("ERROR: encountered IOException processing resource( " +
-                Constants.WEBAPPS_FILE + " ), message( " + e.getMessage(), e);
-        }
-        finally {
-            try {is.close();} catch (IOException ignore) {}
-        }
+        Webapps webapps = XMLHelper.getWebapps(is, Constants.WEBAPPS_FILE, config);
 
         if (LOGGER.isInfoEnabled())
             LOGGER.info("webapps( " + webapps + " )");
@@ -468,7 +476,9 @@
         }
         TestDefinitions testDefinitions = null;
         try {
-            testDefinitions = getTestDefinitionsInstance(is, Constants.TESTS_FILE, webapps,
+            testDefinitions = getTestDefinitionsInstance(is,
+                                                         Constants.TESTS_FILE,
+                                                         webapps,
                                                          config.getBaseDirectory().getAbsolutePath());
         }
         catch (ConfigException e) {
@@ -547,68 +557,112 @@
         return config;
     }
 
-    public static Webapps getWebapps(InputStream is, String resourceIdentifier, Config config)
-        throws ConfigException, IOException {
-        ServerDocument doc = null;
+    public static Webapps getWebapps(final InputStream xmlInputStream, final String xmlResourcePath, Config config) {
+
+        Document document = null;
+        final String xsdResourcePath = Constants.SCHEMA_LOCATION + "/" + Constants.WEBAPPS_SCHEMA_NAME;
+        InputStream xsdInputStream = XMLHelper.class.getClassLoader().getResourceAsStream(xsdResourcePath);
         try {
-            XmlOptions loadOptions = new XmlOptions();
-            loadOptions.setLoadLineNumbers();
-            doc = ServerDocument.Factory.parse(is, loadOptions);
-        }
-        catch (XmlException e) {
-            LOGGER.fatal("test recorder parse error", e);
-            ConfigException ce = new ConfigException("ERROR: failed parsing test recorder webapp configuration XML, file( "
-                + resourceIdentifier + " )", e);
-            LOGGER.fatal(ce);
-            throw ce;
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            dbf.setValidating(true);
+            dbf.setNamespaceAware(true);
+            dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
+            dbf.setAttribute(JAXP_SCHEMA_SOURCE, xsdInputStream);
+
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            db.setErrorHandler(new ErrorHandler() {
+                public void warning(SAXParseException exception) {
+                    if(LOGGER.isInfoEnabled())
+                        LOGGER.info("Validation warning validating config file \"" + xmlResourcePath +
+                            "\" against XML Schema \"" + xsdResourcePath);
+                }
+
+                public void error(SAXParseException exception) {
+                        throw new IllegalStateException("Validation errors occurred parsing the config file \"" +
+                            xmlResourcePath + "\".  Cause: " + exception, exception);
+                }
+
+                public void fatalError(SAXParseException exception) {
+                    throw new IllegalStateException("Validation errors occurred parsing the config file \"" +
+                        xmlResourcePath + "\".  Cause: " + exception, exception);
+                }
+            });
+
+            db.setEntityResolver(new EntityResolver() {
+                public InputSource resolveEntity(String publicId, String systemId) {
+                    if(systemId.endsWith(Constants.SERVER_SCHEMA_NAME)) {
+                        InputStream inputStream = XMLHelper.class.getClassLoader().getResourceAsStream(xsdResourcePath);
+                        return new InputSource(inputStream);
+                    }
+                    else return null;
+                }
+            });
+
+            document = db.parse(xmlInputStream);
         }
-        finally {
-            if (is != null)
-                is.close();
+        catch(Exception e) {
+            assert e instanceof ParserConfigurationException;
+            throw new IllegalStateException("Exception occurred parsing document.  Cause: " + e, e);
         }
 
-        assert doc != null;
-
-        validate(doc, resourceIdentifier,
-                 "ERROR: test recorder webapp config document is not valid against the schema");
+        Element elem = document.getDocumentElement();
+        String name = DomUtils.getChildElementText(document.getDocumentElement(), "name");
+        String hostname = DomUtils.getChildElementText(document.getDocumentElement(), "hostname");
+        String portString = DomUtils.getChildElementText(document.getDocumentElement(), "port");
+        int port = Integer.parseInt(portString);
 
-        ServerDocument.Server serverXML = doc.getServer();
-        ServerConfig server = new ServerConfig(serverXML.getName(), serverXML.getHostname(), serverXML.getPort());
+        ServerConfig server = new ServerConfig(name, hostname, port);
 
-        Config defaultConfig = config;
-        WebappType[] webappTypes = serverXML.getWebapps().getWebappArray();
         ArrayList webappList = new ArrayList();
-        for (int i = 0; i < webappTypes.length; i++) {
-            WebappType webappType = webappTypes[i];
+        Config defaultConfig = config;
+        elem = DomUtils.getChildElementByName(elem, "webapps");
+        NodeList webappElements = elem.getElementsByTagName("webapp");
+        for(int i = 0; i < webappElements.getLength(); i++) {
+            Element webappElem = (Element)webappElements.item(i);
 
             Config webappConfig = null;
-            if (webappType.getOverrideDefaultConfig() == null)
+            Element overrideDefaultConfig = DomUtils.getChildElementByName(webappElem, "overrideDefaultConfig");
+            if (overrideDefaultConfig == null)
                 webappConfig = defaultConfig;
             else {
                 String[] suffixes = null;
                 String servletURI = null;
-                if (webappType.getOverrideDefaultConfig().getSuffixList() != null) {
-                    suffixes = webappType.getOverrideDefaultConfig().getSuffixList().getSuffixArray();
-                    servletURI = webappType.getOverrideDefaultConfig().getServletURI();
+                Element suffixListElem = DomUtils.getChildElementByName(overrideDefaultConfig, "suffixListElem");
+
+                if (suffixListElem != null && suffixListElem.getElementsByTagName("suffix").getLength() > 0) {
+                    NodeList suffixList = suffixListElem.getElementsByTagName("suffix");
+                    suffixes = new String[suffixList.getLength()];
+                    for(int j = 0; j < suffixes.length; j++) {
+                        suffixes[j] = DomUtils.getElementText((Element)suffixList.item(i));
+                    }
+                    servletURI = DomUtils.getChildElementText(overrideDefaultConfig, "servletURI");
                 }
+
                 webappConfig = new Config(suffixes, servletURI, defaultConfig.getBaseDirectory().getAbsolutePath());
             }
 
-            WebappConfig webapp = new WebappConfig(webappType.getName().trim(),
-                                                   webappType.getDescription().trim(),
-                                                   server,
-                                                   webappType.getTestMode(),
-                                                   webappType.getContextRoot().trim(),
-                                                   webappType.getTestDefinitionsDirectory().trim(),
-                                                   webappConfig);
+            String testModeString = DomUtils.getChildElementText(webappElem, "testMode");
+            boolean testMode = Boolean.parseBoolean(testModeString);
+
+            WebappConfig webapp = new WebappConfig(
+                DomUtils.getChildElementText(webappElem, "name"),
+                DomUtils.getChildElementText(webappElem, "description"),
+                server,
+                testMode,
+                DomUtils.getChildElementText(webappElem, "contextRoot"),
+                DomUtils.getChildElementText(webappElem, "testDefinitionsDirectory"),
+                webappConfig);
+
             webappList.add(webapp);
         }
 
         return new Webapps(webappList);
     }
 
-    public static TestDefinitions getTestDefinitionsInstance(InputStream is, String resourceIdentifier,
-                                                             Webapps webapps, String baseDirPath)
+    public static TestDefinitions getTestDefinitionsInstance(InputStream is,
+                                                             String resourceIdentifier,
+                                                             Webapps webapps,
+                                                             String baseDirPath)
         throws ConfigException, IOException {
         TestDefinitionsDocument doc = null;
         try {

Modified: beehive/trunk/netui/src/testRecorder/schema/testRecorderTests.xsd
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/testRecorder/schema/testRecorderTests.xsd?rev=328405&r1=328404&r2=328405&view=diff
==============================================================================
--- beehive/trunk/netui/src/testRecorder/schema/testRecorderTests.xsd (original)
+++ beehive/trunk/netui/src/testRecorder/schema/testRecorderTests.xsd Tue Oct 25 09:29:09 2005
@@ -54,4 +54,10 @@
         </xs:sequence>
     </xs:complexType>
 
+    <xs:simpleType name="nonZeroLengthString">
+        <xs:restriction base="xs:string">
+            <xs:minLength value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
 </xs:schema>