private bool ForceLaxSkippedValidation(out string message) { bool result = true; message = null; if (RDLValidatingReader.m_processContent == XmlSchemaContentProcessing.Lax && m_reader.NodeType == XmlNodeType.EndElement && m_reader.SchemaInfo != null && m_reader.SchemaInfo.Validity == XmlSchemaValidity.NotKnown && ListUtils.ContainsWithOrdinalComparer(m_reader.NamespaceURI, m_validationNamespaceList)) { result = false; message = RDLValidatingReaderStrings.rdlValidationNoElementDecl(GetExpandedName(m_reader.LocalName, m_reader.NamespaceURI), m_reader.LocalName, m_reader.NamespaceURI, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat)); } return(result); }
private void ReadStructContent(object obj, StructMapping mapping) { this.m_reader.MoveToContent(); string name = this.m_reader.Name; string namespaceURI = this.m_reader.NamespaceURI; this.ReadStructAttributes(obj, mapping); if (this.m_reader.IsEmptyElement) { this.m_reader.Skip(); } else { this.m_reader.ReadStartElement(); this.m_reader.MoveToContent(); while (this.m_reader.NodeType != XmlNodeType.EndElement && this.m_reader.NodeType != 0) { string localName = this.m_reader.LocalName; string namespaceURI2 = this.m_reader.NamespaceURI; namespaceURI2 = ((namespaceURI == namespaceURI2) ? string.Empty : namespaceURI2); MemberMapping memberMapping = mapping.GetElement(localName, namespaceURI2); Type type = null; if (memberMapping != null) { type = memberMapping.Type; } else { List <MemberMapping> typeNameElements = mapping.GetTypeNameElements(); if (typeNameElements != null) { bool flag = false; for (int i = 0; i < typeNameElements.Count; i++) { memberMapping = typeNameElements[i]; XmlElementAttributes xmlElements = memberMapping.XmlAttributes.XmlElements; if (base.XmlOverrides != null) { XmlAttributes xmlAttributes = base.XmlOverrides[obj.GetType()]; if (xmlAttributes == null) { xmlAttributes = base.XmlOverrides[memberMapping.Type]; } if (xmlAttributes != null && xmlAttributes.XmlElements != null) { xmlElements = xmlAttributes.XmlElements; } } foreach (XmlElementAttribute item in xmlElements) { if (item.ElementName == localName && item.Type != null) { type = item.Type; flag = true; break; } } if (flag) { break; } } } } if (type != null) { if (memberMapping.ChildAttributes != null) { foreach (MemberMapping childAttribute in memberMapping.ChildAttributes) { this.ReadChildAttribute(obj, mapping, childAttribute); } } if (memberMapping.IsReadOnly) { if (!TypeMapper.IsPrimitiveType(type)) { object value = memberMapping.GetValue(obj); if (value != null) { this.ReadObjectContent(value, memberMapping, 0); } else { this.m_reader.Skip(); } } else { this.m_reader.Skip(); } } else { object obj2 = this.ReadObject(type, memberMapping, 0); if (obj2 != null) { memberMapping.SetValue(obj, obj2); } } } else { if (namespaceURI2 != string.Empty && this.m_validNamespaces.Contains(namespaceURI2)) { IXmlLineInfo xmlLineInfo = (IXmlLineInfo)this.m_reader; string message = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedElement(this.m_reader.Name, name, xmlLineInfo.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), xmlLineInfo.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); throw new XmlException(message); } this.m_reader.Skip(); } this.m_reader.MoveToContent(); } this.m_reader.ReadEndElement(); } }
private bool RdlAdditionElementLocationValidation(out string message) { Pair <string, string>?pair = null; string text = null; bool flag = false; message = null; if (ListUtils.ContainsWithOrdinalComparer(NamespaceURI, m_validationNamespaceList)) { switch (NodeType) { case XmlNodeType.Element: { text = GetExpandedName(LocalName, NamespaceURI); bool flag2 = IsPowerViewMicroVersionedNamespace(); if ((m_itemType == ItemType.Rdl || m_itemType == ItemType.Rsd) && flag2) { message = RDLValidatingReaderStrings.rdlValidationInvalidNamespaceElement(text, NamespaceURI, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); return(false); } if (m_rdlElementHierarchy.Count > 0) { pair = m_rdlElementHierarchy.Peek(); } if (!pair.HasValue) { Global.Tracer.Assert(LocalName == "Report", "(this.LocalName == Constants.Report)"); Global.Tracer.Assert(NamespaceURI == "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition" || NamespaceURI == "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition", "(this.NamespaceURI == Constants.RDL2010NamespaceURI) || (this.NamespaceURI == Constants.RDL2016NamespaceURI)"); } if (!IsEmptyElement) { m_rdlElementHierarchy.Push(new Pair <string, string>(text, NamespaceURI)); } if (!flag2) { break; } string[] values = m_microversioningValidationStructureElements.GetValues(text); if (values != null) { for (int i = 0; i < values.Length; i++) { if (pair.Value.First.Equals(values[i], StringComparison.Ordinal)) { flag = true; break; } } if (!flag) { message = RDLValidatingReaderStrings.rdlValidationInvalidParent(Name, NamespaceURI, pair.Value.First, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); return(false); } } else if (!pair.Value.Second.Equals(NamespaceURI, StringComparison.Ordinal)) { message = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedElement(Name, pair.Value.First, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); return(false); } break; } case XmlNodeType.EndElement: m_rdlElementHierarchy.Pop(); break; } } return(true); }
private bool RdlAdditionAttributeLocationValidation(out string message) { message = null; HashSet <string> hashSet = null; if (NodeType == XmlNodeType.Element && HasAttributes) { string expandedName = GetExpandedName(LocalName, NamespaceURI); string namespaceURI = NamespaceURI; if (string.CompareOrdinal(expandedName, GetExpandedName("Report", "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition")) == 0 && GetAttributeLocalName("MustUnderstand") != null) { hashSet = new HashSet <string>(GetAttributeLocalName("MustUnderstand").Split()); } while (MoveToNextAttribute()) { string text = NamespaceURI; if (string.IsNullOrEmpty(text)) { text = namespaceURI; } if (IsMicroVersionedAttributeNamespace(text)) { string expandedName2 = GetExpandedName(LocalName, text); if (m_itemType == ItemType.Rdl || m_itemType == ItemType.Rsd) { message = RDLValidatingReaderStrings.rdlValidationInvalidNamespaceAttribute(expandedName2, text, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } else { string[] values = m_microversioningValidationStructureAttributes.GetValues(expandedName2); if (values != null) { for (int i = 0; i < values.Length; i++) { if (values[i].Equals(expandedName, StringComparison.Ordinal)) { MoveToElement(); return(true); } } } message = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedAttribute(expandedName2, expandedName, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } } if (hashSet != null && Prefix == "xmlns" && hashSet.Contains(LocalName)) { hashSet.Remove(LocalName); if (!m_serverSupportedSchemas.Contains(Value)) { message = RDLValidatingReaderStrings.rdlValidationUnsupportedSchema(Value, LocalName, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message); throw new ReportProcessingException(m_errorContext.Messages); } } } if (hashSet != null && hashSet.Count != 0) { if (hashSet.Count == 1) { message = RDLValidatingReaderStrings.rdlValidationUndefinedSchemaNamespace(hashSet.First(), "MustUnderstand", base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message); throw new ReportProcessingException(m_errorContext.Messages); } message = RDLValidatingReaderStrings.rdlValidationMultipleUndefinedSchemaNamespaces(string.Join(", ", hashSet.ToArray()), "MustUnderstand", base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message); throw new ReportProcessingException(m_errorContext.Messages); } MoveToElement(); } return(message == null); }
public bool Validate(out string message) { message = null; if (!ListUtils.ContainsWithOrdinalComparer(this.m_reader.NamespaceURI, this.m_validationNamespaceList)) { return(true); } XmlSchemaComplexType xmlSchemaComplexType = null; bool result = true; ArrayList arrayList = new ArrayList(); switch (this.m_reader.NodeType) { case XmlNodeType.Element: if (this.m_rdlElementStack == null) { this.m_rdlElementStack = new RdlElementStack(); } xmlSchemaComplexType = (this.m_reader.SchemaInfo.SchemaType as XmlSchemaComplexType); if (xmlSchemaComplexType != null) { RDLValidatingReader.TraverseParticle(xmlSchemaComplexType.ContentTypeParticle, arrayList); } if (!this.m_reader.IsEmptyElement) { if (xmlSchemaComplexType != null && 1 < arrayList.Count && RDLValidatingReader.CompareWithInvariantCulture("ReportItemsType", xmlSchemaComplexType.Name, false) != 0 && RDLValidatingReader.CompareWithInvariantCulture("MapLayersType", xmlSchemaComplexType.Name, false) != 0) { Hashtable hashtable2 = new Hashtable(arrayList.Count); hashtable2.Add("_ParentName", this.m_reader.LocalName); hashtable2.Add("_Type", xmlSchemaComplexType); this.m_rdlElementStack.Add(hashtable2); } else { this.m_rdlElementStack.Add(null); } } else if (xmlSchemaComplexType != null) { for (int j = 0; j < arrayList.Count; j++) { XmlSchemaElement xmlSchemaElement2 = arrayList[j] as XmlSchemaElement; if (xmlSchemaElement2.MinOccurs > 0m) { result = false; message = RDLValidatingReaderStrings.rdlValidationMissingChildElement(this.m_reader.LocalName, xmlSchemaElement2.Name, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } } } if (0 < this.m_reader.Depth && this.m_rdlElementStack != null) { Hashtable hashtable3 = this.m_rdlElementStack[this.m_reader.Depth - 1]; if (hashtable3 != null) { string text = (string)hashtable3[this.m_reader.LocalName]; if (text == null) { hashtable3.Add(this.m_reader.LocalName, this.m_reader.NamespaceURI); } else if (RDLValidatingReader.CompareWithInvariantCulture(text, this.m_reader.NamespaceURI, false) == 0) { result = false; message = RDLValidatingReaderStrings.rdlValidationInvalidElement(hashtable3["_ParentName"] as string, this.m_reader.LocalName, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } else { string key = this.m_reader.LocalName + "$" + this.m_reader.NamespaceURI; if (hashtable3.ContainsKey(key)) { result = false; message = RDLValidatingReaderStrings.rdlValidationInvalidElement(hashtable3["_ParentName"] as string, this.m_reader.LocalName, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } else { hashtable3.Add(key, this.m_reader.LocalName); } } } } break; case XmlNodeType.EndElement: if (this.m_rdlElementStack != null) { Hashtable hashtable = this.m_rdlElementStack[this.m_rdlElementStack.Count - 1]; if (hashtable != null) { xmlSchemaComplexType = (hashtable["_Type"] as XmlSchemaComplexType); RDLValidatingReader.TraverseParticle(xmlSchemaComplexType.ContentTypeParticle, arrayList); for (int i = 0; i < arrayList.Count; i++) { XmlSchemaElement xmlSchemaElement = arrayList[i] as XmlSchemaElement; if (xmlSchemaElement.MinOccurs > 0m && !hashtable.ContainsKey(xmlSchemaElement.Name)) { result = false; message = RDLValidatingReaderStrings.rdlValidationMissingChildElement(this.m_reader.LocalName, xmlSchemaElement.Name, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat)); } } this.m_rdlElementStack[this.m_rdlElementStack.Count - 1] = null; } this.m_rdlElementStack.RemoveAt(this.m_rdlElementStack.Count - 1); } break; } return(result); }