@@ -569,16 +569,16 @@ private Map<String, Map<String, List<SimpleFeature>>> createFeatures(
569569 TypeDefinition type = instance .getDefinition ();
570570 String localPart = type .getName ().getLocalPart ();
571571 if (schemaFtMap .containsKey (localPart )) {
572- writeGeometryInstanceData (reporter , schemaFbMap , instance , localPart );
572+ List <GeometryProperty <?>> geoms = traverseInstanceForGeometries (instance );
573+ writeGeometryInstanceData (reporter , schemaFbMap , geoms , localPart );
573574 // add data for the rest of the properties.
574- writePropertiesInstanceData (schemaFbMap , instance , type , localPart );
575+ writePropertiesInstanceData (schemaFbMap , instance , type , localPart , geoms );
575576
576577 // create list of simple features.
577578 // fix in case geometries have multiple geometry types but
578579 // single geometry in data. So, always extract geometries
579580 // from instance and update to schema. Otherwise the data
580581 // will be updated to all the geometries
581- List <GeometryProperty <?>> geoms = traverseInstanceForGeometries (instance );
582582 for (GeometryProperty <?> geoProp : geoms ) {
583583 String key = geoProp .getGeometry ().getGeometryType ();
584584 SimpleFeature feature = schemaFbMap .get (localPart ).get (key )
@@ -600,15 +600,13 @@ private Map<String, Map<String, List<SimpleFeature>>> createFeatures(
600600 *
601601 * @param reporter reporter.
602602 * @param schemaFbMap map of feature builder to write the data to.
603- * @param instance instance
603+ * @param geoms from traversing the instance to find geometries
604604 * @param localPart local part of <code>QName</code> which tracks multiple
605605 * schemas.
606606 */
607607 private void writeGeometryInstanceData (IOReporter reporter ,
608- Map <String , Map <String , SimpleFeatureBuilder >> schemaFbMap , Instance instance ,
609- String localPart ) {
610- List <GeometryProperty <?>> geoms = traverseInstanceForGeometries (instance );
611-
608+ Map <String , Map <String , SimpleFeatureBuilder >> schemaFbMap ,
609+ List <GeometryProperty <?>> geoms , String localPart ) {
612610 for (GeometryProperty <?> geoProp : geoms ) {
613611 addGeometryData (reporter , schemaFbMap , localPart , geoProp );
614612 }
@@ -622,10 +620,11 @@ private void writeGeometryInstanceData(IOReporter reporter,
622620 * @param type type definition.
623621 * @param localPart local part of <code>QName</code> which tracks multiple
624622 * schemas.
623+ * @param geoms from traversing the instance to find geometries
625624 */
626625 private void writePropertiesInstanceData (
627626 Map <String , Map <String , SimpleFeatureBuilder >> schemaFbMap , Instance instance ,
628- TypeDefinition type , String localPart ) {
627+ TypeDefinition type , String localPart , List < GeometryProperty <?>> geoms ) {
629628 Collection <? extends PropertyDefinition > allNonComplexProperties = getNonComplexProperties (
630629 type );
631630 for (PropertyDefinition prop : allNonComplexProperties ) {
@@ -635,17 +634,16 @@ private void writePropertiesInstanceData(
635634 && prop .getName ().getLocalPart () != null ) {
636635 Object value = new InstanceAccessor (instance )
637636 .findChildren (prop .getName ().getLocalPart ()).value ();
638- List < GeometryProperty <?>> geoms = traverseInstanceForGeometries ( instance );
639- // add value by traversing geometryType from instance
640- for (GeometryProperty <?> geoProp : geoms ) {
641- if (geoProp .getGeometry () != null ) {
642- String geometryType = geoProp .getGeometry ().getGeometryType ();
643- if (schemaFbMap .get (localPart ) != null
644- && schemaFbMap .get (localPart ).get (geometryType ) != null ) {
645- schemaFbMap . get ( localPart ). get ( geometryType ). add ( value );
637+ if ( schemaFbMap . get ( localPart ) != null && value != null ) {
638+ // add value by traversing geometryType from instance
639+ for (GeometryProperty <?> geoProp : geoms ) {
640+ if (geoProp .getGeometry () != null ) {
641+ String geometryType = geoProp .getGeometry ().getGeometryType ();
642+ if (schemaFbMap .get (localPart ). get ( geometryType ) != null ) {
643+ schemaFbMap .get (localPart ).get (geometryType ). add ( value );
644+ }
646645 }
647646 }
648-
649647 }
650648 }
651649 }
0 commit comments