tds/src/main/java/thredds/server/wfs/WFSGetFeatureWriter.java
public void writeMembers() {
		int index = 1;
		GMLFeatureWriter writer = new GMLFeatureWriter();
		for(SimpleGeometry geometryItem: geometries) {
			
			// Find bounding box information
			double[] lowerCorner = geometryItem.getBBLower();
			double[] upperCorner = geometryItem.getBBUpper();
			
			fileOutput
				   += "<wfs:member>"
					
					// Write Geometry Information
					+ "<" + WFSController.TDSNAMESPACE + ":" + ftName + " gml:id=\"" + ftName + "." + index + "\">"
					
					// GML Bounding Box
					+ "<gml:boundedBy>"
					+ "<gml:Envelope srsName=" + "\"urn:ogc:def:crs:EPSG::4326\"" + ">"
							+ "<gml:lowerCorner>" +  lowerCorner[0] + " " + lowerCorner[1] + "</gml:lowerCorner>"
							+ "<gml:upperCorner>" +  upperCorner[0] + " " + upperCorner[1] + "</gml:upperCorner>"
					+ "</gml:Envelope>"
					+ "</gml:boundedBy>"
					
					+ "<" + WFSController.TDSNAMESPACE + ":geometryInformation>";

			//write GML features
			fileOutput += writer.writeFeature(geometryItem);
					
			// Cap off headers
			fileOutput
					+="</" + WFSController.TDSNAMESPACE + ":geometryInformation>"
					+ "</" + WFSController.TDSNAMESPACE + ":" + ftName +">"
					+ "</wfs:member>";
			
			index++;
		}
	}
public void writeMembers() {
		int index = 1;
		GMLFeatureWriter writer = new GMLFeatureWriter();
		for(SimpleGeometry geometryItem: geometries) {
			
			// Find bounding box information
			double[] lowerCorner = geometryItem.getBBLower();
			double[] upperCorner = geometryItem.getBBUpper();
			
			fileOutput
				   += "<wfs:member>"
					
					// Write Geometry Information
					+ "<" + WFSController.TDSNAMESPACE + ":" + ftName + " gml:id=\"" + ftName + "." + index + "\">"
					
					// GML Bounding Box
					+ "<gml:boundedBy>"
					+ "<gml:Envelope srsName=" + "\"urn:ogc:def:crs:EPSG::4326\"" + ">"
							+ "<gml:lowerCorner>" +  lowerCorner[0] + " " + lowerCorner[1] + "</gml:lowerCorner>"
							+ "<gml:upperCorner>" +  upperCorner[0] + " " + upperCorner[1] + "</gml:upperCorner>"
					+ "</gml:Envelope>"
					+ "</gml:boundedBy>"
					
					+ "<" + WFSController.TDSNAMESPACE + ":geometryInformation>";

			//write GML features
			fileOutput += writer.writeFeature(geometryItem);
					
			// Cap off headers
			fileOutput
					+="</" + WFSController.TDSNAMESPACE + ":geometryInformation>"
					+ "</" + WFSController.TDSNAMESPACE + ":" + ftName +">"
					+ "</wfs:member>";
			
			index++;
		}
	}
public void writeMembers ( ) { int index = 1 ; GMLFeatureWriter writer = new GMLFeatureWriter ( ) ; for ( SimpleGeometry geometryItem : geometries ) { // Find bounding box information
 double [ ] lowerCorner = geometryItem . getBBLower ( ) ; double [ ] upperCorner = geometryItem . getBBUpper ( ) ; fileOutput += "<wfs:member>" // Write Geometry Information
 + "<" + WFSController . TDSNAMESPACE + ":" + ftName + " gml:id=\"" + ftName + "." + index + "\">" // GML Bounding Box
 + "<gml:boundedBy>" + "<gml:Envelope srsName=" + "\"urn:ogc:def:crs:EPSG::4326\"" + ">" + "<gml:lowerCorner>" + lowerCorner [ 0 ] + " " + lowerCorner [ 1 ] + "</gml:lowerCorner>" + "<gml:upperCorner>" + upperCorner [ 0 ] + " " + upperCorner [ 1 ] + "</gml:upperCorner>" + "</gml:Envelope>" + "</gml:boundedBy>" + "<" + WFSController . TDSNAMESPACE + ":geometryInformation>" ; //write GML features
 fileOutput += writer . writeFeature ( geometryItem ) ; // Cap off headers
 fileOutput += "</" + WFSController . TDSNAMESPACE + ":geometryInformation>" + "</" + WFSController . TDSNAMESPACE + ":" + ftName + ">" + "</wfs:member>" ; index ++ ; } }
In the WFS specification for GetFeature each feature type is its own
member and so writeMembers add each member to the fileOutput
In the WFS specification for GetFeature each feature type is its own member and so writeMembers add each member to the fileOutput