diff --git a/src/ol/format/wfsformat.js b/src/ol/format/wfsformat.js index dc4fcfd183..3f20f03973 100644 --- a/src/ol/format/wfsformat.js +++ b/src/ol/format/wfsformat.js @@ -47,6 +47,13 @@ ol.format.WFS = function(opt_options) { goog.inherits(ol.format.WFS, ol.format.XMLFeature); +/** + * @const + * @type {string} + */ +ol.format.WFS.featurePrefix = 'feature'; + + /** * @typedef {{numberOfFeatures: number, * bounds: ol.Extent}} @@ -355,7 +362,11 @@ ol.format.WFS.writeDelete_ = function(node, feature, objectStack) { goog.asserts.assert(goog.isObject(context)); var featureType = goog.object.get(context, 'featureType'); var featurePrefix = goog.object.get(context, 'featurePrefix'); + featurePrefix = goog.isDef(featurePrefix) ? featurePrefix : + ol.format.WFS.featurePrefix; + var featureNS = goog.object.get(context, 'featureNS'); node.setAttribute('typeName', featurePrefix + ':' + featureType); + node.setAttribute('xmlns:' + featurePrefix, featureNS); var fid = feature.getId(); if (goog.isDef(fid)) { ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack); @@ -374,7 +385,11 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) { goog.asserts.assert(goog.isObject(context)); var featureType = goog.object.get(context, 'featureType'); var featurePrefix = goog.object.get(context, 'featurePrefix'); + featurePrefix = goog.isDef(featurePrefix) ? featurePrefix : + ol.format.WFS.featurePrefix; + var featureNS = goog.object.get(context, 'featureNS'); node.setAttribute('typeName', featurePrefix + ':' + featureType); + node.setAttribute('xmlns:' + featurePrefix, featureNS); var fid = feature.getId(); if (goog.isDef(fid)) { var keys = feature.getKeys(); @@ -385,10 +400,11 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) { values.push({name: keys[i], value: value}); } } - ol.xml.pushSerializeAndPop({node: node}, - ol.format.WFS.TRANSACTION_SERIALIZERS_, - ol.xml.makeSimpleNodeFactory('Property'), values, - objectStack); + ol.xml.pushSerializeAndPop({node: node, srsName: + goog.object.get(context, 'srsName')}, + ol.format.WFS.TRANSACTION_SERIALIZERS_, + ol.xml.makeSimpleNodeFactory('Property'), values, + objectStack); ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack); } }; diff --git a/test/spec/ol/format/wfs/TransactionUpdate.xml b/test/spec/ol/format/wfs/TransactionUpdate.xml new file mode 100644 index 0000000000..317a5dfbe4 --- /dev/null +++ b/test/spec/ol/format/wfs/TransactionUpdate.xml @@ -0,0 +1,23 @@ + + + + + the_geom + + + + -12279454.47665902 6741885.67968707 -12064207.805007964 + 6732101.740066567 -11941908.559751684 6595126.585379533 + -12240318.718177011 6507071.128795006 -12416429.631346056 + 6604910.52500003 + + + + + + + + + diff --git a/test/spec/ol/format/wfsformat.test.js b/test/spec/ol/format/wfsformat.test.js index 0e3ea8c184..87e4873da0 100644 --- a/test/spec/ol/format/wfsformat.test.js +++ b/test/spec/ol/format/wfsformat.test.js @@ -222,6 +222,37 @@ describe('ol.format.WFS', function() { }); }); + describe('when writing out a Transaction request', function() { + var text; + before(function(done) { + afterLoadText('spec/ol/format/wfs/TransactionUpdate.xml', function(xml) { + text = xml; + done(); + }); + }); + + it('creates the correct update', function() { + var format = new ol.format.WFS(); + var updateFeature = new ol.Feature(); + updateFeature.setGeometryName('the_geom'); + updateFeature.setGeometry(new ol.geom.MultiLineString([[ + [-12279454.47665902, 6741885.67968707], + [-12064207.805007964, 6732101.740066567], + [-11941908.559751684, 6595126.585379533], + [-12240318.718177011, 6507071.128795006], + [-12416429.631346056, 6604910.52500003] + ]])); + updateFeature.setId('FAULTS.4455'); + var serialized = format.writeTransaction(null, [updateFeature], null, { + featureNS: 'http://foo', + featureType: 'FAULTS', + featurePrefix: 'foo', + gmlOptions: {srsName: 'EPSG:900913'} + }); + expect(serialized).to.xmleql(ol.xml.load(text)); + }); + }); + describe('when writing out a Transaction request', function() { var text; before(function(done) {