Hi Maxx, a very thourough bug report!
plz create an issue for it. It would even be better if you had a public wfs while this issue is not fixed... Looking into http://www.w3.org/TR/1999/REC-xml-names-19990114/#dt-NSDecl to me it looks like you should use the namespace prefix in the xmlns attributes, not the uri's. So that would make QGIS generate not 100% valid xml? But I'm not a xml gury myself. https://github.com/qgis/QGIS/blob/master/src/providers/wfs/qgswfsprovider.cpp#L53 is the place where you see the declaration of the namespace part of the elements when building the xml: https://github.com/qgis/QGIS/blob/master/src/providers/wfs/qgswfsprovider.cpp#L496 2 options: - xml guru confirms that it is not ok to write a uri in a xmlns attribute - if you are able to compile yourself, you could try to change #53 to change to 'wfs' instead of the uri, and check if all requests are still valid... Hope this helps, others please chime in Regards, Richard On 28-11-15 08:52, emmexx wrote: > I posted the following on the geoserver mailing list but nobody replied. > > I have a problem when I try to update a multilinestring geometry. > I had the same issue in the past, I thought I had solved it but now it > is back again. :-( > > Setup: geoserver 2.7.1 and a test layer connected to a postgis table. > Qgis 2.10. > > I connect to the layer in qgis. > I can create a new feature (line), I can update feature attributes but I > can't update the geometry of any feature. If I add or move a node I get > an error: > > Transaction failed > org.geoserver.wfs.WFSTransactionException: Update error: > java.lang.String cannot be cast to com.vividsolutions.jts.geom.Geometry > > I enabled geoserver debug log and the xml transaction sent from qgis is > the following: > > <Transaction xmlns="http://www.opengis.net/wfs" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" > xmlns:ws1="http://****.***" > service="WFS" xmlns:wfs="http://www.opengis.net/wfs" > xmlns:ogc="http://www.opengis.net/ogc" > xsi:schemaLocation="http://****.*** > http://*****.***:8080/geoserver/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=ws1:test&SRSNAME=EPSG:4326&username=user1&password=***" > xmlns:gml="http://www.opengis.net/gml"> > <Update xmlns="http://www.opengis.net/wfs" typeName="ws1:test"> > <Property xmlns="http://www.opengis.net/wfs"> > <Name xmlns="http://www.opengis.net/wfs">geom</Name> > <Value xmlns="http://www.opengis.net/wfs"> > <gml:MultiLineString srsName="EPSG:4326"> > <gml:lineStringMember> > <gml:LineString> > <gml:coordinates cs="," ts=" > ">8.00003043999999974,44.23241551000000271 > 8.00578959672930246,44.17149441442651892 > 8.06909135999999982,44.16719473999999934</gml:coordinates> > </gml:LineString> > </gml:lineStringMember> > </gml:MultiLineString> > </Value> > </Property> > <Filter xmlns="http://www.opengis.net/ogc"> > <FeatureId xmlns="http://www.opengis.net/ogc" > fid="test.4"/> > </Filter> > </Update> > </Transaction> > > I tried to execute it in the demo requests and got the same error. > > So I compared the example xml request created by the demo with the one > created by qgis and the only relevant difference is in the xmlns used in > any tags or declared in the transaction tag. > > So I started from a working xml request (based on the one generated by > the demo) and modified the tags from the outer tag to transform it to an > xml similar to the qgis-generated one. First I modified the transaction > tag followed by the Update tag and so on. > The transactions were successful up to when I used the following xml: > > <Transaction xmlns="http://www.opengis.net/wfs" service="WFS" > version="1.0.0" > xmlns:ws1="http://*****.***" > xmlns:ogc="http://www.opengis.net/ogc" > xmlns:wfs="http://www.opengis.net/wfs" > xmlns:gml="http://www.opengis.net/gml" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://*****.*** > http://******.***:8080/geoserver/wfs?SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=ws1:test&SRSNAME=EPSG:4326&username=user1&password=******"> > > <Update xmlns="http://www.opengis.net/wfs" typeName="ws1:test"> > <Property xmlns="http://www.opengis.net/wfs"> > <Name xmlns="http://www.opengis.net/wfs">geom</Name> > <Value xmlns="http://www.opengis.net/wfs"> > <gml:MultiLineString > srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"> > <gml:lineStringMember> > <gml:LineString> > > <gml:coordinates>8.00003043999999974,44.23241551000000271 > 8.00578959672930246,44.17149441442651892 > 8.06909135999999982,44.16719473999999934</gml:coordinates> > </gml:LineString> > </gml:lineStringMember> > </gml:MultiLineString> > </Value> > </Property> > <ogc:Filter> > <ogc:FeatureId fid="test.4"/> > </ogc:Filter> > </Update> > </Transaction> > > The problem seems to be in the Value tag. > If the xml has <wfs:Value>...</wfs:Value> it works. > If I change it to <Value xmlns="http://www.opengis.net/wfs">...</Value> > I get the aforementioned error. > > Any clue on what's wrong here? > > I suppose the problem is in the way geoserver parses the xml transaction > but I wonder if there could be an error in the way qgis generates the > xml request. I'm not an expert in wfs-t and xml but my opinion is that > both xml are syntactically correct. But the one created by qgis is not > working. > > thank you > maxx > > _______________________________________________ > Qgis-user mailing list > [email protected] > List info: http://lists.osgeo.org/mailman/listinfo/qgis-user > Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-user _______________________________________________ Qgis-user mailing list [email protected] List info: http://lists.osgeo.org/mailman/listinfo/qgis-user Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-user
