Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / XsdDataContractImporter.cs / 1305376 / XsdDataContractImporter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.CodeDom; using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel.Diagnostics; using System.Xml; using System.Xml.Schema; using System.Runtime.Serialization.Diagnostics; public class XsdDataContractImporter { ImportOptions options; CodeCompileUnit codeCompileUnit; DataContractSet dataContractSet; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent" + " data from being modified or leaked to other components in appdomain.")] static readonly XmlQualifiedName[] emptyTypeNameArray = new XmlQualifiedName[0]; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent" + " data from being modified or leaked to other components in appdomain.")] static readonly XmlSchemaElement[] emptyElementArray = new XmlSchemaElement[0]; XmlQualifiedName[] singleTypeNameArray; XmlSchemaElement[] singleElementArray; public XsdDataContractImporter() { } public XsdDataContractImporter(CodeCompileUnit codeCompileUnit) { this.codeCompileUnit = codeCompileUnit; } public ImportOptions Options { get { return options; } set { options = value; } } public CodeCompileUnit CodeCompileUnit { get { return GetCodeCompileUnit(); } } CodeCompileUnit GetCodeCompileUnit() { if (codeCompileUnit == null) codeCompileUnit = new CodeCompileUnit(); return codeCompileUnit; } DataContractSet DataContractSet { get { if (dataContractSet == null) { dataContractSet = Options == null ? new DataContractSet(null, null, null) : new DataContractSet(Options.DataContractSurrogate, Options.ReferencedTypes, Options.ReferencedCollectionTypes); } return dataContractSet; } } public void Import(XmlSchemaSet schemas) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); InternalImport(schemas, null, null, null); } public void Import(XmlSchemaSet schemas, ICollectiontypeNames) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeNames == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames")); InternalImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray); } public void Import(XmlSchemaSet schemas, XmlQualifiedName typeName) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); SingleTypeNameArray[0] = typeName; InternalImport(schemas, SingleTypeNameArray, emptyElementArray, emptyTypeNameArray); } public XmlQualifiedName Import(XmlSchemaSet schemas, XmlSchemaElement element) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (element == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); SingleTypeNameArray[0] = null; SingleElementArray[0] = element; InternalImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray/*filled on return*/); return SingleTypeNameArray[0]; } public bool CanImport(XmlSchemaSet schemas) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); return InternalCanImport(schemas, null, null, null); } public bool CanImport(XmlSchemaSet schemas, ICollection typeNames) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeNames == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames")); return InternalCanImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray); } public bool CanImport(XmlSchemaSet schemas, XmlQualifiedName typeName) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); return InternalCanImport(schemas, new XmlQualifiedName[]{typeName}, emptyElementArray, emptyTypeNameArray); } public bool CanImport(XmlSchemaSet schemas, XmlSchemaElement element) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (element == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); SingleTypeNameArray[0] = null; SingleElementArray[0] = element; return InternalCanImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray); } public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName) { DataContract dataContract = FindDataContract(typeName); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); return codeExporter.GetCodeTypeReference(dataContract); } public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName, XmlSchemaElement element) { if (element == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); if (typeName == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = FindDataContract(typeName); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); #pragma warning suppress 56506 // Code Exporter will never be null return codeExporter.GetElementTypeReference(dataContract, element.IsNillable); } internal DataContract FindDataContract(XmlQualifiedName typeName) { if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace); if (dataContract == null) { dataContract = DataContractSet[typeName]; if (dataContract == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace))); } return dataContract; } public ICollection GetKnownTypeReferences(XmlQualifiedName typeName) { if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace); if (dataContract == null) { dataContract = DataContractSet[typeName]; if (dataContract == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace))); } CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); return codeExporter.GetKnownTypeReferences(dataContract); } XmlQualifiedName[] SingleTypeNameArray { get { if(singleTypeNameArray == null) singleTypeNameArray = new XmlQualifiedName[1]; return singleTypeNameArray; } } XmlSchemaElement[] SingleElementArray { get { if(singleElementArray == null) singleElementArray = new XmlSchemaElement[1]; return singleElementArray; } } void InternalImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames/*filled on return*/) { if (DiagnosticUtility.ShouldTraceInformation) { TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportBegin, SR.GetString(SR.TraceCodeXsdImportBegin)); } DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet); try { SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames/*filled on return*/, DataContractSet, ImportXmlDataType); schemaImporter.Import(); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); codeExporter.Export(); } catch (Exception ex) { if (Fx.IsFatal(ex)) { throw; } dataContractSet = oldValue; TraceImportError(ex); throw; } if (DiagnosticUtility.ShouldTraceInformation) { TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportEnd, SR.GetString(SR.TraceCodeXsdImportEnd)); } } bool ImportXmlDataType { get { return this.Options == null ? false : this.Options.ImportXmlType; } } void TraceImportError(Exception exception) { if (DiagnosticUtility.ShouldTraceError) { TraceUtility.Trace(TraceEventType.Error, TraceCode.XsdImportError, SR.GetString(SR.TraceCodeXsdImportError), null, exception); } } bool InternalCanImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames) { DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet); try { SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames, DataContractSet, ImportXmlDataType); schemaImporter.Import(); return true; } catch (InvalidDataContractException) { dataContractSet = oldValue; return false; } catch (Exception ex) { if (Fx.IsFatal(ex)) { throw; } dataContractSet = oldValue; TraceImportError(ex); throw; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.CodeDom; using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel.Diagnostics; using System.Xml; using System.Xml.Schema; using System.Runtime.Serialization.Diagnostics; public class XsdDataContractImporter { ImportOptions options; CodeCompileUnit codeCompileUnit; DataContractSet dataContractSet; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent" + " data from being modified or leaked to other components in appdomain.")] static readonly XmlQualifiedName[] emptyTypeNameArray = new XmlQualifiedName[0]; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent" + " data from being modified or leaked to other components in appdomain.")] static readonly XmlSchemaElement[] emptyElementArray = new XmlSchemaElement[0]; XmlQualifiedName[] singleTypeNameArray; XmlSchemaElement[] singleElementArray; public XsdDataContractImporter() { } public XsdDataContractImporter(CodeCompileUnit codeCompileUnit) { this.codeCompileUnit = codeCompileUnit; } public ImportOptions Options { get { return options; } set { options = value; } } public CodeCompileUnit CodeCompileUnit { get { return GetCodeCompileUnit(); } } CodeCompileUnit GetCodeCompileUnit() { if (codeCompileUnit == null) codeCompileUnit = new CodeCompileUnit(); return codeCompileUnit; } DataContractSet DataContractSet { get { if (dataContractSet == null) { dataContractSet = Options == null ? new DataContractSet(null, null, null) : new DataContractSet(Options.DataContractSurrogate, Options.ReferencedTypes, Options.ReferencedCollectionTypes); } return dataContractSet; } } public void Import(XmlSchemaSet schemas) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); InternalImport(schemas, null, null, null); } public void Import(XmlSchemaSet schemas, ICollection typeNames) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeNames == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames")); InternalImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray); } public void Import(XmlSchemaSet schemas, XmlQualifiedName typeName) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); SingleTypeNameArray[0] = typeName; InternalImport(schemas, SingleTypeNameArray, emptyElementArray, emptyTypeNameArray); } public XmlQualifiedName Import(XmlSchemaSet schemas, XmlSchemaElement element) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (element == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); SingleTypeNameArray[0] = null; SingleElementArray[0] = element; InternalImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray/*filled on return*/); return SingleTypeNameArray[0]; } public bool CanImport(XmlSchemaSet schemas) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); return InternalCanImport(schemas, null, null, null); } public bool CanImport(XmlSchemaSet schemas, ICollection typeNames) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeNames == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames")); return InternalCanImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray); } public bool CanImport(XmlSchemaSet schemas, XmlQualifiedName typeName) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); return InternalCanImport(schemas, new XmlQualifiedName[]{typeName}, emptyElementArray, emptyTypeNameArray); } public bool CanImport(XmlSchemaSet schemas, XmlSchemaElement element) { if (schemas == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas")); if (element == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); SingleTypeNameArray[0] = null; SingleElementArray[0] = element; return InternalCanImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray); } public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName) { DataContract dataContract = FindDataContract(typeName); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); return codeExporter.GetCodeTypeReference(dataContract); } public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName, XmlSchemaElement element) { if (element == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element")); if (typeName == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = FindDataContract(typeName); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); #pragma warning suppress 56506 // Code Exporter will never be null return codeExporter.GetElementTypeReference(dataContract, element.IsNillable); } internal DataContract FindDataContract(XmlQualifiedName typeName) { if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace); if (dataContract == null) { dataContract = DataContractSet[typeName]; if (dataContract == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace))); } return dataContract; } public ICollection GetKnownTypeReferences(XmlQualifiedName typeName) { if (typeName == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName")); DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace); if (dataContract == null) { dataContract = DataContractSet[typeName]; if (dataContract == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace))); } CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); return codeExporter.GetKnownTypeReferences(dataContract); } XmlQualifiedName[] SingleTypeNameArray { get { if(singleTypeNameArray == null) singleTypeNameArray = new XmlQualifiedName[1]; return singleTypeNameArray; } } XmlSchemaElement[] SingleElementArray { get { if(singleElementArray == null) singleElementArray = new XmlSchemaElement[1]; return singleElementArray; } } void InternalImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames/*filled on return*/) { if (DiagnosticUtility.ShouldTraceInformation) { TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportBegin, SR.GetString(SR.TraceCodeXsdImportBegin)); } DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet); try { SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames/*filled on return*/, DataContractSet, ImportXmlDataType); schemaImporter.Import(); CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit()); codeExporter.Export(); } catch (Exception ex) { if (Fx.IsFatal(ex)) { throw; } dataContractSet = oldValue; TraceImportError(ex); throw; } if (DiagnosticUtility.ShouldTraceInformation) { TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportEnd, SR.GetString(SR.TraceCodeXsdImportEnd)); } } bool ImportXmlDataType { get { return this.Options == null ? false : this.Options.ImportXmlType; } } void TraceImportError(Exception exception) { if (DiagnosticUtility.ShouldTraceError) { TraceUtility.Trace(TraceEventType.Error, TraceCode.XsdImportError, SR.GetString(SR.TraceCodeXsdImportError), null, exception); } } bool InternalCanImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames) { DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet); try { SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames, DataContractSet, ImportXmlDataType); schemaImporter.Import(); return true; } catch (InvalidDataContractException) { dataContractSet = oldValue; return false; } catch (Exception ex) { if (Fx.IsFatal(ex)) { throw; } dataContractSet = oldValue; TraceImportError(ex); throw; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UnsafeNativeMethodsMilCoreApi.cs
- CompilationLock.cs
- ListItemParagraph.cs
- DataGridViewTextBoxCell.cs
- QilParameter.cs
- TextPattern.cs
- WebPartActionVerb.cs
- ExpressionBindingCollection.cs
- SqlDeflator.cs
- UidPropertyAttribute.cs
- ComPlusSynchronizationContext.cs
- DefinitionProperties.cs
- PathFigureCollection.cs
- InvokeHandlers.cs
- WizardPanel.cs
- SerializableAttribute.cs
- CodeVariableReferenceExpression.cs
- IntPtr.cs
- OperationResponse.cs
- LocatorPart.cs
- BamlLocalizableResourceKey.cs
- ColorTypeConverter.cs
- WindowsFormsHostPropertyMap.cs
- UnsafeNetInfoNativeMethods.cs
- WebPartDisplayModeEventArgs.cs
- XmlQueryContext.cs
- ConfigurationCollectionAttribute.cs
- COM2EnumConverter.cs
- FormatConvertedBitmap.cs
- HtmlInputSubmit.cs
- WmlPhoneCallAdapter.cs
- CodeSnippetTypeMember.cs
- SerializerDescriptor.cs
- ValueTable.cs
- TransactionsSectionGroup.cs
- UriParserTemplates.cs
- IgnoreSectionHandler.cs
- TransformFinalBlockRequest.cs
- NestPullup.cs
- EventHandlersStore.cs
- HostProtectionPermission.cs
- ServiceModelSecurityTokenRequirement.cs
- SendMailErrorEventArgs.cs
- OletxCommittableTransaction.cs
- TextSchema.cs
- ThicknessAnimation.cs
- BaseCollection.cs
- WebPartEditorOkVerb.cs
- DataColumnMappingCollection.cs
- ComponentCommands.cs
- AppDomainUnloadedException.cs
- EnumBuilder.cs
- SupportedAddressingMode.cs
- SqlCachedBuffer.cs
- ManagedIStream.cs
- StrokeRenderer.cs
- Internal.cs
- SEHException.cs
- CookieHandler.cs
- WebPartDescriptionCollection.cs
- externdll.cs
- Trace.cs
- ButtonColumn.cs
- CollectionViewGroupRoot.cs
- LocalizationComments.cs
- SafeNativeMethods.cs
- Normalization.cs
- WebException.cs
- PasswordRecovery.cs
- PageThemeParser.cs
- WebBrowserContainer.cs
- ICspAsymmetricAlgorithm.cs
- TemplateKeyConverter.cs
- ProfileManager.cs
- StrongNamePublicKeyBlob.cs
- CompilerWrapper.cs
- SpStreamWrapper.cs
- WindowsTab.cs
- ElementHost.cs
- ImageFormat.cs
- Help.cs
- OptimalTextSource.cs
- BlurEffect.cs
- StandardToolWindows.cs
- ISCIIEncoding.cs
- StylusPoint.cs
- ScriptRegistrationManager.cs
- DependencyObjectType.cs
- TriState.cs
- XPathExpr.cs
- NoPersistProperty.cs
- SQLChars.cs
- JpegBitmapEncoder.cs
- HostProtectionPermission.cs
- StateChangeEvent.cs
- FunctionNode.cs
- TextEditorContextMenu.cs
- TypeConstant.cs
- CompilerGlobalScopeAttribute.cs
- EntityCommandExecutionException.cs