コード例 #1
0
        public void TestBuildSuccessResponseFile(SdmxSchemaEnumType version, string file)
        {
            var responseBuilder = new SubmitStructureResponseBuilder();
            ISdmxObjects sdmxObjects;
            using (IReadableDataLocation dataLocation = new FileReadableDataLocation(file))
            {
                StructureParsingManager parsingManager = new StructureParsingManager();
                var structureWorkspace = parsingManager.ParseStructures(dataLocation);
                sdmxObjects = structureWorkspace.GetStructureObjects(false);
            }

            var output = responseBuilder.BuildSuccessResponse(sdmxObjects, SdmxSchema.GetFromEnum(version));
            var fileName = "TestBuildSuccessResponse" + version + ".xml";
            output.Untyped.Save(fileName);
            using (IReadableDataLocation dataLocation = new FileReadableDataLocation(fileName))
            {
                XMLParser.ValidateXml(dataLocation, version);
            }
        }
        public void TestBuildSuccessResponse(SdmxSchemaEnumType version)
        {
            var responseBuilder = new SubmitStructureResponseBuilder();
            ISdmxObjects sdmxObjects = new SdmxObjectsImpl();
            var codelist = new CodelistMutableCore() { Id = "CL_TEST", Version = "1.0", AgencyId = "TEST" };
            codelist.AddName("en", "Test Codelist");
            for (int i = 0; i < 10; i++)
            {
                ICodeMutableObject item = new CodeMutableCore() { Id = "TEST_" + i.ToString(CultureInfo.InvariantCulture) };
                item.AddName("en", "Name for " + item.Id);
                codelist.AddItem(item);
            }

            sdmxObjects.AddCodelist(codelist.ImmutableInstance);
            var output = responseBuilder.BuildSuccessResponse(sdmxObjects, SdmxSchema.GetFromEnum(version));
            var fileName = "TestBuildSuccessResponse" + version + ".xml";
            output.Untyped.Save(fileName);
            using (IReadableDataLocation dataLocation = new FileReadableDataLocation(fileName))
            {
                XMLParser.ValidateXml(dataLocation, version);
            }
        }
コード例 #3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Message SubmitStructure(Message request)
        {

            if (!SettingsManager.EnableSubmitStructure)
                return null;

            

            var submitStructureController = new SubmitStructureController();
            var responseBuilder = new SubmitStructureResponseBuilder();
            ISdmxObjects sdmxObjects;



            XTypedElement response;
            try
            {
                // Il documento template che verrà caricato con gli artefatti da importare
                XmlDocument xDomTemp = new XmlDocument();

                // Il documento sorgente passato in input
                XmlDocument xDomSource = SubmitStructureUtil.MessageToXDom(request);

                // Creo gli elementi del file template
                xDomTemp.InnerXml = SubmitStructureConstant.xmlTemplate;

                // Valido il documento e ricavo l'action
                string actionValue = SubmitStructureUtil.ValidateDocument(xDomSource);
                SubmitStructureConstant.ActionType action = Ws.SubmitStructure.SubmitStructureConstant.ActionType.Replace;
                if (actionValue != string.Empty)
                    action = (SubmitStructureConstant.ActionType)Enum.Parse(typeof(SubmitStructureConstant.ActionType), actionValue);

                // Imposto l'Header
                SubmitStructureUtil.SetHeader(xDomTemp, xDomSource);

                // Il nodo root "Structure" del template
                XmlNode xTempStructNode = xDomTemp.SelectSingleNode("//*[local-name()='Structure']");

                // Creo il nodo "Structures" che conterrà gli artefatti
                XmlNode xSourceStructNode = xDomTemp.CreateNode(XmlNodeType.Element, "Structures", "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message");

                // Inserisco nel nodo "Structures" gli artefatti presenti nell' sdmx passato in input
                xSourceStructNode.InnerXml = xDomSource.SelectSingleNode("//*[local-name()='Structures']").InnerXml;

                // Aggiungo al template l'elemento "Structures" con gli artefatti da caricare
                xTempStructNode.AppendChild(xSourceStructNode);

                // Converto il documento in un MemoryReadableLocation
                MemoryReadableLocation mRL = new MemoryReadableLocation(SubmitStructureUtil.ConvertToBytes(xDomTemp));

                // Richiamo del metodo che esegue il SaveStructures e inserisce nel DB
                sdmxObjects = submitStructureController.Submit(mRL, action);

                // Success response
                response = responseBuilder.BuildSuccessResponse(sdmxObjects,
                SdmxSchemaEnumType.VersionTwoPointOne);
            }
            catch (SubmitStructureException e)
            {
                // Error response
                response = responseBuilder.BuildErrorResponse(e,
                e.StructureReference, SdmxSchemaEnumType.VersionTwoPointOne);
            }
            catch (Exception ex)
            {
                response = responseBuilder.BuildErrorResponse(ex,
                new StructureReferenceImpl(), SdmxSchemaEnumType.VersionTwoPointOne);
            }

            var streamController = new StreamController<XmlWriter>(
            (writer, queue) =>
            {
                queue.RunAll(); // This is required to write the soap envelope
                submitStructureController.Write(writer, response); // Write the response
            });

            return new SdmxMessageSoap(
            streamController,
            exception => _messageFaultBuilder.BuildException(exception,
            SoapOperation.SubmitStructure.ToString()),
            SoapOperation.SubmitStructure.GetQueryRootElementV21());

        }
        public void TestBuildErrorResponse(SdmxSchemaEnumType version)
        {
            var responseBuilder = new SubmitStructureResponseBuilder();
            ISdmxObjects sdmxObjects = new SdmxObjectsImpl();
            var codelist = new CodelistMutableCore() { Id = "CL_TEST", Version = "1.0", AgencyId = "TEST"};
            codelist.AddName("en", "Test Codelist");
            for (int i = 0; i < 10; i++)
            {
                ICodeMutableObject item = new CodeMutableCore() { Id = "TEST_" + i.ToString(CultureInfo.InvariantCulture) };
                item.AddName("en", "Name for " + item.Id);
                codelist.AddItem(item);
            }
            
            sdmxObjects.AddCodelist(codelist.ImmutableInstance);
            const string ErrorMessage = "Invalid syntax";
            var output = responseBuilder.BuildErrorResponse(new SdmxSyntaxException(ErrorMessage), new StructureReferenceImpl("TEST", "CL_TEST", "1.0", SdmxStructureEnumType.CodeList), SdmxSchema.GetFromEnum(version));
            var fileName = "TestBuildErrorResponse" + version + ".xml";
            output.Untyped.Save(fileName);
            using (IReadableDataLocation dataLocation = new FileReadableDataLocation(fileName))
            {
                XMLParser.ValidateXml(dataLocation, version);
            }

            Assert.IsTrue(File.ReadAllText(fileName).Contains(ErrorMessage));
        }