Actual Content Constraints with TimePeriod Constrained Cause Exception to be Thrown from FillIdsFromDissemenationDb - SDMXRI-1213
Attempting to load data or retrieve data from a dataflow that has a constraint that works on the TimePeriod dimension always results in the below exception. I'm almost 100% certain this is caused by interaction between the BuildDimensions static method in the SdmxParser static class and the use of actual constraints in the FillIdsFromDissemenationDb method of the SqlManagementRepository.
The SqlManagementRepository method iterates over Constraintables, and does some logic, after which it attempts to set the DbId of the constraint's Codelist property. In the case of a time dimension being constrained, SdmxParser's method will have created a new Dimension with a null
Codelist. This will lead to a NullReferenceException.
ERROR Estat.Sri.Ws.Rest.DataResourceErrorHandler 2019-10-23 18:29:20,443 - Controllers.Utils.ServiceException: Error during writing response ---> Estat.Nsi.DataRetriever.DataRetrieverException: Error during writing response ---> System.NullReferenceException: Object reference not set to an instance of an object. at DotStat.Db.Repository.SqlServer.SqlManagementRepository.FillIdsFromDissemenationDb(Dataflow dataflow) at DotStat.Db.Repository.SqlServer.SqlObservationRepository.InitDataflow(IDataQuery dataQuery, String dataspaceId, IManagementRepository managementRepository) at DotStat.Db.Repository.SqlServer.SqlObservationRepository.GetObservations(IDataQuery dataQuery, String dataspaceId, TargetVersion targetVersion, Nullable
1 startRow, Nullable1 endRow)+MoveNext() at DotStat.NSI.DataRetriever.DotStatDataRetrieverCore.GetDotStatV8GetData(IDataQuery dataQuery, IDataWriterEngine dataWriterEngine) in DotStat.NSI.DataRetriever\DotStatDataRetrieverCore.cs:line 247 --- End of inner exception stack trace --- at DotStat.NSI.DataRetriever.DotStatDataRetrieverCore.GetDotStatV8GetData(IDataQuery dataQuery, IDataWriterEngine dataWriterEngine) in DotStat.NSI.DataRetriever\DotStatDataRetrieverCore.cs:line 379 at Estat.Sdmxsource.Extension.Model.DataResponse
2.WriteResponse(TWriter writer)
at Estat.Sri.Ws.Controllers.Controller.DataRequestController.<>c__DisplayClass10_2.b__1(Stream writer, Queue1 queue) in src\Controllers\Controller\DataRequestController.cs:line 229 at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.BuildPrivate(IStreamController
1 controller, Stream outputStream, IResponseContentHeader responseContentHeader, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 133
--- End of inner exception stack trace ---
at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.BuildPrivate(IStreamController1 controller, Stream outputStream, IResponseContentHeader responseContentHeader, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 148 at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.Build(IStreamController
1 controller, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 109
at Estat.Sri.Ws.Rest.DataResource.ProcessRequest(String flowRef, String key, String providerRef, HttpContext ctx) in src\NSIWebServices\DataResource.cs:line 193
at Estat.Sri.Ws.Rest.DataResource.GetGenericData(String flowRef, String key, String providerRef) in src\NSIWebServices\DataResource.cs:line 107
at Estat.Sri.Ws.Rest.DataResourceErrorHandler.GetGenericData(String flowRef, String key, String providerRef) in src\NSIWebServices\DataResourceErrorHandler.cs:line 58
ERROR NSIWebServiceCore.ErrorHandlingMiddleware 2019-10-23 18:29:20,445 - Unhandled exception
Controllers.Utils.ServiceException: Error during writing response ---> Estat.Nsi.DataRetriever.DataRetrieverException: Error during writing response ---> System.NullReferenceException: Object reference not set to an instance of an object.
at DotStat.Db.Repository.SqlServer.SqlManagementRepository.FillIdsFromDissemenationDb(Dataflow dataflow)
at DotStat.Db.Repository.SqlServer.SqlObservationRepository.InitDataflow(IDataQuery dataQuery, String dataspaceId, IManagementRepository managementRepository)
at DotStat.Db.Repository.SqlServer.SqlObservationRepository.GetObservations(IDataQuery dataQuery, String dataspaceId, TargetVersion targetVersion, Nullable1 startRow, Nullable
1 endRow)+MoveNext()
at DotStat.NSI.DataRetriever.DotStatDataRetrieverCore.GetDotStatV8GetData(IDataQuery dataQuery, IDataWriterEngine dataWriterEngine) in DotStat.NSI.DataRetriever\DotStatDataRetrieverCore.cs:line 247
--- End of inner exception stack trace ---
at DotStat.NSI.DataRetriever.DotStatDataRetrieverCore.GetDotStatV8GetData(IDataQuery dataQuery, IDataWriterEngine dataWriterEngine) in DotStat.NSI.DataRetriever\DotStatDataRetrieverCore.cs:line 379
at Estat.Sdmxsource.Extension.Model.DataResponse2.WriteResponse(TWriter writer) at Estat.Sri.Ws.Controllers.Controller.DataRequestController.<>c__DisplayClass10_2.<GetAction>b__1(Stream writer, Queue
1 queue) in src\Controllers\Controller\DataRequestController.cs:line 229
at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.BuildPrivate(IStreamController1 controller, Stream outputStream, IResponseContentHeader responseContentHeader, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 133 --- End of inner exception stack trace --- at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.BuildPrivate(IStreamController
1 controller, Stream outputStream, IResponseContentHeader responseContentHeader, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 148
at Estat.Sri.Ws.Controllers.Builder.RestMessageBuilder.Build(IStreamController1 controller, IMessageFormat format) in src\Controllers\Builder\RestMessageBuilder.cs:line 109 at Estat.Sri.Ws.Rest.DataResource.ProcessRequest(String flowRef, String key, String providerRef, HttpContext ctx) in src\NSIWebServices\DataResource.cs:line 193 at Estat.Sri.Ws.Rest.DataResource.GetGenericData(String flowRef, String key, String providerRef) in src\NSIWebServices\DataResource.cs:line 107 at Estat.Sri.Ws.Rest.DataResourceErrorHandler.GetGenericData(String flowRef, String key, String providerRef) in src\NSIWebServices\DataResourceErrorHandler.cs:line 58 at Microsoft.Extensions.Internal.ObjectMethodExecutor.<>c__DisplayClass33_0.<WrapVoidMethod>b__0(Object target, Object[] parameters) at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.VoidResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Estat.Sri.Ws.CorsModule.CorsHttpModule.Invoke(HttpContext context) in src\Estat.Sri.Ws.CorsModule\CorsHttpModule.cs:line 30 at Estat.Sri.Ws.NSIWebServiceCore.LoggingMiddleware.Invoke(HttpContext context) in src\NSIWebServiceCore\LoggingMiddleware.cs:line 46 at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)