This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new ddb1c86630 Fix a NullPointerException with HDF5 files having unnamed 
dimensions.
ddb1c86630 is described below

commit ddb1c86630afdc4bd38ac7d3e5c2398ed0fa1e5d
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Wed Jan 15 14:57:21 2025 +0100

    Fix a NullPointerException with HDF5 files having unnamed dimensions.
---
 .../main/org/apache/sis/storage/netcdf/MetadataReader.java | 14 ++++++++------
 .../main/org/apache/sis/storage/netcdf/base/Dimension.java |  2 +-
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
index a8cd6c636b..8d9e9bef06 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -876,7 +876,7 @@ split:  while ((start = 
CharSequences.skipLeadingWhitespaces(value, start, lengt
     }
 
     /**
-     * Adds information about all netCDF variables. This is the {@code 
<mdb:contentInfo>} element in XML.
+     * Adds information about all netCDF variables. This is the {@code 
<mdb:contentInfo>} element in <abbr>XML</abbr>.
      * This method groups variables by their domains, i.e. variables having 
the same set of axes, ignoring order,
      * are grouped together. Variables having only a subset of axes are also 
grouped together with the variables
      * having more dimension.
@@ -892,17 +892,19 @@ split:  while ((start = 
CharSequences.skipLeadingWhitespaces(value, start, lengt
          * We differ metadata writing for giving us a chance to group related 
contents.
          */
         final var features  = new LinkedHashSet<Dimension>();
-        final var coverages = new LinkedHashMap<Set<String>, List<Variable>>();
+        final var coverages = new LinkedHashMap<Set<Object>, List<Variable>>();
         for (final Variable variable : decoder.getVariables()) {
             if (VariableRole.isCoverage(variable)) {
                 final var dimensions = variable.getGridDimensions();
-                final String[] names = new String[dimensions.size()];
+                final var names = new Object[dimensions.size()];
                 for (int i=0; i<names.length; i++) {
-                    names[i] = dimensions.get(i).getName();
+                    Object name = dimensions.get(i).getName();
+                    if (name == null) name = i;
+                    names[i] = name;
                 }
                 coverages.computeIfAbsent(Set.of(names), (key) -> {
-                    for (Map.Entry<Set<String>, List<Variable>> entry : 
coverages.entrySet()) {
-                        final Set<String> previous = entry.getKey();
+                    for (Map.Entry<Set<Object>, List<Variable>> entry : 
coverages.entrySet()) {
+                        final Set<Object> previous = entry.getKey();
                         if (previous.containsAll(key) || 
key.containsAll(previous)) {
                             // Share with all keys that are subset or superset.
                             return entry.getValue();
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Dimension.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Dimension.java
index a3a2e4e85f..4c0c6807dd 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Dimension.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/Dimension.java
@@ -103,7 +103,7 @@ public abstract class Dimension extends NamedElement {
      */
     @Override
     public String toString() {
-        final StringBuilder buffer = new StringBuilder(30);
+        final var buffer = new StringBuilder(30);
         String name = getName();
         if (name != null) {
             buffer.append(name);

Reply via email to