[GIS] OpenLayers and TinyOWS WFS won’t load – ‘InvalidParameterValue’

mapserveropenlayers-2tinyowswfs

I've got a TinyOWS on localhost that works fine (both through browser GetFeature and QGIS). But my OpenLayers code fails. I've checked here:
Display a WFS layer with OpenLayers and here : How to add a simple WFS layer from GeoServer to OpenLayers map?
and other similar questions to no avail. Can anyone help?

Here is the code:

    wfs = new OpenLayers.Layer.Vector("Editable Features", {
    strategies : [new OpenLayers.Strategy.Fixed(), saveStrategy],
    projection: new OpenLayers.Projection("EPSG:4326"),
    protocol: new OpenLayers.Protocol.WFS({
        version: "1.1.0",
        srsName: "EPSG:4326",
        url: "http://localhost/cgi-bin/tinyows",
        featurePrefix: "tows",
        featureNS :  "http://www.tinyows.org/",
        featureType: "trad",
        geometryName: "wkb_geometry",
        schema: "http://127.0.0.1/cgi-bin/tinyows?service=WFS&version=1.1.0&request=DescribeFeatureType&Typename=tows:trad"
    })
}); 

map.addLayers([gphy, wfs]);

Here is the xml according to Firebug:

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Here is the post response according to firebug:

<?xml version='1.0' encoding='UTF-8'?>
<ows:ExceptionReport
  xmlns='http://www.opengis.net/ows'
  xmlns:ows='http://www.opengis.net/ows'
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:schemaLocation='http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd'
  version='1.1.0' language='en'>
<ows:Exception exceptionCode='InvalidParameterValue' locator='request'>
<ows:ExceptionText>XML request isn't valid</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>

Here is the TinyOWS config file:

<tinyows online_resource="http://127.0.0.1/cgi-bin/tinyows"
     schema_dir="/usr/local/tinyows/schema/">
<pg host="127.0.0.1" user="postgres" password="****" dbname="****" port="5432"/>
<metadata name="TinyOWS Server"
       title="TinyOWS Server - Demo Service" />
<layer retrievable="1"
    writable="1"
    ns_prefix="tows"
    ns_uri="http://www.tinyows.org/"
    name="trad"
    title="Träd" />
</tinyows>

Best Answer

In your TinyOWS config you write online_resource="http://127.0.0.1/cgi-bin/tinyows" but in OpenLayers you use another host name - http://localhost/cgi-bin/tinyows. This mismatch causes an error.

Related Question