The Labs \ Source Viewer \ SSCLI \ System.Runtime.Remoting.MetadataServices \ Util

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. //============================================================
  16. //
  17. // File: SudsCommon.cs
  18. // Purpose: Classes common to the SudsWriter and SudsParser
  19. //
  20. // Date: November 18, 2000
  21. //
  22. //============================================================
  23. namespace System.Runtime.Remoting.MetadataServices
  24. {
  25.     using System;
  26.     using System.Collections;
  27.     using System.Text;
  28.     using System.Reflection;
  29.     using System.IO;
  30.     using System.Runtime.Serialization.Formatters;
  31.     using System.Runtime.Remoting;
  32.     using System.Runtime.Remoting.Metadata.W3cXsd2001;
  33.     using System.Globalization;
  34.    
  35.     [Serializable()]
  36.     public enum SdlType
  37.     {
  38.         Sdl = 0,
  39.         Wsdl = 1
  40.     }
  41.    
  42.     [Serializable()]
  43.     internal enum UrtType
  44.     {
  45.         None = 0,
  46.         Interop = 1,
  47.         UrtSystem = 2,
  48.         UrtUser = 3,
  49.         Xsd = 4
  50.     }
  51.    
  52.     [Serializable()]
  53.     internal enum SUDSType
  54.     {
  55.         None = 0,
  56.         ClientProxy = 1,
  57.         MarshalByRef = 2
  58.     }
  59.    
  60.    
  61.     [Serializable()]
  62.     internal enum XsdVersion
  63.     {
  64.         V1999 = 0,
  65.         V2000 = 1,
  66.         V2001 = 2
  67.     }
  68.    
  69.    
  70.     static internal class SudsConverter
  71.     {
  72.        
  73.         static internal string Xsd1999 = "http://www.w3.org/1999/XMLSchema";
  74.         static internal string Xsi1999 = "http://www.w3.org/1999/XMLSchema-instance";
  75.         static internal string Xsd2000 = "http://www.w3.org/2000/10/XMLSchema";
  76.         static internal string Xsi2000 = "http://www.w3.org/2000/10/XMLSchema-instance";
  77.         static internal string Xsd2001 = "http://www.w3.org/2001/XMLSchema";
  78.         static internal string Xsi2001 = "http://www.w3.org/2001/XMLSchema-instance";
  79.        
  80.         static internal Type typeofByte = typeof(byte);
  81.         static internal Type typeofSByte = typeof(sbyte);
  82.         static internal Type typeofBoolean = typeof(bool);
  83.         static internal Type typeofChar = typeof(char);
  84.         static internal Type typeofDouble = typeof(double);
  85.         static internal Type typeofSingle = typeof(float);
  86.         static internal Type typeofDecimal = typeof(decimal);
  87.         static internal Type typeofInt16 = typeof(Int16);
  88.         static internal Type typeofInt32 = typeof(Int32);
  89.         static internal Type typeofInt64 = typeof(Int64);
  90.         static internal Type typeofUInt16 = typeof(UInt16);
  91.         static internal Type typeofUInt32 = typeof(UInt32);
  92.         static internal Type typeofUInt64 = typeof(UInt64);
  93.         static internal Type typeofSoapTime = typeof(SoapTime);
  94.         static internal Type typeofSoapDate = typeof(SoapDate);
  95.         static internal Type typeofSoapYearMonth = typeof(SoapYearMonth);
  96.         static internal Type typeofSoapYear = typeof(SoapYear);
  97.         static internal Type typeofSoapMonthDay = typeof(SoapMonthDay);
  98.         static internal Type typeofSoapDay = typeof(SoapDay);
  99.         static internal Type typeofSoapMonth = typeof(SoapMonth);
  100.         static internal Type typeofSoapHexBinary = typeof(SoapHexBinary);
  101.         static internal Type typeofSoapBase64Binary = typeof(SoapBase64Binary);
  102.         static internal Type typeofSoapInteger = typeof(SoapInteger);
  103.         static internal Type typeofSoapPositiveInteger = typeof(SoapPositiveInteger);
  104.         static internal Type typeofSoapNonPositiveInteger = typeof(SoapNonPositiveInteger);
  105.         static internal Type typeofSoapNonNegativeInteger = typeof(SoapNonNegativeInteger);
  106.         static internal Type typeofSoapNegativeInteger = typeof(SoapNegativeInteger);
  107.         static internal Type typeofSoapAnyUri = typeof(SoapAnyUri);
  108.         static internal Type typeofSoapQName = typeof(SoapQName);
  109.         static internal Type typeofSoapNotation = typeof(SoapNotation);
  110.         static internal Type typeofSoapNormalizedString = typeof(SoapNormalizedString);
  111.         static internal Type typeofSoapToken = typeof(SoapToken);
  112.         static internal Type typeofSoapLanguage = typeof(SoapLanguage);
  113.         static internal Type typeofSoapName = typeof(SoapName);
  114.         static internal Type typeofSoapIdrefs = typeof(SoapIdrefs);
  115.         static internal Type typeofSoapEntities = typeof(SoapEntities);
  116.         static internal Type typeofSoapNmtoken = typeof(SoapNmtoken);
  117.         static internal Type typeofSoapNmtokens = typeof(SoapNmtokens);
  118.         static internal Type typeofSoapNcName = typeof(SoapNcName);
  119.         static internal Type typeofSoapId = typeof(SoapId);
  120.         static internal Type typeofSoapIdref = typeof(SoapIdref);
  121.         static internal Type typeofSoapEntity = typeof(SoapEntity);
  122.         static internal Type typeofString = typeof(string);
  123.         static internal Type typeofObject = typeof(object);
  124.         static internal Type typeofVoid = typeof(void);
  125.         static internal Type typeofDateTime = typeof(DateTime);
  126.         static internal Type typeofTimeSpan = typeof(TimeSpan);
  127.         static internal Type typeofISoapXsd = typeof(ISoapXsd);
  128.        
  129.        
  130.        
  131.         static internal string GetXsdVersion(XsdVersion xsdVersion)
  132.         {
  133.             string version = null;
  134.             if (xsdVersion == XsdVersion.V1999)
  135.                 version = Xsd1999;
  136.             else if (xsdVersion == XsdVersion.V2000)
  137.                 version = Xsd2000;
  138.             else
  139.                 version = Xsd2001;
  140.             return version;
  141.         }
  142.        
  143.         static internal string GetXsiVersion(XsdVersion xsdVersion)
  144.         {
  145.             string version = null;
  146.             if (xsdVersion == XsdVersion.V1999)
  147.                 version = Xsi1999;
  148.             else if (xsdVersion == XsdVersion.V2000)
  149.                 version = Xsi2000;
  150.             else
  151.                 version = Xsi2001;
  152.             return version;
  153.         }
  154.        
  155.         static internal string MapClrTypeToXsdType(Type clrType)
  156.         {
  157.             string typeName = null;
  158.            
  159.             if (clrType == typeofChar)
  160.                 return null;
  161.            
  162.            
  163.             if (clrType.IsPrimitive) {
  164.                 if (clrType == typeofByte)
  165.                     typeName = "xsd:unsignedByte";
  166.                 else if (clrType == typeofSByte)
  167.                     typeName = "xsd:byte";
  168.                 else if (clrType == typeofBoolean)
  169.                     typeName = "xsd:boolean";
  170.                 else if (clrType == typeofChar)
  171.                     typeName = "xsd:char";
  172.                 else if (clrType == typeofDouble)
  173.                     typeName = "xsd:double";
  174.                 else if (clrType == typeofSingle)
  175.                     typeName = "xsd:float";
  176.                 else if (clrType == typeofDecimal)
  177.                     typeName = "xsd:decimal";
  178.                 else if (clrType == typeofDateTime)
  179.                     typeName = "xsd:dateTime";
  180.                 else if (clrType == typeofInt16)
  181.                     typeName = "xsd:short";
  182.                 else if (clrType == typeofInt32)
  183.                     typeName = "xsd:int";
  184.                 else if (clrType == typeofInt64)
  185.                     typeName = "xsd:long";
  186.                 else if (clrType == typeofUInt16)
  187.                     typeName = "xsd:unsignedShort";
  188.                 else if (clrType == typeofUInt32)
  189.                     typeName = "xsd:unsignedInt";
  190.                 else if (clrType == typeofUInt64)
  191.                     typeName = "xsd:unsignedLong";
  192.                 else if (clrType == typeofTimeSpan)
  193.                     //Not an xsd type, but need a way to identify a char
  194.                     typeName = "xsd:duration";
  195.                
  196.             }
  197.             else if (typeofISoapXsd.IsAssignableFrom(clrType)) {
  198.                 if (clrType == typeofSoapTime)
  199.                     typeName = SoapTime.XsdType;
  200.                 else if (clrType == typeofSoapDate)
  201.                     typeName = SoapDate.XsdType;
  202.                 else if (clrType == typeofSoapYearMonth)
  203.                     typeName = SoapYearMonth.XsdType;
  204.                 else if (clrType == typeofSoapYear)
  205.                     typeName = SoapYear.XsdType;
  206.                 else if (clrType == typeofSoapMonthDay)
  207.                     typeName = SoapMonthDay.XsdType;
  208.                 else if (clrType == typeofSoapDay)
  209.                     typeName = SoapDay.XsdType;
  210.                 else if (clrType == typeofSoapMonth)
  211.                     typeName = SoapMonth.XsdType;
  212.                 else if (clrType == typeofSoapHexBinary)
  213.                     typeName = SoapHexBinary.XsdType;
  214.                 else if (clrType == typeofSoapBase64Binary)
  215.                     typeName = SoapBase64Binary.XsdType;
  216.                 else if (clrType == typeofSoapInteger)
  217.                     typeName = SoapInteger.XsdType;
  218.                 else if (clrType == typeofSoapPositiveInteger)
  219.                     typeName = SoapPositiveInteger.XsdType;
  220.                 else if (clrType == typeofSoapNonPositiveInteger)
  221.                     typeName = SoapNonPositiveInteger.XsdType;
  222.                 else if (clrType == typeofSoapNonNegativeInteger)
  223.                     typeName = SoapNonNegativeInteger.XsdType;
  224.                 else if (clrType == typeofSoapNegativeInteger)
  225.                     typeName = SoapNegativeInteger.XsdType;
  226.                 else if (clrType == typeofSoapAnyUri)
  227.                     typeName = SoapAnyUri.XsdType;
  228.                 else if (clrType == typeofSoapQName)
  229.                     typeName = SoapQName.XsdType;
  230.                 else if (clrType == typeofSoapNotation)
  231.                     typeName = SoapNotation.XsdType;
  232.                 else if (clrType == typeofSoapNormalizedString)
  233.                     typeName = SoapNormalizedString.XsdType;
  234.                 else if (clrType == typeofSoapToken)
  235.                     typeName = SoapToken.XsdType;
  236.                 else if (clrType == typeofSoapLanguage)
  237.                     typeName = SoapLanguage.XsdType;
  238.                 else if (clrType == typeofSoapName)
  239.                     typeName = SoapName.XsdType;
  240.                 else if (clrType == typeofSoapIdrefs)
  241.                     typeName = SoapIdrefs.XsdType;
  242.                 else if (clrType == typeofSoapEntities)
  243.                     typeName = SoapEntities.XsdType;
  244.                 else if (clrType == typeofSoapNmtoken)
  245.                     typeName = SoapNmtoken.XsdType;
  246.                 else if (clrType == typeofSoapNmtokens)
  247.                     typeName = SoapNmtokens.XsdType;
  248.                 else if (clrType == typeofSoapNcName)
  249.                     typeName = SoapNcName.XsdType;
  250.                 else if (clrType == typeofSoapId)
  251.                     typeName = SoapId.XsdType;
  252.                 else if (clrType == typeofSoapIdref)
  253.                     typeName = SoapIdref.XsdType;
  254.                 else if (clrType == typeofSoapEntity)
  255.                     typeName = SoapEntity.XsdType;
  256.                 typeName = "xsd:" + typeName;
  257.             }
  258.             else if (clrType == typeofString)
  259.                 typeName = "xsd:string";
  260.             else if (clrType == typeofDecimal)
  261.                 typeName = "xsd:decimal";
  262.             else if (clrType == typeofObject)
  263.                 typeName = "xsd:anyType";
  264.             else if (clrType == typeofVoid)
  265.                 typeName = "void";
  266.             else if (clrType == typeofDateTime)
  267.                 typeName = "xsd:dateTime";
  268.             else if (clrType == typeofTimeSpan)
  269.                 typeName = "xsd:duration";
  270.            
  271.             return typeName;
  272.         }
  273.        
  274.         static internal string MapXsdToClrTypes(string xsdType)
  275.         {
  276.             string lxsdType = xsdType.ToLower(CultureInfo.InvariantCulture);
  277.             string clrType = null;
  278.            
  279.             if (xsdType == null || xsdType.Length == 0)
  280.                 return null;
  281.            
  282.             switch (lxsdType[0]) {
  283.                 case 'a':
  284.                     if (lxsdType == "anyuri")
  285.                         clrType = "SoapAnyUri";
  286.                     else if (lxsdType == "anytype" || lxsdType == "ur-type")
  287.                         clrType = "Object";
  288.                    
  289.                     break;
  290.                 case 'b':
  291.                     if (lxsdType == "boolean")
  292.                         clrType = "Boolean";
  293.                     else if (lxsdType == "byte")
  294.                         clrType = "SByte";
  295.                     else if (lxsdType == "base64binary")
  296.                         clrType = "SoapBase64Binary";
  297.                    
  298.                     break;
  299.                 case 'c':
  300.                     if (lxsdType == "char")
  301.                         clrType = "Char";
  302.                     break;
  303.                 case 'd':
  304.                     if (lxsdType == "double")
  305.                         clrType = "Double";
  306.                     else if (lxsdType == "datetime")
  307.                         clrType = "DateTime";
  308.                     else if (lxsdType == "decimal")
  309.                         clrType = "Decimal";
  310.                     else if (lxsdType == "duration")
  311.                         clrType = "TimeSpan";
  312.                     else if (lxsdType == "date")
  313.                         clrType = "SoapDate";
  314.                    
  315.                     break;
  316.                 case 'e':
  317.                     if (lxsdType == "entities")
  318.                         clrType = "SoapEntities";
  319.                     else if (lxsdType == "entity")
  320.                         clrType = "SoapEntity";
  321.                     break;
  322.                 case 'f':
  323.                     if (lxsdType == "float")
  324.                         clrType = "Single";
  325.                     break;
  326.                 case 'g':
  327.                     if (lxsdType == "gyearmonth")
  328.                         clrType = "SoapYearMonth";
  329.                     else if (lxsdType == "gyear")
  330.                         clrType = "SoapYear";
  331.                     else if (lxsdType == "gmonthday")
  332.                         clrType = "SoapMonthDay";
  333.                     else if (lxsdType == "gday")
  334.                         clrType = "SoapDay";
  335.                     else if (lxsdType == "gmonth")
  336.                         clrType = "SoapMonth";
  337.                     break;
  338.                 case 'h':
  339.                     if (lxsdType == "hexbinary")
  340.                         clrType = "SoapHexBinary";
  341.                     break;
  342.                 case 'i':
  343.                     if (lxsdType == "int")
  344.                         clrType = "Int32";
  345.                     else if (lxsdType == "integer")
  346.                         clrType = "SoapInteger";
  347.                     else if (lxsdType == "idrefs")
  348.                         clrType = "SoapIdrefs";
  349.                     else if (lxsdType == "id")
  350.                         clrType = "SoapId";
  351.                     else if (lxsdType == "idref")
  352.                         clrType = "SoapIdref";
  353.                     break;
  354.                 case 'l':
  355.                     if (lxsdType == "long")
  356.                         clrType = "Int64";
  357.                     else if (lxsdType == "language")
  358.                         clrType = "SoapLanguage";
  359.                     break;
  360.                 case 'n':
  361.                     if (lxsdType == "number")
  362.                         clrType = "Decimal";
  363.                     else if (lxsdType == "normalizedstring")
  364.                         clrType = "SoapNormalizedString";
  365.                     else if (lxsdType == "nonpositiveinteger")
  366.                         clrType = "SoapNonPositiveInteger";
  367.                     else if (lxsdType == "negativeinteger")
  368.                         clrType = "SoapNegativeInteger";
  369.                     else if (lxsdType == "nonnegativeinteger")
  370.                         clrType = "SoapNonNegativeInteger";
  371.                     else if (lxsdType == "notation")
  372.                         clrType = "SoapNotation";
  373.                     else if (lxsdType == "nmtoken")
  374.                         clrType = "SoapNmtoken";
  375.                     else if (lxsdType == "nmtokens")
  376.                         clrType = "SoapNmtokens";
  377.                     else if (lxsdType == "name")
  378.                         clrType = "SoapName";
  379.                     else if (lxsdType == "ncname")
  380.                         clrType = "SoapNcName";
  381.                     break;
  382.                 case 'p':
  383.                     if (lxsdType == "positiveinteger")
  384.                         clrType = "SoapPositiveInteger";
  385.                     break;
  386.                 case 'q':
  387.                     if (lxsdType == "qname")
  388.                         clrType = "SoapQName";
  389.                     break;
  390.                 case 's':
  391.                     if (lxsdType == "string")
  392.                         clrType = "String";
  393.                     else if (lxsdType == "short")
  394.                         clrType = "Int16";
  395.                     break;
  396.                 case 't':
  397.                     if (lxsdType == "time")
  398.                         clrType = "SoapTime";
  399.                     else if (lxsdType == "token")
  400.                         clrType = "SoapToken";
  401.                     break;
  402.                 case 'u':
  403.                     if (lxsdType == "unsignedlong")
  404.                         clrType = "UInt64";
  405.                     else if (lxsdType == "unsignedint")
  406.                         clrType = "UInt32";
  407.                     else if (lxsdType == "unsignedshort")
  408.                         clrType = "UInt16";
  409.                     else if (lxsdType == "unsignedbyte")
  410.                         clrType = "Byte";
  411.                     break;
  412.                 default:
  413.                    
  414.                     break;
  415.             }
  416.             return clrType;
  417.         }
  418.     }
  419.    
  420.     static internal class Util
  421.     {
  422.         //internal static FileStream fout = null;
  423.         static internal StreamWriter writer = null;
  424.        
  425.         [System.Diagnostics.Conditional("_LOGGING")]
  426.         static internal void Log(string message)
  427.         {
  428.             //InternalRM.InfoSoap(message); //uncomment for traces
  429.             /*
  430.             if (fout == null)
  431.             {
  432.                 fout = new FileStream("suds.log", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
  433.                 writer = new StreamWriter(fout);
  434.                 writer.AutoFlush = true;
  435.             }
  436.             writer.WriteLine(message);
  437.             */           
  438.             //System.Runtime.Serialization.Formatters.InternalST.InfoSoap(messages);
  439.            
  440.         }
  441.        
  442.         [System.Diagnostics.Conditional("_LOGGING")]
  443.         static internal void LogInput(ref TextReader input)
  444.         {
  445.             //System.Runtime.Serialization.Formatters.InternalST.InfoSoap(messages);
  446.             if (InternalRM.SoapCheckEnabled()) {
  447.                 string strbuffer = input.ReadToEnd();
  448.                 InternalRM.InfoSoap("******************WSDL******************");
  449.                 InternalRM.InfoSoap(strbuffer);
  450.                 InternalRM.InfoSoap("******************End WSDL******************");
  451.                 input = (TextReader)new StringReader(strbuffer);
  452.             }
  453.         }
  454.        
  455.         [System.Diagnostics.Conditional("_LOGGING")]
  456.         static internal void LogString(string strbuffer)
  457.         {
  458.             InternalRM.InfoSoap("******************WSDL******************");
  459.             InternalRM.InfoSoap(strbuffer);
  460.             InternalRM.InfoSoap("******************End WSDL******************");
  461.         }
  462.     }
  463. }

Developer Fusion