[OpenLayers-Commits] r12074 - in trunk/openlayers: lib lib/OpenLayers/Format lib/OpenLayers/Format/OWSCommon lib/OpenLayers/Format/WMSCapabilities tests tests/Format tests/Format/OWSCommon tests/Format/WFSCapabilities tests/Format/WMSCapabilities

commits-20090109 at openlayers.org commits-20090109 at openlayers.org
Wed Jun 8 10:39:14 EDT 2011


Author: bartvde
Date: 2011-06-08 07:39:12 -0700 (Wed, 08 Jun 2011)
New Revision: 12074

Added:
   trunk/openlayers/lib/OpenLayers/Format/OGCExceptionReport.js
   trunk/openlayers/lib/OpenLayers/Format/OWSCommon.js
   trunk/openlayers/tests/Format/OGCExceptionReport.html
   trunk/openlayers/tests/Format/OWSCommon/
   trunk/openlayers/tests/Format/OWSCommon/v1_0_0.html
   trunk/openlayers/tests/Format/OWSCommon/v1_1_0.html
Modified:
   trunk/openlayers/lib/OpenLayers.js
   trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1.js
   trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
   trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
   trunk/openlayers/lib/OpenLayers/Format/WFSCapabilities.js
   trunk/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1.js
   trunk/openlayers/tests/Format/WFSCapabilities/v1.html
   trunk/openlayers/tests/Format/WMSCapabilities/v1_1_1.html
   trunk/openlayers/tests/Format/WMSCapabilities/v1_3_0.html
   trunk/openlayers/tests/list-tests.html
Log:
adding a format to parsing OGC service exceptions (WMS 1.1 WMS 1.3 WFS 1.0 and OWSCommon 1.0 and 1.1) and hooking it up into the GetCapabilities parsers, r=tschaub (closes #2234)

Added: trunk/openlayers/lib/OpenLayers/Format/OGCExceptionReport.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/OGCExceptionReport.js	                        (rev 0)
+++ trunk/openlayers/lib/OpenLayers/Format/OGCExceptionReport.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -0,0 +1,110 @@
+/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Format/OWSCommon/v1_0_0.js
+ * @requires OpenLayers/Format/OWSCommon/v1_1_0.js
+ */
+
+/**
+ * Class: OpenLayers.Format.OGCExceptionReport
+ * Class to read exception reports for various OGC services and versions.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.XML>
+ */
+OpenLayers.Format.OGCExceptionReport = OpenLayers.Class(OpenLayers.Format.XML, {
+
+    /**
+     * Property: namespaces
+     * {Object} Mapping of namespace aliases to namespace URIs.
+     */
+    namespaces: {
+        ogc: "http://www.opengis.net/ogc"
+    },
+
+    /**
+     * Property: regExes
+     * Compiled regular expressions for manipulating strings.
+     */
+    regExes: {
+        trimSpace: (/^\s*|\s*$/g),
+        removeSpace: (/\s*/g),
+        splitSpace: (/\s+/),
+        trimComma: (/\s*,\s*/g)
+    },
+
+    /**
+     * Property: defaultPrefix
+     */
+    defaultPrefix: "ogc",
+
+    /**
+     * Constructor: OpenLayers.Format.OGCExceptionReport
+     * Create a new parser for OGC exception reports.
+     *
+     * Parameters:
+     * options - {Object} An optional object whose properties will be set on
+     *     this instance.
+     */
+
+    /**
+     * APIMethod: read
+     * Read OGC exception report data from a string, and return an object with
+     * information about the exceptions.
+     *
+     * Parameters:
+     * data - {String} or {DOMElement} data to read/parse.
+     *
+     * Returns:
+     * {Object} Information about the exceptions that occurred.
+     */
+    read: function(data) {
+        var result;
+        if(typeof data == "string") {
+            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
+        }
+        var root = data.documentElement;
+        var exceptionInfo = {exceptionReport: null}; 
+        if (root) {
+            this.readChildNodes(data, exceptionInfo);
+            if (exceptionInfo.exceptionReport === null) {
+                // fall-back to OWSCommon since this is a common output format for exceptions
+                // we cannot easily use the ows readers directly since they differ for 1.0 and 1.1
+                exceptionInfo = new OpenLayers.Format.OWSCommon().read(data);
+            }
+        }
+        return exceptionInfo;
+    },
+
+    /**
+     * Property: readers
+     * Contains public functions, grouped by namespace prefix, that will
+     *     be applied when a namespaced node is found matching the function
+     *     name.  The function will be applied in the scope of this parser
+     *     with two arguments: the node being read and a context object passed
+     *     from the parent.
+     */
+    readers: {
+        "ogc": {
+            "ServiceExceptionReport": function(node, obj) {
+                obj.exceptionReport = {exceptions: []};
+                this.readChildNodes(node, obj.exceptionReport);
+            },
+            "ServiceException": function(node, exceptionReport) {
+                var exception = {
+                    code: node.getAttribute("code"),
+                    locator: node.getAttribute("locator"),
+                    text: this.getChildValue(node)
+                };
+                exceptionReport.exceptions.push(exception);
+            }
+        }
+    },
+    
+    CLASS_NAME: "OpenLayers.Format.OGCExceptionReport"
+    
+});

Modified: trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -4,13 +4,9 @@
  * full text of the license. */
 
 /**
- * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Format/OWSCommon.js
  */
 
-if (!OpenLayers.Format.OWSCommon) {
-    OpenLayers.Format.OWSCommon = {};
-}
-
 /**
  * Class: OpenLayers.Format.OWSCommon.v1
  * Common readers and writers for OWSCommon v1.X formats
@@ -29,6 +25,23 @@
     },
 
     /**
+     * Method: read
+     *
+     * Parameters:
+     * data - {DOMElement} An OWSCommon document element.
+     * options - {Object} Options for the reader.
+     *
+     * Returns:
+     * {Object} An object representing the OWSCommon document.
+     */
+    read: function(data, options) {
+        options = OpenLayers.Util.applyDefaults(options, this.options);
+        var ows = {};
+        this.readChildNodes(data, ows);
+        return ows;
+    },
+
+    /**
      * Property: readers
      * Contains public functions, grouped by namespace prefix, that will
      *     be applied when a namespaced node is found matching the function
@@ -38,6 +51,19 @@
      */
     readers: {
         "ows": {
+            "Exception": function(node, exceptionReport) {
+                var exception = {
+                    code: node.getAttribute('exceptionCode'),
+                    locator: node.getAttribute('locator'),
+                    texts: []
+                };
+                exceptionReport.exceptions.push(exception);
+                this.readChildNodes(node, exception);
+            },
+            "ExceptionText": function(node, exception) {
+                var text = this.getChildValue(node);
+                exception.texts.push(text);
+            },
             "ServiceIdentification": function(node, obj) {
                 obj.serviceIdentification = {};
                 this.readChildNodes(node, obj.serviceIdentification);

Modified: trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -9,8 +9,7 @@
 
 /**
  * Class: OpenLayers.Format.OWSCommon.v1_0_0
- * Parser for OWS Common version 1.0.0 which can be used by other parsers.
- * It is not intended to be used on its own.
+ * Parser for OWS Common version 1.0.0.
  */
 OpenLayers.Format.OWSCommon.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
     
@@ -19,7 +18,7 @@
      * {Object} Mapping of namespace aliases to namespace URIs.
      */
     namespaces: {
-        ows: "http://www.opengis.net/ows/1.0",
+        ows: "http://www.opengis.net/ows",
         xlink: "http://www.w3.org/1999/xlink"
     },    
     
@@ -32,7 +31,16 @@
      *     from the parent.
      */
     readers: {
-        "ows": OpenLayers.Format.OWSCommon.v1.prototype.readers["ows"]
+        "ows": OpenLayers.Util.applyDefaults({
+            "ExceptionReport": function(node, obj) {
+                obj.exceptionReport = {
+                    version: node.getAttribute('version'),
+                    language: node.getAttribute('language'),
+                    exceptions: []
+                };
+                this.readChildNodes(node, obj.exceptionReport);
+            } 
+        }, OpenLayers.Format.OWSCommon.v1.prototype.readers.ows)
     },
 
     /**
@@ -42,9 +50,9 @@
      *     node names they produce.
      */
     writers: {
-        "ows": OpenLayers.Format.OWSCommon.v1.prototype.writers["ows"]
+        "ows": OpenLayers.Format.OWSCommon.v1.prototype.writers.ows
     },
     
-    CLASS_NAME: "OpenLayers.Format.OWSCommon.v1_1_0"
+    CLASS_NAME: "OpenLayers.Format.OWSCommon.v1_0_0"
 
 });

Modified: trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -9,8 +9,7 @@
 
 /**
  * Class: OpenLayers.Format.OWSCommon.v1_1_0
- * Parser for OWS Common version 1.1.0 which can be used by other parsers.
- * It is not intended to be used on its own.
+ * Parser for OWS Common version 1.1.0.
  */
 OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
 
@@ -33,6 +32,14 @@
      */
     readers: {
         "ows": OpenLayers.Util.applyDefaults({
+            "ExceptionReport": function(node, obj) {
+                obj.exceptionReport = {
+                    version: node.getAttribute('version'),
+                    language: node.getAttribute('xml:lang'),
+                    exceptions: []
+                };
+                this.readChildNodes(node, obj.exceptionReport);
+            },
             "AllowedValues": function(node, parameter) {
                 parameter.allowedValues = {};
                 this.readChildNodes(node, parameter.allowedValues);

Added: trunk/openlayers/lib/OpenLayers/Format/OWSCommon.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/OWSCommon.js	                        (rev 0)
+++ trunk/openlayers/lib/OpenLayers/Format/OWSCommon.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -0,0 +1,91 @@
+/* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Format/XML.js
+ */
+
+/**
+ * Class: OpenLayers.Format.OWSCommon
+ * Read OWSCommon. Create a new instance with the <OpenLayers.Format.OWSCommon>
+ *     constructor.
+ * 
+ * Inherits from:
+ *  - <OpenLayers.Format.XML>
+ */
+OpenLayers.Format.OWSCommon = OpenLayers.Class(OpenLayers.Format.XML, {
+    
+    /**
+     * APIProperty: defaultVersion
+     * {String} Version number to assume if none found.  Default is "1.0.0".
+     */
+    defaultVersion: "1.0.0",
+    
+    /**
+     * APIProperty: version
+     * {String} Specify a version string if one is known.
+     */
+    version: null,
+    
+    /**
+     * Property: parser
+     * {Object} Instance of the versioned parser.  Cached for multiple read and
+     *     write calls of the same version.
+     */
+    parser: null,
+
+    /**
+     * Constructor: OpenLayers.Format.OWSCommon
+     * Create a new parser for OWSCommon.
+     *
+     * Parameters:
+     * options - {Object} An optional object whose properties will be set on
+     *     this instance.
+     */
+
+    /**
+     * APIMethod: read
+     * Read an OWSCommon document and return an object.
+     *
+     * Parameters:
+     * data - {String | DOMElement} Data to read.
+     * options - {Object} Options for the reader.
+     *
+     * Returns:
+     * {Object} An object representing the structure of the document.
+     */
+    read: function(data, options) {
+        if(typeof data == "string") {
+            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
+        }
+        var root = data.documentElement;
+        var version = this.version;
+        if(!version) {
+            // remember version does not correspond to the OWS version
+            // it corresponds to the WMS/WFS/WCS etc. request version
+            var uri = root.getAttribute("xmlns:ows");
+            if (uri.substring(uri.lastIndexOf("/")+1) === "1.1") {
+                version ="1.1.0";
+            } 
+            if(!version) {
+                version = this.defaultVersion;
+            }
+        }
+        if(!this.parser || this.parser.VERSION != version) {
+            var format = OpenLayers.Format.OWSCommon[
+                "v" + version.replace(/\./g, "_")
+            ];
+            if(!format) {
+                throw "Can't find a OWSCommon parser for version " +
+                      version;
+            }
+            this.parser = new format(this.options);
+        }
+        var ows = this.parser.read(data, options);
+        return ows;
+    },
+
+    CLASS_NAME: "OpenLayers.Format.OWSCommon" 
+});

Modified: trunk/openlayers/lib/OpenLayers/Format/WFSCapabilities.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/WFSCapabilities.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers/Format/WFSCapabilities.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -5,6 +5,7 @@
 
 /**
  * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Format/OGCExceptionReport.js
  */
 
 /**
@@ -67,6 +68,11 @@
         }
         var parser = new constr(this.options);
         var capabilities = parser.read(data);
+        if (capabilities.service === undefined) {
+            // an error must have happened, so parse it and report back
+            var format = new OpenLayers.Format.OGCExceptionReport();
+            capabilities.error = format.read(data);
+        }
         capabilities.version = version;
         return capabilities;
     },

Modified: trunk/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -5,6 +5,7 @@
 
 /**
  * @requires OpenLayers/Format/WMSCapabilities.js
+ * @requires OpenLayers/Format/OGCExceptionReport.js
  * @requires OpenLayers/Format/XML.js
  */
 
@@ -60,15 +61,20 @@
         if(typeof data == "string") {
             data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
         }
+        var raw = data;
         if(data && data.nodeType == 9) {
             data = data.documentElement;
         }
         var capabilities = {};
         this.readNode(data, capabilities);
-    
-        // postprocess the layer list
-        this.postProcessLayers(capabilities);
-    
+        if (capabilities.service === undefined) {
+            // an exception must have occurred, so parse it
+            var parser = new OpenLayers.Format.OGCExceptionReport();
+            capabilities.error = parser.read(raw);
+        } else {
+            // postprocess the layer list
+            this.postProcessLayers(capabilities);
+        }
         return capabilities;
     },
 

Modified: trunk/openlayers/lib/OpenLayers.js
===================================================================
--- trunk/openlayers/lib/OpenLayers.js	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/lib/OpenLayers.js	2011-06-08 14:39:12 UTC (rev 12074)
@@ -296,6 +296,7 @@
                 "OpenLayers/Format/SLD.js",
                 "OpenLayers/Format/SLD/v1.js",
                 "OpenLayers/Format/SLD/v1_0_0.js",
+                "OpenLayers/Format/OWSCommon.js",
                 "OpenLayers/Format/OWSCommon/v1.js",
                 "OpenLayers/Format/OWSCommon/v1_0_0.js",
                 "OpenLayers/Format/OWSCommon/v1_1_0.js",
@@ -334,6 +335,7 @@
                 "OpenLayers/Format/XLS.js",
                 "OpenLayers/Format/XLS/v1.js",
                 "OpenLayers/Format/XLS/v1_1_0.js",
+                "OpenLayers/Format/OGCExceptionReport.js",
                 "OpenLayers/Layer/WFS.js",
                 "OpenLayers/Control/GetFeature.js",
                 "OpenLayers/Control/MouseToolbar.js",

Added: trunk/openlayers/tests/Format/OGCExceptionReport.html
===================================================================
--- trunk/openlayers/tests/Format/OGCExceptionReport.html	                        (rev 0)
+++ trunk/openlayers/tests/Format/OGCExceptionReport.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -0,0 +1,100 @@
+<html>
+<head> 
+    <script src="../OLLoader.js"></script>
+    <script type="text/javascript">
+
+    function test_read_exception(t) {
+
+        t.plan(21);
+
+        // OCG WMS 1.3.0 exceptions
+        var text = '<?xml version="1.0" encoding="UTF-8"?> ' +
+'<ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
+'    xsi:schemaLocation="http://www.opengis.net/ogc' +
+'    http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd">' +
+'    <ServiceException> Plain text message about an error. </ServiceException>' +
+'    <ServiceException code="InvalidUpdateSequence"> Another error message, this one with a service exception code supplied. </ServiceException>' +
+'    <ServiceException>' +
+'        <![CDATA[ Error in module <foo.c>, line 42' +
+'A message that includes angle brackets in text must be enclosed in a Character Data Section as in this example. All XML-like markup is ignored except for this sequence of three closing characters:' +
+']]>' +
+'    </ServiceException>' +
+'    <ServiceException>' +
+'        <![CDATA[ <Module>foo.c</Module> <Error>An error occurred</Error> <Explanation>Similarly, actual XML can be enclosed in a CDATA section. A generic parser will ignore that XML, but application-specific software may choose to process it.</Explanation> ]]>' +
+'    </ServiceException>' +
+'</ServiceExceptionReport>';
+
+        var parser = new OpenLayers.Format.OGCExceptionReport();
+        var result = parser.read(text);
+
+        var exceptions = result.exceptionReport.exceptions;
+
+        var testWMS = function(exceptions) {
+            t.eq(exceptions.length, 4, "We expect 4 exception messages");
+            t.eq(exceptions[0].text, " Plain text message about an error. ", "First error message correctly parsed");
+            t.eq(exceptions[1].code, "InvalidUpdateSequence", "Code of second error message correctly parsed");
+            t.eq(exceptions[1].text, " Another error message, this one with a service exception code supplied. ", "Text of second error message correctly parsed");
+            t.eq(OpenLayers.String.trim(exceptions[2].text), "Error in module <foo.c>, line 42A message that includes angle brackets in text must be enclosed in a Character Data Section as in this example. All XML-like markup is ignored except for this sequence of three closing characters:", "Third message correctly parsed");
+            t.eq(OpenLayers.String.trim(exceptions[3].text), "<Module>foo.c</Module> <Error>An error occurred</Error> <Explanation>Similarly, actual XML can be enclosed in a CDATA section. A generic parser will ignore that XML, but application-specific software may choose to process it.</Explanation>", "Fourth message correctly parsed");
+        };
+
+        testWMS(exceptions);
+
+        // OGC WMS 1.1.1 exceptions
+        text = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_exception_1_1_1.dtd"> ' +
+'<ServiceExceptionReport version="1.1.1">' +
+'    <ServiceException> Plain text message about an error. </ServiceException>' +
+'    <ServiceException code="InvalidUpdateSequence"> Another error message, this one with a service exception code supplied. </ServiceException>' +
+'    <ServiceException>' +
+'        <![CDATA[ Error in module <foo.c>, line 42' +
+'A message that includes angle brackets in text must be enclosed in a Character Data Section as in this example. All XML-like markup is ignored except for this sequence of three closing characters:' +
+']]>' +
+'    </ServiceException>' +
+'    <ServiceException>' +
+'        <![CDATA[ <Module>foo.c</Module> <Error>An error occurred</Error> <Explanation>Similarly, actual XML can be enclosed in a CDATA section. A generic parser will ignore that XML, but application-specific software may choose to process it.</Explanation> ]]>' +
+'    </ServiceException>' +
+'</ServiceExceptionReport>';
+        result = parser.read(text);
+        exceptions = result.exceptionReport.exceptions;
+        testWMS(exceptions);
+
+        // OGC WFS 1.0.0 exceptions
+        text = '<?xml version="1.0" ?> ' +
+'<ServiceExceptionReport version="1.2.0" xmlns="http://www.opengis.net/ogc"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
+'    xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd">' +
+'    <ServiceException code="999" locator="INSERT STMT 01"> parse error: missing closing tag for element WKB_GEOM </ServiceException>' +
+'</ServiceExceptionReport>';
+        result = parser.read(text);
+        t.eq(result.exceptionReport.exceptions[0].code, "999", "code parsed correctly");
+        t.eq(result.exceptionReport.exceptions[0].locator, "INSERT STMT 01", "locator parsed correctly");
+        t.eq(result.exceptionReport.exceptions[0].text, " parse error: missing closing tag for element WKB_GEOM ", "error text parsed correctly");
+
+        // OGC WFS 1.1.0 exceptions that use OWSCommon 1.0
+        text = '<?xml version="1.0" encoding="UTF-8"?>' +
+'<ows:ExceptionReport language="en" version="1.0.0"' +
+'    xsi:schemaLocation="http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows">' +
+'    <ows:Exception locator="foo" exceptionCode="InvalidParameterValue">' +
+'        <ows:ExceptionText>Update error: Error occured updating features</ows:ExceptionText>' +
+'        <ows:ExceptionText>Second exception line</ows:ExceptionText>' +
+'    </ows:Exception>' +
+'</ows:ExceptionReport>';
+
+        var result = parser.read(text);
+        var report = result.exceptionReport;
+        t.eq(report.version, "1.0.0", "Version parsed correctly");
+        t.eq(report.language, "en", "Language parsed correctly");
+        var exception = report.exceptions[0];
+        t.eq(exception.code, "InvalidParameterValue", "exceptionCode properly parsed");
+        t.eq(exception.locator, "foo", "locator properly parsed");
+        t.eq(exception.texts[0], "Update error: Error occured updating features", "ExceptionText correctly parsed");
+        t.eq(exception.texts[1], "Second exception line", "Second ExceptionText correctly parsed");
+    }
+
+    </script> 
+</head>
+<body>
+</body>
+</html>

Added: trunk/openlayers/tests/Format/OWSCommon/v1_0_0.html
===================================================================
--- trunk/openlayers/tests/Format/OWSCommon/v1_0_0.html	                        (rev 0)
+++ trunk/openlayers/tests/Format/OWSCommon/v1_0_0.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -0,0 +1,34 @@
+<html>
+<head> 
+    <script src="../../OLLoader.js"></script>
+    <script type="text/javascript">
+
+    function test_read_exception(t) {
+        t.plan(6);
+        var text = '<?xml version="1.0" encoding="UTF-8"?>' +
+'<ows:ExceptionReport language="en" version="1.0.0"' +
+'    xsi:schemaLocation="http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows">' +
+'    <ows:Exception locator="foo" exceptionCode="InvalidParameterValue">' +
+'        <ows:ExceptionText>Update error: Error occured updating features</ows:ExceptionText>' +
+'        <ows:ExceptionText>Second exception line</ows:ExceptionText>' +
+'    </ows:Exception>' +
+'</ows:ExceptionReport>';
+
+        var format = new OpenLayers.Format.OWSCommon();
+        var result = format.read(text);
+        var report = result.exceptionReport;
+        t.eq(report.version, "1.0.0", "Version parsed correctly");
+        t.eq(report.language, "en", "Language parsed correctly");
+        var exception = report.exceptions[0];
+        t.eq(exception.code, "InvalidParameterValue", "exceptionCode properly parsed");
+        t.eq(exception.locator, "foo", "locator properly parsed");
+        t.eq(exception.texts[0], "Update error: Error occured updating features", "ExceptionText correctly parsed");
+        t.eq(exception.texts[1], "Second exception line", "Second ExceptionText correctly parsed");
+    }
+
+    </script> 
+</head>
+<body>
+</body>
+</html>

Added: trunk/openlayers/tests/Format/OWSCommon/v1_1_0.html
===================================================================
--- trunk/openlayers/tests/Format/OWSCommon/v1_1_0.html	                        (rev 0)
+++ trunk/openlayers/tests/Format/OWSCommon/v1_1_0.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -0,0 +1,34 @@
+<html>
+<head> 
+    <script src="../../OLLoader.js"></script>
+    <script type="text/javascript">
+
+    function test_read_exception(t) {
+        t.plan(6);
+        var text = '<?xml version="1.0" encoding="UTF-8"?>' +
+'<ows:ExceptionReport xml:lang="en" version="1.0.0"' +
+'    xsi:schemaLocation="http://www.opengis.net/ows http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows/1.1">' +
+'    <ows:Exception locator="foo" exceptionCode="InvalidParameterValue">' +
+'        <ows:ExceptionText>Update error: Error occured updating features</ows:ExceptionText>' +
+'        <ows:ExceptionText>Second exception line</ows:ExceptionText>' +
+'    </ows:Exception>' +
+'</ows:ExceptionReport>';
+
+        var format = new OpenLayers.Format.OWSCommon();
+        var result = format.read(text);
+        var report = result.exceptionReport;
+        t.eq(report.version, "1.0.0", "Version parsed correctly");
+        t.eq(report.language, "en", "Language parsed correctly");
+        var exception = report.exceptions[0];
+        t.eq(exception.code, "InvalidParameterValue", "exceptionCode properly parsed");
+        t.eq(exception.locator, "foo", "locator properly parsed");
+        t.eq(exception.texts[0], "Update error: Error occured updating features", "ExceptionText correctly parsed");
+        t.eq(exception.texts[1], "Second exception line", "Second ExceptionText correctly parsed");
+    }
+
+    </script> 
+</head>
+<body>
+</body>
+</html>

Modified: trunk/openlayers/tests/Format/WFSCapabilities/v1.html
===================================================================
--- trunk/openlayers/tests/Format/WFSCapabilities/v1.html	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/tests/Format/WFSCapabilities/v1.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -2,6 +2,23 @@
 <head> 
     <script src="../../OLLoader.js"></script>
     <script type="text/javascript">
+
+    function test_read_exception(t) {
+        t.plan(1);
+        var parser = new OpenLayers.Format.WFSCapabilities();
+        var text = '<?xml version="1.0" encoding="UTF-8"?>' +
+'<ows:ExceptionReport language="en" version="1.0.0"' +
+'    xsi:schemaLocation="http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd"' +
+'    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows">' +
+'    <ows:Exception locator="foo" exceptionCode="InvalidParameterValue">' +
+'        <ows:ExceptionText>Update error: Error occured updating features</ows:ExceptionText>' +
+'        <ows:ExceptionText>Second exception line</ows:ExceptionText>' +
+'    </ows:Exception>' +
+'</ows:ExceptionReport>';
+
+        var obj = parser.read(text);
+        t.ok(!!obj.error, "Error reported correctly");
+    }
     
     function test_read(t) {
         t.plan(33);

Modified: trunk/openlayers/tests/Format/WMSCapabilities/v1_1_1.html
===================================================================
--- trunk/openlayers/tests/Format/WMSCapabilities/v1_1_1.html	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/tests/Format/WMSCapabilities/v1_1_1.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -2,6 +2,15 @@
 <head> 
     <script src="../../OLLoader.js"></script>
     <script type="text/javascript">
+
+    function test_read_exception(t) {
+        t.plan(1);
+        var xml = document.getElementById("exceptionsample").firstChild.nodeValue;
+        var doc = new OpenLayers.Format.XML().read(xml);
+        var format = new OpenLayers.Format.WMSCapabilities();
+        var obj = format.read(doc);
+        t.ok(!!obj.error, "Error reported correctly");
+    }
     
     function test_read(t) {
         
@@ -678,6 +687,12 @@
 </Capability>
 </WMT_MS_Capabilities>
 --></div>
+<div id="exceptionsample"><!--
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_exception_1_1_1.dtd">
+<ServiceExceptionReport version="1.1.1"><ServiceException> Plain text message about an error. </ServiceException>
+</ServiceExceptionReport>
+--></div>
 <!--
 GeoServer example below taken from
 http://publicus.opengeo.org/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities

Modified: trunk/openlayers/tests/Format/WMSCapabilities/v1_3_0.html
===================================================================
--- trunk/openlayers/tests/Format/WMSCapabilities/v1_3_0.html	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/tests/Format/WMSCapabilities/v1_3_0.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -3,6 +3,15 @@
     <script src="../../OLLoader.js"></script>
     <script type="text/javascript">
 
+    function test_read_exception(t) {
+        t.plan(1);
+        var xml = document.getElementById("exceptionsample").firstChild.nodeValue;
+        var doc = new OpenLayers.Format.XML().read(xml);
+        var format = new OpenLayers.Format.WMSCapabilities();
+        var obj = format.read(doc);
+        t.ok(!!obj.error, "Error reported correctly");
+    }
+
     function test_layers(t) {
 
         t.plan(22);
@@ -280,6 +289,26 @@
 </head>
 <body>
 
+<div id="exceptionsample"><!--
+<?xml version='1.0' encoding="UTF-8"?> 
+<ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.opengis.net/ogc
+    http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd">
+    <ServiceException> Plain text message about an error. </ServiceException>
+    <ServiceException code="InvalidUpdateSequence"> Another error message, this one with a service
+        exception code supplied. </ServiceException>
+    <ServiceException>
+        <![CDATA[ Error in module <foo.c>, line 42
+A message that includes angle brackets in text must be enclosed in a Character Data Section as in this example. All XML-like markup is ignored except for this sequence of three closing characters:
+]]>
+    </ServiceException>
+    <ServiceException>
+        <![CDATA[ <Module>foo.c</Module> <Error>An error occurred</Error> <Explanation>Similarly, actual XML can be enclosed in a CDATA section. A generic parser will ignore that XML, but application-specific software may choose to process it.</Explanation> ]]>
+    </ServiceException>
+</ServiceExceptionReport>
+--></div>
+
 <!--
 OGC example below taken from
 http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xml

Modified: trunk/openlayers/tests/list-tests.html
===================================================================
--- trunk/openlayers/tests/list-tests.html	2011-06-08 14:35:16 UTC (rev 12073)
+++ trunk/openlayers/tests/list-tests.html	2011-06-08 14:39:12 UTC (rev 12074)
@@ -104,6 +104,9 @@
     <li>Format/SOSGetObservation.html</li>
     <li>Format/SOSGetFeatureOfInterest.html</li>
     <li>Format/OWSContext/v0_3_1.html</li>
+    <li>Format/OWSCommon/v1_0_0.html</li>
+    <li>Format/OWSCommon/v1_1_0.html</li>
+    <li>Format/OGCExceptionReport.html</li>
     <li>Format/XLS/v1_1_0.html</li>
     <li>Format/XML.html</li>
     <li>Geometry.html</li>



More information about the Commits mailing list