diff --git a/vtl-envs/vtl-sdmxenv/src/main/java/it/bancaditalia/oss/vtl/impl/environment/SDMXEnvironment.java b/vtl-envs/vtl-sdmxenv/src/main/java/it/bancaditalia/oss/vtl/impl/environment/SDMXEnvironment.java index b587384d8..a02299965 100644 --- a/vtl-envs/vtl-sdmxenv/src/main/java/it/bancaditalia/oss/vtl/impl/environment/SDMXEnvironment.java +++ b/vtl-envs/vtl-sdmxenv/src/main/java/it/bancaditalia/oss/vtl/impl/environment/SDMXEnvironment.java @@ -95,6 +95,7 @@ import it.bancaditalia.oss.vtl.impl.types.config.VTLPropertyImpl.Flags; import it.bancaditalia.oss.vtl.impl.types.data.DateValue; import it.bancaditalia.oss.vtl.impl.types.data.DoubleValue; +import it.bancaditalia.oss.vtl.impl.types.data.NullValue; import it.bancaditalia.oss.vtl.impl.types.data.StringValue; import it.bancaditalia.oss.vtl.impl.types.data.TimePeriodValue; import it.bancaditalia.oss.vtl.impl.types.data.date.MonthPeriodHolder; @@ -330,7 +331,9 @@ public synchronized DataPoint next() } DataStructureComponent measure = structure.getMeasures().iterator().next(); - builder.add(measure, DoubleValue.of(parseDouble(obs.getMeasureValue(measure.getName())))); + builder.add(measure, obs.getMeasureValue(measure.getName()) != null + ? DoubleValue.of(parseDouble(obs.getMeasureValue(measure.getName()))) + : NullValue.instanceFrom(measure)); TemporalAccessor holder = parser.getValue().queryFrom(parser.getKey().parse(obs.getDimensionValue())); ScalarValue value; if (holder instanceof PeriodHolder) diff --git a/vtl-meta/vtl-metabase/src/main/java/it/bancaditalia/oss/vtl/impl/meta/subsets/AbstractStringCodeList.java b/vtl-meta/vtl-metabase/src/main/java/it/bancaditalia/oss/vtl/impl/meta/subsets/AbstractStringCodeList.java index 5d7729743..c08c4714d 100644 --- a/vtl-meta/vtl-metabase/src/main/java/it/bancaditalia/oss/vtl/impl/meta/subsets/AbstractStringCodeList.java +++ b/vtl-meta/vtl-metabase/src/main/java/it/bancaditalia/oss/vtl/impl/meta/subsets/AbstractStringCodeList.java @@ -22,6 +22,10 @@ import static it.bancaditalia.oss.vtl.impl.types.domain.Domains.STRINGDS; import java.io.Serializable; +import java.util.TreeSet; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import it.bancaditalia.oss.vtl.exceptions.VTLCastException; import it.bancaditalia.oss.vtl.impl.meta.subsets.AbstractStringCodeList.StringCodeItemImpl; @@ -37,6 +41,7 @@ public abstract class AbstractStringCodeList implements StringEnumeratedDomainSubset, Serializable { private static final long serialVersionUID = 1L; + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractStringCodeList.class); public class StringCodeItemImpl extends StringValue implements StringCodeItem { @@ -117,6 +122,8 @@ public StringCodeItemImpl cast(ScalarValue value) StringCodeItemImpl item = new StringCodeItemImpl((String) value.get()); if (getCodeItems().contains(item)) return item; + + LOGGER.warn("Code {} was not found on codelist {}:{}", value.get(), name, new TreeSet<>(getCodeItems())); } throw new VTLCastException(this, value);