Cuando se intenta escribir características codificadas en GML que se recogieron originalmente utilizando el plugin Geotools WFS (gt-wfs-ng), parece que la salida GML duplica incorrectamente el prefijo de la característica y produce un xml incorrecto. Por ejemplo, una versión simplificada de lo que estoy tratando de hacer se parece a esto:
Map<String, String> wfsParams = new HashMap<String, String>();
wfsParams.put(
"WFSDataStoreFactory:GET_CAPABILITIES_URL",
"https://mrdata.usgs.gov/wfs/asbestos?service=WFS&REQUEST=GetCapabilities");
wfsParams.put("WFSDataStoreFactory:WFS_STRATEGY", "mapserver");
DataStore store = DataStoreFinder.getDataStore(wfsParams);
SimpleFeatureType schema = store.getSchema("ms:asbestos");
FeatureSource<SimpleFeatureType, SimpleFeature> source = store.getFeatureSource("ms:asbestos");
Query query = new Query(schema.getTypeName());
query.setMaxFeatures(2);
FeatureCollection<SimpleFeatureType, SimpleFeature> features = source.getFeatures(query);
GML encode = new GML(Version.WFS1_1);
Name schemaName = schema.getName();
String prefix = schemaName.getLocalPart().split(":")[0];
String uri = schemaName.getNamespaceURI();
encode.setNamespace(prefix, uri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
SimpleFeatureCollection simpleCollection = DataUtilities.simple(features);
encode.encode(baos, simpleCollection);
System.out.println(baos.toString());
La salida que obtengo de ese fragmento tiene el siguiente aspecto:
<?xml version="1.0" encoding="UTF-8"?><wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink">
<gml:boundedBy>
<gml:Envelope srsDimension="2" srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:lowerCorner>-73.0 -179.0</gml:lowerCorner>
<gml:upperCorner>81.0 180.0</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<gml:featureMembers>
<ms:ms:asbestos gml:id="asbestos.850">
<gml:boundedBy>
<gml:Envelope srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="2">
<gml:lowerCorner>35.783268 -116.204155</gml:lowerCorner>
<gml:upperCorner>35.783268 -116.204155</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ms:geometry>
<gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="3">
<gml:pos>35.783268 -116.204155</gml:pos>
</gml:Point>
</ms:geometry>
<ms:rec_id>1046</ms:rec_id>
<ms:site_name>Amargosa mine</ms:site_name>
<ms:devel/>
<ms:fips_code>f06071</ms:fips_code>
<ms:huc_code>h18090203</ms:huc_code>
<ms:quad_code>q36118NEG2</ms:quad_code>
<ms:url>https://mrdata.usgs.gov/asbestos/show-asbestos.php?rec_id=1046</ms:url>
<ms:oremin/>
<ms:assocmin/>
</ms:ms:asbestos>
<ms:ms:asbestos gml:id="asbestos.851">
<gml:boundedBy>
<gml:Envelope srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="2">
<gml:lowerCorner>35.782971 -116.00875</gml:lowerCorner>
<gml:upperCorner>35.782971 -116.00875</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<ms:geometry>
<gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="3">
<gml:pos>35.782971 -116.00875</gml:pos>
</gml:Point>
</ms:geometry>
<ms:rec_id>1047</ms:rec_id>
<ms:site_name>Rogers mine</ms:site_name>
<ms:devel/>
<ms:fips_code>f06071</ms:fips_code>
<ms:huc_code>h18090202</ms:huc_code>
<ms:quad_code>q36118NEH2</ms:quad_code>
<ms:url>https://mrdata.usgs.gov/asbestos/show-asbestos.php?rec_id=1047</ms:url>
<ms:oremin/>
<ms:assocmin/>
</ms:ms:asbestos>
</gml:featureMembers>
</wfs:FeatureCollection>
Observe que en la salida xml, los miembros de las características se denominan "ms:ms:asbestos" en lugar de sólo "ms:asbestos". He intentado modificar los valores pasados a encode.setNamespace(), pero aunque puedo cambiar el valor del primer prefijo no puedo desactivarlo. Al establecer valores de "" o null sólo se obtiene un prefijo llamado null (es decir, "null:ms:asbestos").
¿Por qué geotools añade el prefijo adicional? ¿Cómo puedo evitarlo?