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); } }
/// <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()); }