(file) Return to XmlReader.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/XmlReader.cpp between version 1.65 and 1.81.4.1

version 1.65, 2002/08/14 22:32:23 version 1.81.4.1, 2003/03/11 19:56:55
Line 45 
Line 45 
 #include "CIMInstance.h" #include "CIMInstance.h"
 #include "CIMObject.h" #include "CIMObject.h"
 #include "CIMParamValue.h" #include "CIMParamValue.h"
   #include "System.h"
   
   #define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000))
   #define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF)
  
 PEGASUS_USING_STD; PEGASUS_USING_STD;
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
Line 314 
Line 318 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getCimNameAttribute(  CIMName XmlReader::getCimNameAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName,     const char* elementName,
Line 330 
Line 334 
     }     }
  
     if (acceptNull && name.size() == 0)     if (acceptNull && name.size() == 0)
         return name;          return CIMName ();
  
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
   #ifdef PEGASUS_SNIA_INTEROP_TEST
       // This is not a Pegasus BUG.  It is a hack to protect against an error
       // from some servers.  In particular, the SNIA IBM server seems to be
       // sending a namespace component with "" as the string.  We cannot handle
       // this. This is probably because they are using the form /root/...
       // In testing, replace illegal CIMName with this value to avoid the
       // exception and let xml parsing continue.  THIS IS TEMP.
       name = "BADNAMESUBSTITUTEDBYPEGASUSCLIENT";
   #else
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "Illegal value for %s.NAME attribute", elementName);         sprintf(buffer, "Illegal value for %s.NAME attribute", elementName);
         throw XmlSemanticError(lineNumber, buffer);         throw XmlSemanticError(lineNumber, buffer);
   #endif
     }     }
       return CIMName (name);
     return name;  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 393 
Line 406 
     if (!entry.getAttributeValue("CLASSORIGIN", name))     if (!entry.getAttributeValue("CLASSORIGIN", name))
         return CIMName();         return CIMName();
  
       // KS 200209 This may be temp but we are adding test for form
       // CLASSNAME = "" for Wbemservices interoperability.  Returns same
       // as if attribute did not exist.
       if (name.size() == 0)
           return CIMName();
   
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
Line 424 
Line 443 
  
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
   #ifdef PEGASUS_SNIA_INTEROP_TEST
       name = "PEGASUS_SUBSTITUED_THIS_FOR_BAD_NAME";
       return name;
   #endif
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer,         sprintf(buffer,
             "Illegal value for %s.REFERENCECLASS attribute", elementName);             "Illegal value for %s.REFERENCECLASS attribute", elementName);
Line 480 
Line 503 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 CIMType XmlReader::getCimTypeAttribute(  Boolean XmlReader::getCimTypeAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
       CIMType& cimType,  // Output parameter
     const char* tagName,     const char* tagName,
     const char* attributeName,     const char* attributeName,
     Boolean required)     Boolean required)
Line 499 
Line 523 
         }         }
         else         else
         {         {
             return CIMTYPE_NONE;              return false;
         }         }
     }     }
  
     CIMType type = CIMTYPE_NONE;      CIMType type = CIMTYPE_BOOLEAN;
       Boolean unrecognizedType = false;
  
     if (strcmp(typeName, "boolean") == 0)     if (strcmp(typeName, "boolean") == 0)
         type = CIMTYPE_BOOLEAN;         type = CIMTYPE_BOOLEAN;
Line 535 
Line 560 
         type = CIMTYPE_REAL64;         type = CIMTYPE_REAL64;
     else if (strcmp(typeName, "reference") == 0)     else if (strcmp(typeName, "reference") == 0)
         type = CIMTYPE_REFERENCE;         type = CIMTYPE_REFERENCE;
       else unrecognizedType = true;
  
     if ((type == CIMTYPE_NONE) ||      if (unrecognizedType ||
         ((type == CIMTYPE_REFERENCE) &&         ((type == CIMTYPE_REFERENCE) &&
          (strcmp(attributeName, "PARAMTYPE") != 0)))          (strcmp(attributeName, "PARAMTYPE") != 0)))
     {     {
Line 546 
Line 572 
         throw XmlSemanticError(lineNumber, message);         throw XmlSemanticError(lineNumber, message);
     }     }
  
     return type;      cimType = type;
       return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 583 
Line 610 
         return false;         return false;
  
     char buffer[62];     char buffer[62];
     sprintf(buffer, "Bad %s.%s attribute value", attributeName, tagName);      sprintf(buffer, "Invalid %s.%s attribute value", attributeName, tagName);
     throw XmlSemanticError(lineNumber, buffer);     throw XmlSemanticError(lineNumber, buffer);
     return false;     return false;
 } }
Line 686 
Line 713 
     return n;     return n;
 } }
  
   // See http://www.ietf.org/rfc/rfc2396.txt section 2
   String XmlReader::decodeURICharacters(String uriString)
   {
       String decodedString;
       Uint32 i;
   
       for (i=0; i<uriString.size(); i++)
       {
           if (uriString[i] == '%')
           {
               if (i+2 >= uriString.size())
               {
                   throw ParseError("Invalid URI encoding");
               }
   
               Uint8 digit1 = _hexCharToNumeric(char(uriString[++i]));
               Uint8 digit2 = _hexCharToNumeric(char(uriString[++i]));
               if ( (digit1 > 15) || (digit2 > 15) )
               {
                   throw ParseError("Invalid URI encoding");
               }
   
               // ATTN: Handle non-UTF-8 character sets
               Uint16 decodedChar = Uint16(digit1<<4) + Uint16(digit2);
               decodedString.append(Char16(decodedChar));
           }
           else
           {
               decodedString.append(uriString[i]);
           }
       }
   
       return decodedString;
   }
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // stringToSignedInteger // stringToSignedInteger
Line 733 
Line 795 
             while (isxdigit(*p))             while (isxdigit(*p))
             {             {
                 // Make sure we won't overflow when we multiply by 16                 // Make sure we won't overflow when we multiply by 16
                 if (x < PEGASUS_LLONG_MIN/16)                  if (x < PEGASUS_SINT64_MIN/16)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 741 
Line 803 
  
                 // Make sure we don't overflow when we add the next digit                 // Make sure we don't overflow when we add the next digit
                 Sint64 newDigit = Sint64(_hexCharToNumeric(*p++));                 Sint64 newDigit = Sint64(_hexCharToNumeric(*p++));
                 if (PEGASUS_LLONG_MIN - x > -newDigit)                  if (PEGASUS_SINT64_MIN - x > -newDigit)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 756 
Line 818 
             // overflow error             // overflow error
             if (!negative)             if (!negative)
             {             {
                 if (x == PEGASUS_LLONG_MIN)                  if (x == PEGASUS_SINT64_MIN)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 784 
Line 846 
     while (isdigit(*p))     while (isdigit(*p))
     {     {
         // Make sure we won't overflow when we multiply by 10         // Make sure we won't overflow when we multiply by 10
         if (x < PEGASUS_LLONG_MIN/10)          if (x < PEGASUS_SINT64_MIN/10)
         {         {
             return false;             return false;
         }         }
Line 792 
Line 854 
  
         // Make sure we won't overflow when we add the next digit         // Make sure we won't overflow when we add the next digit
         Sint64 newDigit = (*p++ - '0');         Sint64 newDigit = (*p++ - '0');
         if (PEGASUS_LLONG_MIN - x > -newDigit)          if (PEGASUS_SINT64_MIN - x > -newDigit)
         {         {
             return false;             return false;
         }         }
Line 807 
Line 869 
     // overflow error     // overflow error
     if (!negative)     if (!negative)
     {     {
         if (x == PEGASUS_LLONG_MIN)          if (x == PEGASUS_SINT64_MIN)
         {         {
             return false;             return false;
         }         }
Line 853 
Line 915 
             while (isxdigit(*p))             while (isxdigit(*p))
             {             {
                 // Make sure we won't overflow when we multiply by 16                 // Make sure we won't overflow when we multiply by 16
                 if (x > PEGASUS_ULLONG_MAX/16)                  if (x > PEGASUS_UINT64_MAX/16)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 861 
Line 923 
  
                 // We can't overflow when we add the next digit                 // We can't overflow when we add the next digit
                 Uint64 newDigit = Uint64(_hexCharToNumeric(*p++));                 Uint64 newDigit = Uint64(_hexCharToNumeric(*p++));
                 if (PEGASUS_ULLONG_MAX - x < newDigit)                  if (PEGASUS_UINT64_MAX - x < newDigit)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 887 
Line 949 
     while (isdigit(*p))     while (isdigit(*p))
     {     {
         // Make sure we won't overflow when we multiply by 10         // Make sure we won't overflow when we multiply by 10
         if (x > PEGASUS_ULLONG_MAX/10)          if (x > PEGASUS_UINT64_MAX/10)
         {         {
             return false;             return false;
         }         }
Line 895 
Line 957 
  
         // Make sure we won't overflow when we add the next digit         // Make sure we won't overflow when we add the next digit
         Uint64 newDigit = (*p++ - '0');         Uint64 newDigit = (*p++ - '0');
         if (PEGASUS_ULLONG_MAX - x < newDigit)          if (PEGASUS_UINT64_MAX - x < newDigit)
         {         {
             return false;             return false;
         }         }
Line 932 
Line 994 
     {     {
         case CIMTYPE_BOOLEAN:         case CIMTYPE_BOOLEAN:
         {         {
             if (CompareNoCase(valueString, "TRUE") == 0)              if (System::strcasecmp(valueString, "TRUE") == 0)
                 return CIMValue(true);                 return CIMValue(true);
             else if (CompareNoCase(valueString, "FALSE") == 0)              else if (System::strcasecmp(valueString, "FALSE") == 0)
                 return CIMValue(false);                 return CIMValue(false);
             else             else
                 throw XmlSemanticError(                 throw XmlSemanticError(
                     lineNumber, "Bad boolean value");                      lineNumber, "Invalid boolean value");
         }         }
  
         case CIMTYPE_STRING:         case CIMTYPE_STRING:
Line 949 
Line 1011 
         case CIMTYPE_CHAR16:         case CIMTYPE_CHAR16:
         {         {
             if (strlen(valueString) != 1)             if (strlen(valueString) != 1)
                 throw XmlSemanticError(lineNumber, "Bad char16 value");                  throw XmlSemanticError(lineNumber, "Invalid char16 value");
  
             return CIMValue(Char16(valueString[0]));             return CIMValue(Char16(valueString[0]));
         }         }
Line 963 
Line 1025 
  
             if (!stringToUnsignedInteger(valueString, x))             if (!stringToUnsignedInteger(valueString, x))
             {             {
               char message[128];
               sprintf(message, "Illegal unsigned integer value - %s", valueString);
                 throw XmlSemanticError(                 throw XmlSemanticError(
                     lineNumber, "Bad unsigned integer value");                      lineNumber, message);
             }             }
  
             switch (type)             switch (type)
Line 1011 
Line 1075 
             if (!stringToSignedInteger(valueString, x))             if (!stringToSignedInteger(valueString, x))
             {             {
                 throw XmlSemanticError(                 throw XmlSemanticError(
                     lineNumber, "Bad signed integer value");                      lineNumber, "Invalid signed integer value");
             }             }
  
             switch (type)             switch (type)
Line 1054 
Line 1118 
  
             try             try
             {             {
               // KS 20021002 - Exception if no datatime value. Test for
               // zero length and leave the NULL value in the variable
               // Bugzilla 137  Adds the following if line.
               // Expect this to become permanent but test only for now
   #ifdef PEGASUS_SNIA_INTEROP_TEST
               if (strlen(valueString) != 0)
   #endif
                 tmp.set(valueString);                 tmp.set(valueString);
             }             }
             catch (BadDateTimeFormat&)              catch (InvalidDateTimeFormatException&)
             {             {
                 throw XmlSemanticError(lineNumber, "Bad datetime value");              throw XmlSemanticError(lineNumber, "Invalid datetime value");
             }             }
  
             return CIMValue(tmp);             return CIMValue(tmp);
Line 1069 
Line 1140 
             Real64 x;             Real64 x;
  
             if (!stringToReal(valueString, x))             if (!stringToReal(valueString, x))
                 throw XmlSemanticError(lineNumber, "Bad real number value");                  throw XmlSemanticError(lineNumber, "Invalid real number value");
  
             return CIMValue(Real32(x));             return CIMValue(Real32(x));
         }         }
Line 1079 
Line 1150 
             Real64 x;             Real64 x;
  
             if (!stringToReal(valueString, x))             if (!stringToReal(valueString, x))
                 throw XmlSemanticError(lineNumber, "Bad real number value");                  throw XmlSemanticError(lineNumber, "Invalid real number value");
  
             return CIMValue(x);             return CIMValue(x);
         }         }
Line 1124 
Line 1195 
  
         expectEndTag(parser, "VALUE");         expectEndTag(parser, "VALUE");
     }     }
   #ifdef PEGASUS_SNIA_INTEROP_TEST
       // KS 20021004 - tries to put value in even if empty.
       // Think this is general problem with empty value
       // Need to check meaning of (#PCDATA) - Does it allow empty.
       // Bugzilla tbd
       if (!empty)
   #endif
     value = stringToValue(parser.getLine(), valueString,type);     value = stringToValue(parser.getLine(), valueString,type);
  
     return true;     return true;
Line 1515 
Line 1592 
  
     // Get QUALIFIER.NAME attribute:     // Get QUALIFIER.NAME attribute:
  
     String name = getCimNameAttribute(parser.getLine(), entry, "QUALIFIER");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "QUALIFIER");
  
     // Get QUALIFIER.TYPE attribute:     // Get QUALIFIER.TYPE attribute:
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "QUALIFIER");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "QUALIFIER");
  
     // Get QUALIFIER.PROPAGATED     // Get QUALIFIER.PROPAGATED
  
Line 1567 
Line 1645 
         {         {
             container.addQualifier(qualifier);             container.addQualifier(qualifier);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate qualifier");             throw XmlSemanticError(parser.getLine(), "duplicate qualifier");
         }         }
Line 1598 
Line 1676 
  
     // Get PROPERTY.NAME attribute:     // Get PROPERTY.NAME attribute:
  
     String name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");
  
     // Get PROPERTY.CLASSORIGIN attribute:     // Get PROPERTY.CLASSORIGIN attribute:
  
Line 1612 
Line 1690 
  
     // Get PROPERTY.TYPE attribute:     // Get PROPERTY.TYPE attribute:
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PROPERTY");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PROPERTY");
  
     // Create property: Sets type and !isarray     // Create property: Sets type and !isarray
  
Line 1700 
Line 1779 
  
     // Get PROPERTY.NAME attribute:     // Get PROPERTY.NAME attribute:
  
     String name =      CIMName name =
         getCimNameAttribute(parser.getLine(), entry, "PROPERTY.ARRAY");         getCimNameAttribute(parser.getLine(), entry, "PROPERTY.ARRAY");
  
     // Get PROPERTY.TYPE attribute:     // Get PROPERTY.TYPE attribute:
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PROPERTY.ARRAY");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PROPERTY.ARRAY");
  
     // Get PROPERTY.ARRAYSIZE attribute:     // Get PROPERTY.ARRAYSIZE attribute:
  
Line 1769 
Line 1849 
  
     if (!testStartTag(parser, entry, "HOST"))     if (!testStartTag(parser, entry, "HOST"))
         return false;         return false;
   #ifdef PEGASUS_SNIA_INTEROP_TEST
       // Temp code to allow empty HOST field.
       // SNIA CIMOMs return empty field particularly on enumerateinstance.
       // Simply substitute a string for the empty.
           if (!parser.next(entry))
               throw XmlException(XmlException::UNCLOSED_TAGS, parser.getLine());
   
           if (entry.type == XmlEntry::CONTENT)
               host = entry.text;
           else
       {
               parser.putBack(entry);
           host = "HOSTNAMEINSERTEDBYPEGASUSCLIENT";
       }
   
   #else
  
     if (!parser.next(entry) || entry.type != XmlEntry::CONTENT)     if (!parser.next(entry) || entry.type != XmlEntry::CONTENT)
     {     {
Line 1777 
Line 1873 
     }     }
  
     host = entry.text;     host = entry.text;
   #endif
     expectEndTag(parser, "HOST");     expectEndTag(parser, "HOST");
     return true;     return true;
 } }
Line 1793 
Line 1889 
  
 Boolean XmlReader::getNameSpaceElement( Boolean XmlReader::getNameSpaceElement(
     XmlParser& parser,     XmlParser& parser,
     String& nameSpaceComponent)      CIMName& nameSpaceComponent)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1828 
Line 1924 
     if (!testStartTag(parser, entry, "LOCALNAMESPACEPATH"))     if (!testStartTag(parser, entry, "LOCALNAMESPACEPATH"))
         return false;         return false;
  
     String nameSpaceComponent;      CIMName nameSpaceComponent;
  
     while (getNameSpaceElement(parser, nameSpaceComponent))     while (getNameSpaceElement(parser, nameSpaceComponent))
     {     {
         if (nameSpace.size())         if (nameSpace.size())
             nameSpace += '/';              nameSpace.append('/');
  
         nameSpace += nameSpaceComponent;          nameSpace.append(nameSpaceComponent.getString());
     }     }
  
     if (!nameSpace.size())     if (!nameSpace.size())
Line 1895 
Line 1991 
  
 Boolean XmlReader::getClassNameElement( Boolean XmlReader::getClassNameElement(
     XmlParser& parser,     XmlParser& parser,
     String& className,      CIMName& className,
     Boolean required)     Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
Line 1910 
Line 2006 
         else         else
             return false;             return false;
     }     }
   
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
  
     className = getCimNameAttribute(     className = getCimNameAttribute(
         parser.getLine(), entry, "CLASSNAME", true);          parser.getLine(), entry, "CLASSNAME", false);
  
     if (!empty)     if (!empty)
         expectEndTag(parser, "CLASSNAME");         expectEndTag(parser, "CLASSNAME");
Line 1930 
Line 2025 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 KeyBinding::Type XmlReader::getValueTypeAttribute(  CIMKeyBinding::Type XmlReader::getValueTypeAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName)     const char* elementName)
Line 1938 
Line 2033 
     String tmp;     String tmp;
  
     if (!entry.getAttributeValue("VALUETYPE", tmp))     if (!entry.getAttributeValue("VALUETYPE", tmp))
         return KeyBinding::STRING;          return CIMKeyBinding::STRING;
  
     if (String::equal(tmp, "string"))     if (String::equal(tmp, "string"))
         return KeyBinding::STRING;          return CIMKeyBinding::STRING;
     else if (String::equal(tmp, "boolean"))     else if (String::equal(tmp, "boolean"))
         return KeyBinding::BOOLEAN;          return CIMKeyBinding::BOOLEAN;
     else if (String::equal(tmp, "numeric"))     else if (String::equal(tmp, "numeric"))
         return KeyBinding::NUMERIC;          return CIMKeyBinding::NUMERIC;
  
     char buffer[MESSAGE_SIZE];     char buffer[MESSAGE_SIZE];
  
Line 1955 
Line 2050 
         elementName);         elementName);
  
     throw XmlSemanticError(lineNumber, buffer);     throw XmlSemanticError(lineNumber, buffer);
     return KeyBinding::BOOLEAN;      return CIMKeyBinding::BOOLEAN;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1970 
Line 2065 
  
 Boolean XmlReader::getKeyValueElement( Boolean XmlReader::getKeyValueElement(
     XmlParser& parser,     XmlParser& parser,
     KeyBinding::Type& type,      CIMKeyBinding::Type& type,
     String& value)     String& value)
 { {
     XmlEntry entry;     XmlEntry entry;
Line 2012 
Line 2107 
  
 Boolean XmlReader::getKeyBindingElement( Boolean XmlReader::getKeyBindingElement(
     XmlParser& parser,     XmlParser& parser,
     String& name,      CIMName& name,
     String& value,     String& value,
     KeyBinding::Type& type)      CIMKeyBinding::Type& type)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2033 
Line 2128 
                       "Expected KEYVALUE or VALUE.REFERENCE element");                       "Expected KEYVALUE or VALUE.REFERENCE element");
         }         }
  
         type = KeyBinding::REFERENCE;          type = CIMKeyBinding::REFERENCE;
         value = reference.toString();         value = reference.toString();
     }     }
  
Line 2057 
Line 2152 
 Boolean XmlReader::getInstanceNameElement( Boolean XmlReader::getInstanceNameElement(
     XmlParser& parser,     XmlParser& parser,
     String& className,     String& className,
     Array<KeyBinding>& keyBindings)      Array<CIMKeyBinding>& keyBindings)
 { {
     className.clear();     className.clear();
     keyBindings.clear();     keyBindings.clear();
Line 2076 
Line 2171 
         return true;         return true;
     }     }
  
     String name;      CIMName name;
     KeyBinding::Type type;      CIMKeyBinding::Type type;
     String value;     String value;
     CIMObjectPath reference;     CIMObjectPath reference;
  
     if (getKeyValueElement(parser, type, value))     if (getKeyValueElement(parser, type, value))
     {     {
         // Use empty key name because none was specified         // Use empty key name because none was specified
         keyBindings.append(KeyBinding(name, value, type));          keyBindings.append(CIMKeyBinding(name, value, type));
     }     }
     else if (getValueReferenceElement(parser, reference))     else if (getValueReferenceElement(parser, reference))
     {     {
         // Use empty key name because none was specified         // Use empty key name because none was specified
         type = KeyBinding::REFERENCE;          type = CIMKeyBinding::REFERENCE;
         value = reference.toString();         value = reference.toString();
         keyBindings.append(KeyBinding(name, value, type));          keyBindings.append(CIMKeyBinding(name, value, type));
     }     }
     else     else
     {     {
         while (getKeyBindingElement(parser, name, value, type))         while (getKeyBindingElement(parser, name, value, type))
             keyBindings.append(KeyBinding(name, value, type));              keyBindings.append(CIMKeyBinding(name, value, type));
     }     }
  
     expectEndTag(parser, "INSTANCENAME");     expectEndTag(parser, "INSTANCENAME");
Line 2109 
Line 2204 
     CIMObjectPath& instanceName)     CIMObjectPath& instanceName)
 { {
     String className;     String className;
     Array<KeyBinding> keyBindings;      Array<CIMKeyBinding> keyBindings;
  
     if (!XmlReader::getInstanceNameElement(parser, className, keyBindings))     if (!XmlReader::getInstanceNameElement(parser, className, keyBindings))
         return false;         return false;
Line 2145 
Line 2240 
     }     }
  
     String className;     String className;
     Array<KeyBinding> keyBindings;      Array<CIMKeyBinding> keyBindings;
  
     if (!getInstanceNameElement(parser, className, keyBindings))     if (!getInstanceNameElement(parser, className, keyBindings))
     {     {
Line 2185 
Line 2280 
     }     }
  
     String className;     String className;
     Array<KeyBinding> keyBindings;      Array<CIMKeyBinding> keyBindings;
  
     if (!getInstanceNameElement(parser, className, keyBindings))     if (!getInstanceNameElement(parser, className, keyBindings))
     {     {
Line 2225 
Line 2320 
             "expected NAMESPACEPATH element");             "expected NAMESPACEPATH element");
     }     }
  
     String className;      CIMName className;
  
     if (!getClassNameElement(parser, className))     if (!getClassNameElement(parser, className))
     {     {
Line 2264 
Line 2359 
             "expected LOCALNAMESPACEPATH element");             "expected LOCALNAMESPACEPATH element");
     }     }
  
     String className;      CIMName className;
  
     if (!getClassNameElement(parser, className))     if (!getClassNameElement(parser, className))
     {     {
Line 2323 
Line 2418 
     else if (strcmp(entry.text, "CLASSNAME") == 0)     else if (strcmp(entry.text, "CLASSNAME") == 0)
     {     {
         parser.putBack(entry);         parser.putBack(entry);
         String className;          CIMName className;
         getClassNameElement(parser, className);         getClassNameElement(parser, className);
         reference.set(String(), CIMNamespaceName(), className);         reference.set(String(), CIMNamespaceName(), className);
     }     }
Line 2341 
Line 2436 
     {     {
         parser.putBack(entry);         parser.putBack(entry);
         String className;         String className;
         Array<KeyBinding> keyBindings;          Array<CIMKeyBinding> keyBindings;
         getInstanceNameElement(parser, className, keyBindings);         getInstanceNameElement(parser, className, keyBindings);
         reference.set(String(), CIMNamespaceName(), className, keyBindings);         reference.set(String(), CIMNamespaceName(), className, keyBindings);
     }     }
Line 2415 
Line 2510 
  
     // Get PROPERTY.NAME attribute:     // Get PROPERTY.NAME attribute:
  
     String name = getCimNameAttribute(      CIMName name = getCimNameAttribute(
         parser.getLine(), entry, "PROPERTY.REFERENCE");         parser.getLine(), entry, "PROPERTY.REFERENCE");
  
     // Get PROPERTY.REFERENCECLASS attribute:     // Get PROPERTY.REFERENCECLASS attribute:
Line 2474 
Line 2569 
         {         {
             container.addProperty(property);             container.addProperty(property);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate property");             throw XmlSemanticError(parser.getLine(), "duplicate property");
         }         }
Line 2505 
Line 2600 
  
     // Get PARAMETER.NAME attribute:     // Get PARAMETER.NAME attribute:
  
     String name = getCimNameAttribute(parser.getLine(), entry, "PARAMETER");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "PARAMETER");
  
     // Get PARAMETER.TYPE attribute:     // Get PARAMETER.TYPE attribute:
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PARAMETER");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PARAMETER");
  
     // Create parameter:     // Create parameter:
  
Line 2550 
Line 2646 
  
     // Get PARAMETER.ARRAY.NAME attribute:     // Get PARAMETER.ARRAY.NAME attribute:
  
     String name = getCimNameAttribute(      CIMName name = getCimNameAttribute(
         parser.getLine(), entry, "PARAMETER.ARRAY");         parser.getLine(), entry, "PARAMETER.ARRAY");
  
     // Get PARAMETER.ARRAY.TYPE attribute:     // Get PARAMETER.ARRAY.TYPE attribute:
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PARAMETER.ARRAY");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PARAMETER.ARRAY");
  
     // Get PARAMETER.ARRAYSIZE attribute:     // Get PARAMETER.ARRAYSIZE attribute:
  
Line 2600 
Line 2697 
  
     // Get PARAMETER.NAME attribute:     // Get PARAMETER.NAME attribute:
  
     String name = getCimNameAttribute(      CIMName name = getCimNameAttribute(
         parser.getLine(), entry, "PARAMETER.REFERENCE");         parser.getLine(), entry, "PARAMETER.REFERENCE");
  
     // Get PARAMETER.REFERENCECLASS attribute:     // Get PARAMETER.REFERENCECLASS attribute:
Line 2646 
Line 2743 
  
     // Get PARAMETER.NAME attribute:     // Get PARAMETER.NAME attribute:
  
     String name = getCimNameAttribute(      CIMName name = getCimNameAttribute(
         parser.getLine(), entry, "PARAMETER.REFARRAY");         parser.getLine(), entry, "PARAMETER.REFARRAY");
  
     // Get PARAMETER.REFERENCECLASS attribute:     // Get PARAMETER.REFERENCECLASS attribute:
Line 2694 
Line 2791 
         {         {
             container.addParameter(parameter);             container.addParameter(parameter);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate parameter");             throw XmlSemanticError(parser.getLine(), "duplicate parameter");
         }         }
Line 2728 
Line 2825 
  
     // Get NAME attribute:     // Get NAME attribute:
  
     String name = getCimNameAttribute(      CIMName name = getCimNameAttribute(
         parser.getLine(), entry, "QUALIFIER.DECLARATION");         parser.getLine(), entry, "QUALIFIER.DECLARATION");
  
     // Get TYPE attribute:     // Get TYPE attribute:
  
     CIMType type = getCimTypeAttribute(      CIMType type;
         parser.getLine(), entry, "QUALIFIER.DECLARATION");      getCimTypeAttribute(parser.getLine(), entry, type, "QUALIFIER.DECLARATION");
  
     // Get ISARRAY attribute:     // Get ISARRAY attribute:
  
Line 2757 
Line 2854 
  
     CIMScope scope = CIMScope ();     CIMScope scope = CIMScope ();
     CIMValue value;     CIMValue value;
       Boolean gotValue = false;
  
     if (!empty)     if (!empty)
     {     {
Line 2781 
Line 2879 
                     "VALUE.ARRAY size is not the same as "                     "VALUE.ARRAY size is not the same as "
                     "ARRAYSIZE attribute");                     "ARRAYSIZE attribute");
             }             }
   
               gotValue = true;
         }         }
         else if (getValueElement(parser, type, value))         else if (getValueElement(parser, type, value))
         {         {
Line 2789 
Line 2889 
                 throw XmlSemanticError(parser.getLine(),                 throw XmlSemanticError(parser.getLine(),
                     "ISARRAY attribute used but VALUE element encountered");                     "ISARRAY attribute used but VALUE element encountered");
             }             }
   
               gotValue = true;
         }         }
  
         // Now get the closing tag:         // Now get the closing tag:
Line 2796 
Line 2898 
         expectEndTag(parser, "QUALIFIER.DECLARATION");         expectEndTag(parser, "QUALIFIER.DECLARATION");
     }     }
  
     if (value.getType() == CIMTYPE_NONE)      if (!gotValue)
     {     {
         if (isArray)         if (isArray)
             value.setNullValue(type, true, arraySize);             value.setNullValue(type, true, arraySize);
Line 2831 
Line 2933 
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
  
     String name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PROPERTY");      CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PROPERTY");
  
     CIMName classOrigin =     CIMName classOrigin =
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");
Line 2873 
Line 2976 
     if (!testStartTag(parser, entry, "CLASS"))     if (!testStartTag(parser, entry, "CLASS"))
         return false;         return false;
  
     String name = getCimNameAttribute(parser.getLine(), entry, "CLASS");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "CLASS");
  
     CIMName superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");     CIMName superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");
  
Line 3048 
Line 3151 
  
     if (!entry.getAttributeValue("ID", id))     if (!entry.getAttributeValue("ID", id))
         throw XmlValidationError(parser.getLine(),         throw XmlValidationError(parser.getLine(),
             "Bad or missing MESSAGE.ID attribute");              "Invalid or missing MESSAGE.ID attribute");
  
     // Get MESSAGE.PROTOCOLVERSION:     // Get MESSAGE.PROTOCOLVERSION:
  
     if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion))     if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion))
         throw XmlValidationError(parser.getLine(),         throw XmlValidationError(parser.getLine(),
             "Bad or missing MESSAGE.PROTOCOLVERSION attribute");              "Invalid or missing MESSAGE.PROTOCOLVERSION attribute");
  
     return true;     return true;
 } }
Line 3158 
Line 3261 
  
     expectContentOrCData(parser, entry);     expectContentOrCData(parser, entry);
  
     if (CompareNoCase(entry.text, "TRUE") == 0)      if (System::strcasecmp(entry.text, "TRUE") == 0)
         result = true;         result = true;
     else if (CompareNoCase(entry.text, "FALSE") == 0)      else if (System::strcasecmp(entry.text, "FALSE") == 0)
         result = false;         result = false;
     else     else
         throw XmlSemanticError(parser.getLine(),         throw XmlSemanticError(parser.getLine(),
             "Bad value for VALUE element: must be \"TRUE\" or \"FALSE\"");              "Invalid value for VALUE element: must be \"TRUE\" or \"FALSE\"");
  
     expectEndTag(parser, "VALUE");     expectEndTag(parser, "VALUE");
  
Line 3420 
Line 3523 
     XmlParser& parser,     XmlParser& parser,
     CIMObjectPath& objectName)     CIMObjectPath& objectName)
 { {
     String className;      CIMName className;
  
     if (getClassNameElement(parser, className, false))     if (getClassNameElement(parser, className, false))
     {     {
Line 3522 
Line 3625 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // getEParamValueTag()
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getEParamValueTag(
       XmlParser& parser,
       const char*& name)
   {
       XmlEntry entry;
   
       if (!testStartTag(parser, entry, "EXPPARAMVALUE"))
           return false;
   
       // Get EXPPARAMVALUE.NAME attribute:
   
       if (!entry.getAttributeValue("NAME", name))
           throw XmlValidationError(parser.getLine(),
               "Missing EXPPARAMVALUE.NAME attribute");
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
 // getMethodCallStartTag() // getMethodCallStartTag()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 3601 
Line 3728 
  
     // Get PARAMVALUE.PARAMTYPE attribute:     // Get PARAMVALUE.PARAMTYPE attribute:
  
     type = getCimTypeAttribute(parser.getLine(), entry, "PARAMVALUE",      Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type,
                                "PARAMTYPE", false);                                            "PARAMVALUE", "PARAMTYPE", false);
  
     if (!empty)     if (!empty)
     {     {
         // Parse VALUE.REFERENCE and VALUE.REFARRAY type         // Parse VALUE.REFERENCE and VALUE.REFARRAY type
         if ( (type == CIMTYPE_REFERENCE) || (type == CIMTYPE_NONE) )          if ( (type == CIMTYPE_REFERENCE) || !gotType )
         {         {
             CIMObjectPath reference;             CIMObjectPath reference;
             if (XmlReader::getValueReferenceElement(parser, reference))             if (XmlReader::getValueReferenceElement(parser, reference))
             {             {
                 value.set(reference);                 value.set(reference);
                 type = CIMTYPE_REFERENCE;                 type = CIMTYPE_REFERENCE;
                   gotType = true;
             }             }
             else if (XmlReader::getValueReferenceArrayElement(parser, value))             else if (XmlReader::getValueReferenceArrayElement(parser, value))
             {             {
                 type = CIMTYPE_REFERENCE;                 type = CIMTYPE_REFERENCE;
                   gotType = true;
             }             }
             // If type==reference but no VALUE.REFERENCE found, use null value             // If type==reference but no VALUE.REFERENCE found, use null value
         }         }
Line 3625 
Line 3754 
         // Parse non-reference value         // Parse non-reference value
         if ( type != CIMTYPE_REFERENCE )         if ( type != CIMTYPE_REFERENCE )
         {         {
             // If we don't know what type the value is, read it as a String              CIMType effectiveType;
             CIMType effectiveType = type;              if (!gotType)
             if ( effectiveType == CIMTYPE_NONE)  
             {             {
                   // If we don't know what type the value is, read it as a String
                 effectiveType = CIMTYPE_STRING;                 effectiveType = CIMTYPE_STRING;
             }             }
               else
               {
                   effectiveType = type;
               }
  
             if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) &&             if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) &&
                  !XmlReader::getValueElement(parser, effectiveType, value) )                  !XmlReader::getValueElement(parser, effectiveType, value) )
Line 3642 
Line 3775 
         expectEndTag(parser, "PARAMVALUE");         expectEndTag(parser, "PARAMVALUE");
     }     }
  
     paramValue = CIMParamValue(name, value, Boolean(type!=CIMTYPE_NONE));      paramValue = CIMParamValue(name, value, gotType);
  
     return true;     return true;
 } }
Line 3671 
Line 3804 
     // Get RETURNVALUE.PARAMTYPE attribute:     // Get RETURNVALUE.PARAMTYPE attribute:
     // NOTE: Array type return values are not allowed (2/20/02)     // NOTE: Array type return values are not allowed (2/20/02)
  
     type = getCimTypeAttribute(parser.getLine(), entry, "RETURNVALUE",      Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type,
                                "PARAMTYPE", false);                                            "RETURNVALUE", "PARAMTYPE", false);
  
     // Parse VALUE.REFERENCE type     // Parse VALUE.REFERENCE type
     if ( (type == CIMTYPE_REFERENCE) || (type == CIMTYPE_NONE) )      if ( (type == CIMTYPE_REFERENCE) || !gotType )
     {     {
         CIMObjectPath reference;         CIMObjectPath reference;
         if (XmlReader::getValueReferenceElement(parser, reference))         if (XmlReader::getValueReferenceElement(parser, reference))
         {         {
             returnValue.set(reference);             returnValue.set(reference);
             type = CIMTYPE_REFERENCE;             type = CIMTYPE_REFERENCE;
               gotType = true;
         }         }
         else if (type == CIMTYPE_REFERENCE)         else if (type == CIMTYPE_REFERENCE)
         {         {
Line 3693 
Line 3827 
     // Parse non-reference return value     // Parse non-reference return value
     if ( type != CIMTYPE_REFERENCE )     if ( type != CIMTYPE_REFERENCE )
     {     {
         // If we don't know what type the value is, read it as a String          if (!gotType)
         if ( type == CIMTYPE_NONE)  
         {         {
               // If we don't know what type the value is, read it as a String
             type = CIMTYPE_STRING;             type = CIMTYPE_STRING;
         }         }
  


Legend:
Removed from v.1.65  
changed lines
  Added in v.1.81.4.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2