(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.49 and 1.119

version 1.49, 2002/04/04 02:33:36 version 1.119, 2006/08/09 21:12:42
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // The Open Group, Tivoli Systems  // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 27 
Line 35 
 //                  (carolann_graves@hp.com) //                  (carolann_graves@hp.com)
 //              Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com) //              Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
 //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
   //              Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
   //              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#3103
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <cassert>  
 #include <cctype> #include <cctype>
 #include <cstdio> #include <cstdio>
 #include <cstdlib> #include <cstdlib>
 #if defined(PEGASUS_OS_TYPE_UNIX)  #if defined(PEGASUS_OS_TYPE_UNIX) || defined(PEGASUS_OS_VMS)
 #include <errno.h> #include <errno.h>
 #endif #endif
 #include "CIMName.h" #include "CIMName.h"
Line 45 
Line 54 
 #include "CIMClass.h" #include "CIMClass.h"
 #include "CIMInstance.h" #include "CIMInstance.h"
 #include "CIMObject.h" #include "CIMObject.h"
 #include "CIMNamedInstance.h"  
 #include "CIMParamValue.h" #include "CIMParamValue.h"
   #include "System.h"
   #include "XmlConstants.h"
   #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM
   #include "EBCDIC_OS400.h"
   #endif
   // l10n
   #include <Pegasus/Common/MessageLoader.h>
   #include <Pegasus/Common/AutoPtr.h>
   #include "CIMNameUnchecked.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 72 
Line 92 
         entry.type != XmlEntry::XML_DECLARATION ||         entry.type != XmlEntry::XML_DECLARATION ||
         strcmp(entry.text, "xml") != 0)         strcmp(entry.text, "xml") != 0)
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Expected <?xml ... ?> style declaration");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_XML_STYLE",
             "Expected <?xml ... ?> style declaration");             "Expected <?xml ... ?> style declaration");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     if (!entry.getAttributeValue("version", xmlVersion))      if (!entry.getAttributeValue("version", xmlVersion)) {
         throw XmlValidationError(  
             parser.getLine(), "missing xml.version attribute");        // l10n
   
         // throw XmlValidationError(
         //   parser.getLine(), "missing xml.version attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_XML_ATTRIBUTE",
                                    "missing xml.version attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     if (!entry.getAttributeValue("encoding", xmlEncoding))     if (!entry.getAttributeValue("encoding", xmlEncoding))
     {     {
Line 122 
Line 160 
         entry.type != XmlEntry::START_TAG ||         entry.type != XmlEntry::START_TAG ||
         strcmp(entry.text, tagName) != 0)         strcmp(entry.text, tagName) != 0)
     {     {
         char message[MESSAGE_SIZE];        // l10n
         sprintf(message, "Expected open of %s element", tagName);  
         throw XmlValidationError(parser.getLine(), message);        // char message[MESSAGE_SIZE];
         // sprintf(message, "Expected open of %s element", tagName);
         // throw XmlValidationError(parser.getLine(), message);
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
                                    "Expected open of $0 element",
                                    tagName);
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 142 
Line 188 
         entry.type != XmlEntry::END_TAG ||         entry.type != XmlEntry::END_TAG ||
         strcmp(entry.text, tagName) != 0)         strcmp(entry.text, tagName) != 0)
     {     {
         char message[MESSAGE_SIZE];  
         sprintf(message, "Expected close of %s element, got %s instead",        // l10n
   
         // char message[MESSAGE_SIZE];
         // sprintf(message, "Expected close of %s element, got %s instead",
         //     tagName,entry.text);
         // throw XmlValidationError(parser.getLine(), message);
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLOSE",
                                    "Expected close of $0 element, got $1 instead",
               tagName,entry.text);               tagName,entry.text);
         throw XmlValidationError(parser.getLine(), message);  
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 165 
Line 220 
         entry.type != XmlEntry::EMPTY_TAG) ||         entry.type != XmlEntry::EMPTY_TAG) ||
         strcmp(entry.text, tagName) != 0)         strcmp(entry.text, tagName) != 0)
     {     {
         char message[MESSAGE_SIZE];        // l10n
         sprintf(message,  
             "Expected either open or open/close %s element", tagName);        // char message[MESSAGE_SIZE];
         throw XmlValidationError(parser.getLine(), message);        // sprintf(message,
         //   "Expected either open or open/close %s element", tagName);
         // throw XmlValidationError(parser.getLine(), message);
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPENCLOSE",
                                    "Expected either open or open/close $0 element",
                                    tagName);
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 186 
Line 249 
         (entry.type != XmlEntry::CONTENT &&         (entry.type != XmlEntry::CONTENT &&
         entry.type != XmlEntry::CDATA))         entry.type != XmlEntry::CDATA))
     {     {
         throw XmlValidationError(parser.getLine(),        // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //               "Expected content of CDATA");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CDATA",
             "Expected content of CDATA");             "Expected content of CDATA");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     return true;     return true;
Line 261 
Line 332 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // testStartTagOrEmptyTag()
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::testStartTagOrEmptyTag(
       XmlParser& parser,
       XmlEntry& entry)
   {
       if (!parser.next(entry) ||
           (entry.type != XmlEntry::START_TAG &&
            entry.type != XmlEntry::EMPTY_TAG))
       {
           parser.putBack(entry);
           return false;
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
 // testContentOrCData() // testContentOrCData()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 299 
Line 391 
     XmlEntry entry;     XmlEntry entry;
     XmlReader::expectStartTag(parser, entry, "CIM");     XmlReader::expectStartTag(parser, entry, "CIM");
  
     if (!entry.getAttributeValue("CIMVERSION", cimVersion))      if (!entry.getAttributeValue("CIMVERSION", cimVersion)) {
         throw XmlValidationError(  
             parser.getLine(), "missing CIM.CIMVERSION attribute");        // l10n
   
     if (!entry.getAttributeValue("DTDVERSION", dtdVersion))        // throw XmlValidationError(
         throw XmlValidationError(        //   parser.getLine(), "missing CIM.CIMVERSION attribute");
             parser.getLine(), "missing CIM.DTDVERSION attribute");  
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_CIMVERSION_ATTRIBUTE",
                                    "missing CIM.CIMVERSION attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
       if (!entry.getAttributeValue("DTDVERSION", dtdVersion)){
   
         // l10n
   
         // throw XmlValidationError(
         //   parser.getLine(), "missing CIM.DTDVERSION attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_DTDVERSION_ATTRIBUTE",
                                    "missing CIM.DTDVERSION attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 316 
Line 426 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getCimNameAttribute(  CIMName XmlReader::getCimNameAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName,     const char* elementName,
Line 326 
Line 436 
  
     if (!entry.getAttributeValue("NAME", name))     if (!entry.getAttributeValue("NAME", name))
     {     {
   
           // l10n
   
           // char buffer[MESSAGE_SIZE];
           // sprintf(buffer, "missing %s.NAME attribute", elementName);
           // throw XmlValidationError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "missing %s.NAME attribute", elementName);          sprintf(buffer, "%s.NAME", elementName);
         throw XmlValidationError(lineNumber, buffer);          MessageLoaderParms mlParms("Common.XmlReader.MISSING_ATTRIBUTE",
                                      "missing $0 attribute",
                                      buffer);
   
           throw XmlValidationError(lineNumber, mlParms);
     }     }
  
     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
       // In testing, replace illegal CIMName with this value to avoid the
       // exception and let xml parsing continue.  THIS IS TEMP.
       name = "BADNAMESUBSTITUTEDBYPEGASUSCLIENT";
   #else
   
       // l10n
   
       // char buffer[MESSAGE_SIZE];
       // sprintf(buffer, "Illegal value for %s.NAME attribute", elementName);
       // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "Illegal value for %s.NAME attribute", elementName);      sprintf(buffer, "%s.NAME", elementName);
         throw XmlSemanticError(lineNumber, buffer);  
     }  
  
     return name;      MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                  "Illegal value for $0 attribute",
                                  buffer);
   
       throw XmlSemanticError(lineNumber, mlParms);
   
   #endif
       }
       return CIMNameUnchecked(name);
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 361 
Line 500 
  
     if (!entry.getAttributeValue("CLASSNAME", name))     if (!entry.getAttributeValue("CLASSNAME", name))
     {     {
   
   
         // l10n
   
         // char buffer[MESSAGE_SIZE];
         // sprintf(buffer, "missing %s.CLASSNAME attribute", elementName);
         // throw XmlValidationError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "missing %s.CLASSNAME attribute", elementName);        sprintf(buffer, "%s.CLASSNAME", elementName);
         throw XmlValidationError(lineNumber, buffer);  
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_ATTRIBUTE",
                                    "missing $0 attribute",
                                    buffer);
   
         throw XmlValidationError(lineNumber, mlParms);
   
     }     }
  
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
         // l10n
   
         // char buffer[MESSAGE_SIZE];
         // sprintf(buffer,
         //   "Illegal value for %s.CLASSNAME attribute", elementName);
         // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer,        sprintf(buffer, "%s.CLASSNAME", elementName);
             "Illegal value for %s.CLASSNAME attribute", elementName);  
         throw XmlSemanticError(lineNumber, buffer);        MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                    "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
   
     }     }
  
     return name;     return name;
Line 385 
Line 550 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getClassOriginAttribute(  CIMName XmlReader::getClassOriginAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* tagName)     const char* tagName)
Line 393 
Line 558 
     String name;     String name;
  
     if (!entry.getAttributeValue("CLASSORIGIN", name))     if (!entry.getAttributeValue("CLASSORIGIN", name))
         return String();          return CIMName();
  
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
         // l10n
   
         // char buffer[MESSAGE_SIZE];
         // sprintf(buffer,
         //    "Illegal value for %s.CLASSORIGIN attribute", tagName);
         // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer,        sprintf(buffer, "%s.CLASSORIGIN", tagName);
             "Illegal value for %s.CLASSORIGIN attribute", tagName);  
         throw XmlSemanticError(lineNumber, buffer);        MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                    "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     return name;     return name;
Line 408 
Line 584 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // getEmbeddedObjectAttribute()
   //
   //     <!ENTITY % EmbeddedObject "EMBEDDEDOBJECT (object | instance) #IMPLIED">
   //
   //------------------------------------------------------------------------------
   
   String XmlReader::getEmbeddedObjectAttribute(
       Uint32 lineNumber,
       const XmlEntry& entry,
       const char* elementName)
   {
       String embeddedObject;
   
       if (!entry.getAttributeValue("EMBEDDEDOBJECT", embeddedObject))
           return String();
   
       // The embeddedObject attribute, if present, must have the string
       // value "object" or "instance".
       if (!(String::equal(embeddedObject, "object") ||
             String::equal(embeddedObject, "instance")
             )
           )
       {
         // l10n
   
         // char buffer[MESSAGE_SIZE];
         // sprintf(buffer,
         //   "Illegal value for %s.EMBEDDEDOBJECT attribute", elementName);
         // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "%s.EMBEDDEDOBJECT", elementName);
   
         MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                    "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
   
       }
   
       return embeddedObject;
   }
   
   //------------------------------------------------------------------------------
   //
 // getReferenceClassAttribute() // getReferenceClassAttribute()
 // //
 //     <!ENTITY % ReferenceClass "REFERENCECLASS CDATA #IMPLIED"> //     <!ENTITY % ReferenceClass "REFERENCECLASS CDATA #IMPLIED">
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getReferenceClassAttribute(  CIMName XmlReader::getReferenceClassAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName)     const char* elementName)
Line 422 
Line 644 
     String name;     String name;
  
     if (!entry.getAttributeValue("REFERENCECLASS", name))     if (!entry.getAttributeValue("REFERENCECLASS", name))
         return String();          return CIMName();
  
     if (!CIMName::legal(name))     if (!CIMName::legal(name))
     {     {
   #ifdef PEGASUS_SNIA_INTEROP_TEST
       name = "PEGASUS_SUBSTITUED_THIS_FOR_BAD_NAME";
       return name;
   #endif
   
       // l10n
   
       // char buffer[MESSAGE_SIZE];
       // sprintf(buffer,
       //     "Illegal value for %s.REFERENCECLASS attribute", elementName);
       // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(buffer,      sprintf(buffer, "%s.REFERENCECLASS", elementName);
             "Illegal value for %s.REFERENCECLASS attribute", elementName);  
         throw XmlSemanticError(lineNumber, buffer);      MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                  "Illegal value for $0 attribute",
                                  buffer);
   
       throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     return name;     return name;
Line 443 
Line 681 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getSuperClassAttribute(  CIMName XmlReader::getSuperClassAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* tagName)     const char* tagName)
Line 451 
Line 689 
     String superClass;     String superClass;
  
     if (!entry.getAttributeValue("SUPERCLASS", superClass))     if (!entry.getAttributeValue("SUPERCLASS", superClass))
         return String();          return CIMName();
  
     if (!CIMName::legal(superClass))     if (!CIMName::legal(superClass))
     {     {
   
         // l10n
   
         // char buffer[MESSAGE_SIZE];
         // sprintf(
         //   buffer, "Illegal value for %s.SUPERCLASS attribute", tagName);
         // throw XmlSemanticError(lineNumber, buffer);
   
         char buffer[MESSAGE_SIZE];         char buffer[MESSAGE_SIZE];
         sprintf(        sprintf(buffer, "%s.SUPERCLASS", tagName);
             buffer, "Illegal value for %s.SUPERCLASS attribute", tagName);  
         throw XmlSemanticError(lineNumber, buffer);        MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                    "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     return superClass;     return superClass;
Line 482 
Line 732 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 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 495 
Line 746 
     {     {
         if (required)         if (required)
         {         {
   
             // l10n
   
             // char message[MESSAGE_SIZE];
             // sprintf(message, "missing %s.%s attribute", tagName, attributeName);
             // throw XmlValidationError(lineNumber, message);
   
             char message[MESSAGE_SIZE];             char message[MESSAGE_SIZE];
             sprintf(message, "missing %s.%s attribute", tagName, attributeName);            sprintf(message, "%s.%s", tagName, attributeName);
             throw XmlValidationError(lineNumber, message);  
             MessageLoaderParms mlParms("Common.XmlReader.MISSING_ATTRIBUTE",
                                        "missing $0 attribute",
                                        message);
   
             throw XmlValidationError(lineNumber, mlParms);
   
         }         }
         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;
     else if (strcmp(typeName, "string") == 0)     else if (strcmp(typeName, "string") == 0)
         type = CIMType::STRING;          type = CIMTYPE_STRING;
     else if (strcmp(typeName, "char16") == 0)     else if (strcmp(typeName, "char16") == 0)
         type = CIMType::CHAR16;          type = CIMTYPE_CHAR16;
     else if (strcmp(typeName, "uint8") == 0)     else if (strcmp(typeName, "uint8") == 0)
         type = CIMType::UINT8;          type = CIMTYPE_UINT8;
     else if (strcmp(typeName, "sint8") == 0)     else if (strcmp(typeName, "sint8") == 0)
         type = CIMType::SINT8;          type = CIMTYPE_SINT8;
     else if (strcmp(typeName, "uint16") == 0)     else if (strcmp(typeName, "uint16") == 0)
         type = CIMType::UINT16;          type = CIMTYPE_UINT16;
     else if (strcmp(typeName, "sint16") == 0)     else if (strcmp(typeName, "sint16") == 0)
         type = CIMType::SINT16;          type = CIMTYPE_SINT16;
     else if (strcmp(typeName, "uint32") == 0)     else if (strcmp(typeName, "uint32") == 0)
         type = CIMType::UINT32;          type = CIMTYPE_UINT32;
     else if (strcmp(typeName, "sint32") == 0)     else if (strcmp(typeName, "sint32") == 0)
         type = CIMType::SINT32;          type = CIMTYPE_SINT32;
     else if (strcmp(typeName, "uint64") == 0)     else if (strcmp(typeName, "uint64") == 0)
         type = CIMType::UINT64;          type = CIMTYPE_UINT64;
     else if (strcmp(typeName, "sint64") == 0)     else if (strcmp(typeName, "sint64") == 0)
         type = CIMType::SINT64;          type = CIMTYPE_SINT64;
     else if (strcmp(typeName, "datetime") == 0)     else if (strcmp(typeName, "datetime") == 0)
         type = CIMType::DATETIME;          type = CIMTYPE_DATETIME;
     else if (strcmp(typeName, "real32") == 0)     else if (strcmp(typeName, "real32") == 0)
         type = CIMType::REAL32;          type = CIMTYPE_REAL32;
     else if (strcmp(typeName, "real64") == 0)     else if (strcmp(typeName, "real64") == 0)
         type = CIMType::REAL64;          type = CIMTYPE_REAL64;
     else if (strcmp(typeName, "reference") == 0)     else if (strcmp(typeName, "reference") == 0)
         type = CIMType::REFERENCE;          type = CIMTYPE_REFERENCE;
   //  PEP 194:
   //  Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, just a
   //  Pegasus internal representation of an embedded object, so it won't be found here.
       else unrecognizedType = true;
  
     if ((type == CIMType::NONE) ||      if (unrecognizedType ||
         ((type == CIMType::REFERENCE) &&          ((type == CIMTYPE_REFERENCE) &&
          (strcmp(attributeName, "PARAMTYPE") != 0)))          (strcmp(attributeName, "PARAMTYPE") != 0)))
     {     {
         char message[MESSAGE_SIZE];        // l10n
         sprintf(message, "Illegal value for %s.%s attribute", tagName,  
                 attributeName);        // char message[MESSAGE_SIZE];
         throw XmlSemanticError(lineNumber, message);        // sprintf(message, "Illegal value for %s.%s attribute", tagName,
         //       attributeName);
         // throw XmlSemanticError(lineNumber, message);
   
         char buffer[MESSAGE_SIZE];
         sprintf(buffer, "%s.%s", tagName, attributeName);
   
         MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
                                    "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     return type;      cimType = type;
       return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 572 
Line 853 
         if (!required)         if (!required)
             return defaultValue;             return defaultValue;
  
           // l10n
   
           // char buffer[62];
           // sprintf(buffer, "missing required %s.%s attribute",
           // attributeName, tagName);
   
           // throw XmlValidationError(lineNumber, buffer);
   
         char buffer[62];         char buffer[62];
         sprintf(buffer, "missing required %s.%s attribute",          sprintf(buffer, "%s.%s", attributeName, tagName);
             attributeName, tagName);  
  
         throw XmlValidationError(lineNumber, buffer);          MessageLoaderParms mlParms("Common.XmlReader.MISSING_REQUIRED_ATTRIBUTE",
                                      "missing required $0 attribute",
                                      buffer);
   
           throw XmlValidationError(lineNumber, mlParms);
     }     }
  
     if (strcmp(tmp, "true") == 0)     if (strcmp(tmp, "true") == 0)
Line 584 
Line 876 
     else if (strcmp(tmp, "false") == 0)     else if (strcmp(tmp, "false") == 0)
         return false;         return false;
  
       // l10n
   
       // char buffer[62];
       // sprintf(buffer, "Invalid %s.%s attribute value", attributeName, tagName);
       // throw XmlSemanticError(lineNumber, buffer);
   
     char buffer[62];     char buffer[62];
     sprintf(buffer, "Bad %s.%s attribute value", attributeName, tagName);      sprintf(buffer, "%s.%s", attributeName, tagName);
     throw XmlSemanticError(lineNumber, buffer);  
       MessageLoaderParms mlParms("Common.XmlReader.INVALID_ATTRIBUTE",
                                  "Invalid $0 attribute value",
                                  buffer);
   
       throw XmlSemanticError(lineNumber, mlParms);
   
     return false;     return false;
 } }
  
Line 674 
Line 978 
     return true;     return true;
 } }
  
 inline Uint8 _hexCharToNumeric(const char c)  inline Uint8 _xmlReader_hexCharToNumeric(const char c)
 { {
     Uint8 n;     Uint8 n;
  
Line 688 
Line 992 
     return n;     return n;
 } }
  
   // See http://www.ietf.org/rfc/rfc2396.txt section 2
   //
   // Also see the "CIM Operations over HTTP" spec, section 3.3.2 and
   // 3.3.3, for the treatment of non US-ASCII chars (UTF-8)
   String XmlReader::decodeURICharacters(String uriString)
   {
       Uint32 i;
   
       Array<Uint8> utf8Chars;
   
       for (i=0; i<uriString.size(); i++)
       {
           if (uriString[i] == '%')
           {
               if (i+2 >= uriString.size())
               {
                 // l10n
   
                 // throw ParseError("Invalid URI encoding");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_URI_ENCODING",
                                            "Invalid URI encoding");
   
                 throw ParseError(MessageLoader::getMessage(mlParms));
   
               }
   
               Uint8 digit1 = _xmlReader_hexCharToNumeric(char(uriString[++i]));
               Uint8 digit2 = _xmlReader_hexCharToNumeric(char(uriString[++i]));
               if ( (digit1 > 15) || (digit2 > 15) )
               {
                 // l10n
   
                 // throw ParseError("Invalid URI encoding");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_URI_ENCODING",
                                            "Invalid URI encoding");
   
                 throw ParseError(MessageLoader::getMessage(mlParms));
               }
   
               Uint16 decodedChar = Uint16(digit1<<4) + Uint16(digit2);
               utf8Chars.append((Uint8)decodedChar);
           }
           else
           {
               utf8Chars.append((Uint8)uriString[i]);
           }
       }
   
       // If there was a string to decode...
       if (uriString.size() > 0)
       {
           // Convert UTF-8 to UTF-16 and return the String
           utf8Chars.append('\0');
           return String((char *)utf8Chars.getData());
       }
       else
       {
           return String();
       }
   }
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // stringToSignedInteger // stringToSignedInteger
Line 735 
Line 1102 
             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;
                 }                 }
                 x = x << 4;                 x = x << 4;
  
                 // 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(_xmlReader_hexCharToNumeric(*p++));
                 if (PEGASUS_LLONG_MIN - x > -newDigit)                  if (PEGASUS_SINT64_MIN - x > -newDigit)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 758 
Line 1125 
             // overflow error             // overflow error
             if (!negative)             if (!negative)
             {             {
                 if (x == PEGASUS_LLONG_MIN)                  if (x == PEGASUS_SINT64_MIN)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 786 
Line 1153 
     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 794 
Line 1161 
  
         // 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 809 
Line 1176 
     // overflow error     // overflow error
     if (!negative)     if (!negative)
     {     {
         if (x == PEGASUS_LLONG_MIN)          if (x == PEGASUS_SINT64_MIN)
         {         {
             return false;             return false;
         }         }
Line 855 
Line 1222 
             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;
                 }                 }
                 x = x << 4;                 x = x << 4;
  
                 // 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(_xmlReader_hexCharToNumeric(*p++));
                 if (PEGASUS_ULLONG_MAX - x < newDigit)                  if (PEGASUS_UINT64_MAX - x < newDigit)
                 {                 {
                     return false;                     return false;
                 }                 }
Line 889 
Line 1256 
     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 897 
Line 1264 
  
         // 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 929 
Line 1296 
 { {
     // ATTN-B: accepting only UTF-8 for now! (affects string and char16):     // ATTN-B: accepting only UTF-8 for now! (affects string and char16):
  
 // The Specification for the Representation of CIM in XML does not indicate  
 // that a default value should be used when a VALUE element is empty.  
 //#if 0  ATTN-RK-P3-20020321: Take this code out when null qualifiers are fixed  
     // If strlen == 0, set to default value for type  
   
     if (strlen(valueString)==0)  
     {  
         switch (type)  
         {  
             case CIMType::BOOLEAN: return CIMValue(false);  
             case CIMType::STRING: return CIMValue(valueString);  
             case CIMType::CHAR16: return CIMValue(Char16('\0'));  
             case CIMType::UINT8: return CIMValue(Uint8(0));  
             case CIMType::UINT16: return CIMValue(Uint16(0));  
             case CIMType::UINT32: return CIMValue(Uint32(0));  
             case CIMType::UINT64: return CIMValue(Uint64(0));  
             case CIMType::SINT8: return CIMValue(Sint8(0));  
             case CIMType::SINT16: return CIMValue(Sint16(0));  
             case CIMType::SINT32: return CIMValue(Sint32(0));  
             case CIMType::SINT64: return CIMValue(Sint64(0));  
             case CIMType::REAL32: return CIMValue(Real32(0));  
             case CIMType::REAL64: return CIMValue(Real64(0));  
         }  
     }  
 //#endif  
   
     // Create value per type     // Create value per type
     switch (type)     switch (type)
     {     {
         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(  
                     lineNumber, "Bad boolean value");                // l10n
   
                 //  throw XmlSemanticError(
                 //             lineNumber, "Invalid boolean value");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_BOOLEAN_VALUE",
                                            "Invalid boolean value");
   
                 throw XmlSemanticError(lineNumber, mlParms);
   
               }
         }         }
  
         case CIMType::STRING:          case CIMTYPE_STRING:
         {         {
             return CIMValue(valueString);              return CIMValue(String(valueString));
         }         }
  
         case CIMType::CHAR16:          case CIMTYPE_CHAR16:
           {
   
   // remove this test, utf-8 can be up to 6 bytes per char
   /*
             if (strlen(valueString) != 1) {
               // l10n
   
               // throw XmlSemanticError(lineNumber, "Invalid char16 value");
   
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_CHAR16_VALUE",
                                          "Invalid char16 value");
   
               throw XmlSemanticError(lineNumber, mlParms);
             }
   */
             // Converts UTF-8 to UTF-16
             String tmp(valueString);
             if (tmp.size() != 1)
         {         {
             if (strlen(valueString) != 1)              // l10n
                 throw XmlSemanticError(lineNumber, "Bad char16 value");  
               // throw XmlSemanticError(lineNumber, "Invalid char16 value");
   
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_CHAR16_VALUE",
                                          "Invalid char16 value");
   
               throw XmlSemanticError(lineNumber, mlParms);
             }
  
             return CIMValue(Char16(valueString[0]));              return CIMValue(tmp[0]);
         }         }
  
         case CIMType::UINT8:          case CIMTYPE_UINT8:
         case CIMType::UINT16:          case CIMTYPE_UINT16:
         case CIMType::UINT32:          case CIMTYPE_UINT32:
         case CIMType::UINT64:          case CIMTYPE_UINT64:
         {         {
             Uint64 x;             Uint64 x;
  
             if (!stringToUnsignedInteger(valueString, x))             if (!stringToUnsignedInteger(valueString, x))
             {             {
                 throw XmlSemanticError(  
                     lineNumber, "Bad unsigned integer value");                // l10n
   
                 // throw XmlSemanticError(
                 //   lineNumber, "Invalid unsigned integer value");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_UI_VALUE",
                                            "Invalid unsigned integer value");
   
                 throw XmlSemanticError(lineNumber, mlParms);
   
             }             }
  
             switch (type)             switch (type)
             {             {
                 case CIMType::UINT8:                  case CIMTYPE_UINT8:
                 {                 {
                     if (x >= (Uint64(1)<<8))                     if (x >= (Uint64(1)<<8))
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Uint8 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //   lineNumber, "Uint8 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.U8_VALUE_OUT_OF_RANGE",
                                                    "Uint8 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
                     }                     }
                     return CIMValue(Uint8(x));                     return CIMValue(Uint8(x));
                 }                 }
                 case CIMType::UINT16:                  case CIMTYPE_UINT16:
                 {                 {
                     if (x >= (Uint64(1)<<16))                     if (x >= (Uint64(1)<<16))
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Uint16 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //             lineNumber, "Uint16 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.U16_VALUE_OUT_OF_RANGE",
                                                    "Uint16 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
   
                     }                     }
                     return CIMValue(Uint16(x));                     return CIMValue(Uint16(x));
                 }                 }
                 case CIMType::UINT32:                  case CIMTYPE_UINT32:
                 {                 {
                     if (x >= (Uint64(1)<<32))                     if (x >= (Uint64(1)<<32))
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Uint32 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //   lineNumber, "Uint32 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.U32_VALUE_OUT_OF_RANGE",
                                                    "Uint32 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
                     }                     }
                     return CIMValue(Uint32(x));                     return CIMValue(Uint32(x));
                 }                 }
                 case CIMType::UINT64: return CIMValue(Uint64(x));                  case CIMTYPE_UINT64: return CIMValue(Uint64(x));
                 default: break;                 default: break;
             }             }
         }         }
  
         case CIMType::SINT8:          case CIMTYPE_SINT8:
         case CIMType::SINT16:          case CIMTYPE_SINT16:
         case CIMType::SINT32:          case CIMTYPE_SINT32:
         case CIMType::SINT64:          case CIMTYPE_SINT64:
         {         {
             Sint64 x;             Sint64 x;
  
             if (!stringToSignedInteger(valueString, x))             if (!stringToSignedInteger(valueString, x))
             {             {
                 throw XmlSemanticError(  
                     lineNumber, "Bad signed integer value");                // l10n
   
                 // throw XmlSemanticError(
                 //   lineNumber, "Invalid signed integer value");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_SI_VALUE",
                                            "Invalid signed integer value");
   
                 throw XmlSemanticError(lineNumber, mlParms);
   
             }             }
  
             switch (type)             switch (type)
             {             {
                 case CIMType::SINT8:                  case CIMTYPE_SINT8:
                 {                 {
                     if(  (x >= (Sint64(1)<<7)) || (x < (-(Sint64(1)<<7))) )                     if(  (x >= (Sint64(1)<<7)) || (x < (-(Sint64(1)<<7))) )
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Sint8 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //   lineNumber, "Sint8 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.S8_VALUE_OUT_OF_RANGE",
                                                    "Sint8 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
                     }                     }
                     return CIMValue(Sint8(x));                     return CIMValue(Sint8(x));
                 }                 }
                 case CIMType::SINT16:                  case CIMTYPE_SINT16:
                 {                 {
                     if(  (x >= (Sint64(1)<<15)) || (x < (-(Sint64(1)<<15))) )                     if(  (x >= (Sint64(1)<<15)) || (x < (-(Sint64(1)<<15))) )
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Sint16 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //   lineNumber, "Sint16 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.S16_VALUE_OUT_OF_RANGE",
                                                    "Sint16 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
                     }                     }
                     return CIMValue(Sint16(x));                     return CIMValue(Sint16(x));
                 }                 }
                 case CIMType::SINT32:                  case CIMTYPE_SINT32:
                 {                 {
                     if(  (x >= (Sint64(1)<<31)) || (x < (-(Sint64(1)<<31))) )                     if(  (x >= (Sint64(1)<<31)) || (x < (-(Sint64(1)<<31))) )
                     {                     {
                         throw XmlSemanticError(  
                             lineNumber, "Sint32 value out of range");                        // l10n
   
                         // throw XmlSemanticError(
                         //   lineNumber, "Sint32 value out of range");
   
                         MessageLoaderParms mlParms("Common.XmlReader.S32_VALUE_OUT_OF_RANGE",
                                                    "Sint32 value out of range");
   
                         throw XmlSemanticError(lineNumber, mlParms);
                     }                     }
                     return CIMValue(Sint32(x));                     return CIMValue(Sint32(x));
                 }                 }
                 case CIMType::SINT64: return CIMValue(Sint64(x));                  case CIMTYPE_SINT64: return CIMValue(Sint64(x));
                 default: break;                 default: break;
             }             }
         }         }
  
         case CIMType::DATETIME:          case CIMTYPE_DATETIME:
         {         {
             CIMDateTime tmp;             CIMDateTime tmp;
  
             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");  
                 // l10n
   
                 // throw XmlSemanticError(lineNumber, "Invalid datetime value");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_DATETIME_VALUE",
                                            "Invalid datetime value");
   
                 throw XmlSemanticError(lineNumber, mlParms);
             }             }
  
             return CIMValue(tmp);             return CIMValue(tmp);
         }         }
  
         case CIMType::REAL32:          case CIMTYPE_REAL32:
         {         {
             Real64 x;             Real64 x;
  
             if (!stringToReal(valueString, x))              if (!stringToReal(valueString, x)) {
                 throw XmlSemanticError(lineNumber, "Bad real number value");  
                 // l10n
   
                 // throw XmlSemanticError(lineNumber, "Invalid real number value");
   
                 MessageLoaderParms mlParms("Common.XmlReader.INVALID_RN_VALUE",
                                            "Invalid real number value");
  
                 throw XmlSemanticError(lineNumber, mlParms);
               }
             return CIMValue(Real32(x));             return CIMValue(Real32(x));
         }         }
  
         case CIMType::REAL64:          case CIMTYPE_REAL64:
         {         {
             Real64 x;             Real64 x;
  
             if (!stringToReal(valueString, x))              if (!stringToReal(valueString, x)) {
                 throw XmlSemanticError(lineNumber, "Bad real number value");  
  
             return CIMValue(x);                // l10n
         }  
  
         default:                // throw XmlSemanticError(lineNumber, "Invalid real number value");
             break;  
     }  
  
     throw XmlSemanticError(lineNumber, "malformed XML");                MessageLoaderParms mlParms("Common.XmlReader.INVALID_RN_VALUE",
     return false;                                           "Invalid real number value");
 }  
                 throw XmlSemanticError(lineNumber, mlParms);
               }
               return CIMValue(x);
           }
   
   //  PEP 194:
   //  Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, but just a
   //  Pegasus internal representation of an embedded object. However, this case is
   //  used when decoding string representations of embedded objects.
       case CIMTYPE_OBJECT:
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       case CIMTYPE_INSTANCE:
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       {
           CIMObject x;
   
           if (*valueString == '\0')
           {
               return CIMValue(type, false, 0);
           }
           else
           {
               // Convert the non-NULL string to a CIMObject (containing either a
               // CIMInstance or a CIMClass).
   
               // First we need to create a new "temporary" XmlParser that is
               // just the value of the Embedded Object in String representation.
               AutoArrayPtr<char> tmp_buffer(new char[strlen(valueString) + 1]);
               strcpy(tmp_buffer.get(), valueString);
               XmlParser tmp_parser(tmp_buffer.get());
   
               // The next bit of logic constructs a CIMObject from the Embedded Object String.
               // It is similar to the method XmlReader::getValueObjectElement().
               CIMInstance cimInstance;
               CIMClass cimClass;
   
               if (XmlReader::getInstanceElement(tmp_parser, cimInstance))
               {
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
                   if(type == CIMTYPE_INSTANCE)
                     return CIMValue(cimInstance);
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
                   x = CIMObject(cimInstance);
               }
               else if (XmlReader::getClassElement(tmp_parser, cimClass))
               {
                   x = CIMObject(cimClass);
               }
               else
               {
                   // l10n
   
                   // throw XmlValidationError(parser.getLine(),
                   //   "Expected INSTANCE or CLASS element");
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
                   if(type == CIMTYPE_OBJECT)
                   {
                       MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_OR_CLASS_ELEMENT",
                           "Expected INSTANCE or CLASS element"); // change "element" to "embedded object"
   
                       throw XmlValidationError(lineNumber, mlParms);
                   }
                   else
                   {
                       MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                           "Expected INSTANCE element"); // change "element" to "embedded object"
                       throw XmlValidationError(lineNumber, mlParms);
                   }
   #else
                   MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_OR_CLASS_ELEMENT",
                       "Expected INSTANCE or CLASS element"); // change "element" to "embedded object"
                   throw XmlValidationError(lineNumber, mlParms);
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
               }
               // Ok, now we can delete the storage for the temporary XmlParser.
               tmp_buffer.reset();
           }
           return CIMValue(x);
       }
   
           default:
               break;
       }
   
       // l10n
   
       // throw XmlSemanticError(lineNumber, "malformed XML");
   
       MessageLoaderParms mlParms("Common.XmlReader.MALFORMED_XML",
                                  "malformed XML");
   
       throw XmlSemanticError(lineNumber, mlParms);
   
       return false;
   }
   
   //------------------------------------------------------------------------------
   //
   // skipElement()
   //
   //------------------------------------------------------------------------------
   void XmlReader::skipElement(
       XmlParser& parser,
       XmlEntry& entry)
   {
       const char * tag_name = entry.text;
   
       if (entry.type == XmlEntry::EMPTY_TAG)
       {
           return;
       }
   
       while (testStartTagOrEmptyTag(parser, entry))
       {
           skipElement(parser, entry);
       }
   
       if (testContentOrCData(parser, entry))
       {
           ; // skip
       }
   
       expectEndTag(parser, tag_name);
       return;
   }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
Line 1139 
Line 1726 
  
     XmlEntry entry;     XmlEntry entry;
     if (!testStartTagOrEmptyTag(parser, entry, "VALUE"))     if (!testStartTagOrEmptyTag(parser, entry, "VALUE"))
       {
         return false;         return false;
       }
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
  
Line 1148 
Line 1737 
     if (!empty)     if (!empty)
     {     {
         if (testContentOrCData(parser, entry))         if (testContentOrCData(parser, entry))
           {
             valueString = entry.text;             valueString = entry.text;
           }
  
         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 1175 
Line 1772 
  
     if (!testStartTagOrEmptyTag(parser, entry, "VALUE"))     if (!testStartTagOrEmptyTag(parser, entry, "VALUE"))
     {     {
         if (required)        if (required) {
             throw XmlValidationError(parser.getLine(),"Expected VALUE element");  
           // l10n
   
           // throw XmlValidationError(parser.getLine(),"Expected VALUE element");
   
           MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                                      "Expected VALUE element");
   
           throw XmlValidationError(parser.getLine(), mlParms);
   
   
         }
         return false;         return false;
     }     }
  
Line 1192 
Line 1800 
         expectEndTag(parser, "VALUE");         expectEndTag(parser, "VALUE");
     }     }
  
     str = valueString;      str = String(valueString);
     return true;     return true;
 } }
  
Line 1221 
Line 1829 
     CIMValue& cimValue)     CIMValue& cimValue)
 { {
     // Can not test for value type, so assume String     // Can not test for value type, so assume String
     const CIMType type = CIMType::STRING;      const CIMType type = CIMTYPE_STRING;
  
     // Test for VALUE element     // Test for VALUE element
     if (XmlReader::getValueElement(parser, type, cimValue))     if (XmlReader::getValueElement(parser, type, cimValue))
Line 1236 
Line 1844 
     }     }
  
     // Test for VALUE.REFERENCE element     // Test for VALUE.REFERENCE element
     CIMReference reference;      CIMObjectPath reference;
     if (XmlReader::getValueReferenceElement(parser, reference))     if (XmlReader::getValueReferenceElement(parser, reference))
     {     {
         cimValue.set(reference);         cimValue.set(reference);
Line 1287 
Line 1895 
 { {
     switch (type)     switch (type)
     {     {
         case CIMType::BOOLEAN:          case CIMTYPE_BOOLEAN:
             return StringArrayToValueAux(lineNumber, array, type, (Boolean*)0);             return StringArrayToValueAux(lineNumber, array, type, (Boolean*)0);
  
         case CIMType::STRING:          case CIMTYPE_STRING:
             return StringArrayToValueAux(lineNumber, array, type, (String*)0);             return StringArrayToValueAux(lineNumber, array, type, (String*)0);
  
         case CIMType::CHAR16:          case CIMTYPE_CHAR16:
             return StringArrayToValueAux(lineNumber, array, type, (Char16*)0);             return StringArrayToValueAux(lineNumber, array, type, (Char16*)0);
  
         case CIMType::UINT8:          case CIMTYPE_UINT8:
             return StringArrayToValueAux(lineNumber, array, type, (Uint8*)0);             return StringArrayToValueAux(lineNumber, array, type, (Uint8*)0);
  
         case CIMType::UINT16:          case CIMTYPE_UINT16:
             return StringArrayToValueAux(lineNumber, array, type, (Uint16*)0);             return StringArrayToValueAux(lineNumber, array, type, (Uint16*)0);
  
         case CIMType::UINT32:          case CIMTYPE_UINT32:
             return StringArrayToValueAux(lineNumber, array, type, (Uint32*)0);             return StringArrayToValueAux(lineNumber, array, type, (Uint32*)0);
  
         case CIMType::UINT64:          case CIMTYPE_UINT64:
             return StringArrayToValueAux(lineNumber, array, type, (Uint64*)0);             return StringArrayToValueAux(lineNumber, array, type, (Uint64*)0);
  
         case CIMType::SINT8:          case CIMTYPE_SINT8:
             return StringArrayToValueAux(lineNumber, array, type, (Sint8*)0);             return StringArrayToValueAux(lineNumber, array, type, (Sint8*)0);
  
         case CIMType::SINT16:          case CIMTYPE_SINT16:
             return StringArrayToValueAux(lineNumber, array, type, (Sint16*)0);             return StringArrayToValueAux(lineNumber, array, type, (Sint16*)0);
  
         case CIMType::SINT32:          case CIMTYPE_SINT32:
             return StringArrayToValueAux(lineNumber, array, type, (Sint32*)0);             return StringArrayToValueAux(lineNumber, array, type, (Sint32*)0);
  
         case CIMType::SINT64:          case CIMTYPE_SINT64:
             return StringArrayToValueAux(lineNumber, array, type, (Sint64*)0);             return StringArrayToValueAux(lineNumber, array, type, (Sint64*)0);
  
         case CIMType::DATETIME:          case CIMTYPE_DATETIME:
             return StringArrayToValueAux(lineNumber, array, type, (CIMDateTime*)0);             return StringArrayToValueAux(lineNumber, array, type, (CIMDateTime*)0);
  
         case CIMType::REAL32:          case CIMTYPE_REAL32:
             return StringArrayToValueAux(lineNumber, array, type, (Real32*)0);             return StringArrayToValueAux(lineNumber, array, type, (Real32*)0);
  
         case CIMType::REAL64:          case CIMTYPE_REAL64:
             return StringArrayToValueAux(lineNumber, array, type, (Real64*)0);             return StringArrayToValueAux(lineNumber, array, type, (Real64*)0);
  
   //  PEP 194:
   //  Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, but just a
   //  Pegasus internal representation of an embedded object. However, this case is
   //  used when decoding string representations of embedded objects.
       case CIMTYPE_OBJECT:
               return StringArrayToValueAux(lineNumber, array, type, (CIMObject*)0);
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       case CIMTYPE_INSTANCE:
               return StringArrayToValueAux(lineNumber, array, type, (CIMInstance*)0);
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
   
         default:         default:
             break;             break;
     }     }
Line 1364 
Line 1983 
     if (!testStartTagOrEmptyTag(parser, entry, "VALUE.ARRAY"))     if (!testStartTagOrEmptyTag(parser, entry, "VALUE.ARRAY"))
         return false;         return false;
  
     //ATTN: P1 KS KSTESTNULL - Need to relook at this one.  
     if (entry.type == XmlEntry::EMPTY_TAG)  
         return true;  
   
     if (entry.type != XmlEntry::EMPTY_TAG)     if (entry.type != XmlEntry::EMPTY_TAG)
     {     {
         // For each VALUE element:         // For each VALUE element:
Line 1407 
Line 2022 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Uint32 XmlReader::getFlavor(  CIMFlavor XmlReader::getFlavor(
     XmlEntry& entry,     XmlEntry& entry,
     Uint32 lineNumber,     Uint32 lineNumber,
     const char* tagName)     const char* tagName)
Line 1434 
Line 2049 
  
     // Start with CIMFlavor::NONE.  Defaults are specified in the     // Start with CIMFlavor::NONE.  Defaults are specified in the
     // getCimBooleanAttribute() calls above.     // getCimBooleanAttribute() calls above.
     Uint32 flavor = CIMFlavor::NONE;      CIMFlavor flavor = CIMFlavor (CIMFlavor::NONE);
  
     if (overridable)     if (overridable)
         flavor |= CIMFlavor::OVERRIDABLE;          flavor.addFlavor (CIMFlavor::OVERRIDABLE);
         else         else
                 flavor |= CIMFlavor::DISABLEOVERRIDE;          flavor.addFlavor (CIMFlavor::DISABLEOVERRIDE);
  
     if (toSubClass)     if (toSubClass)
         flavor |= CIMFlavor::TOSUBCLASS;          flavor.addFlavor (CIMFlavor::TOSUBCLASS);
         else         else
                 flavor |= CIMFlavor::RESTRICTED;          flavor.addFlavor (CIMFlavor::RESTRICTED);
  
     if (toInstance)     if (toInstance)
         flavor |= CIMFlavor::TOINSTANCE;          flavor.addFlavor (CIMFlavor::TOINSTANCE);
  
     if (translatable)     if (translatable)
         flavor |= CIMFlavor::TRANSLATABLE;          flavor.addFlavor (CIMFlavor::TRANSLATABLE);
  
     return flavor;     return flavor;
 } }
Line 1472 
Line 2087 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Uint32 XmlReader::getOptionalScope(XmlParser& parser)  CIMScope XmlReader::getOptionalScope(XmlParser& parser)
 { {
     XmlEntry entry;     XmlEntry entry;
       CIMScope scope;
  
     if (!parser.next(entry))     if (!parser.next(entry))
         return false;          return scope;    // No SCOPE element found; return the empty scope
  
     Boolean isEmptyTag = entry.type == XmlEntry::EMPTY_TAG;     Boolean isEmptyTag = entry.type == XmlEntry::EMPTY_TAG;
  
Line 1485 
Line 2101 
         entry.type != XmlEntry::START_TAG) ||         entry.type != XmlEntry::START_TAG) ||
         strcmp(entry.text, "SCOPE") != 0)         strcmp(entry.text, "SCOPE") != 0)
     {     {
           // No SCOPE element found; return the empty scope
         parser.putBack(entry);         parser.putBack(entry);
         return 0;          return scope;
     }     }
  
     Uint32 line = parser.getLine();     Uint32 line = parser.getLine();
     Uint32 scope = 0;  
  
     if (getCimBooleanAttribute(line, entry, "SCOPE", "CLASS", false, false))     if (getCimBooleanAttribute(line, entry, "SCOPE", "CLASS", false, false))
         scope |= CIMScope::CLASS;          scope.addScope (CIMScope::CLASS);
  
     if (getCimBooleanAttribute(     if (getCimBooleanAttribute(
         line, entry, "SCOPE", "ASSOCIATION", false, false))         line, entry, "SCOPE", "ASSOCIATION", false, false))
         scope |= CIMScope::ASSOCIATION;          scope.addScope (CIMScope::ASSOCIATION);
  
     if (getCimBooleanAttribute(     if (getCimBooleanAttribute(
         line, entry, "SCOPE", "REFERENCE", false, false))         line, entry, "SCOPE", "REFERENCE", false, false))
         scope |= CIMScope::REFERENCE;          scope.addScope (CIMScope::REFERENCE);
  
     if (getCimBooleanAttribute(line, entry, "SCOPE", "PROPERTY", false, false))     if (getCimBooleanAttribute(line, entry, "SCOPE", "PROPERTY", false, false))
         scope |= CIMScope::PROPERTY;          scope.addScope (CIMScope::PROPERTY);
  
     if (getCimBooleanAttribute(line, entry, "SCOPE", "METHOD", false, false))     if (getCimBooleanAttribute(line, entry, "SCOPE", "METHOD", false, false))
         scope |= CIMScope::METHOD;          scope.addScope (CIMScope::METHOD);
  
     if (getCimBooleanAttribute(line, entry, "SCOPE", "PARAMETER", false, false))     if (getCimBooleanAttribute(line, entry, "SCOPE", "PARAMETER", false, false))
         scope |= CIMScope::PARAMETER;          scope.addScope (CIMScope::PARAMETER);
  
     if (getCimBooleanAttribute(line, entry, "SCOPE", "INDICATION",false, false))     if (getCimBooleanAttribute(line, entry, "SCOPE", "INDICATION",false, false))
         scope |= CIMScope::INDICATION;          scope.addScope (CIMScope::INDICATION);
  
     if (!isEmptyTag)     if (!isEmptyTag)
         expectEndTag(parser, "SCOPE");         expectEndTag(parser, "SCOPE");
Line 1525 
Line 2141 
 // //
 // getQualifierElement() // getQualifierElement()
 // //
 //     <!ELEMENT QUALIFIER (VALUE|VALUE.ARRAY)>  //     <!ELEMENT QUALIFIER (VALUE|VALUE.ARRAY)?>
 //     <!ATTLIST QUALIFIER //     <!ATTLIST QUALIFIER
 //         %CIMName; //         %CIMName;
 //         %CIMType; #REQUIRED //         %CIMType; #REQUIRED
Line 1541 
Line 2157 
     // Get QUALIFIER element:     // Get QUALIFIER element:
  
     XmlEntry entry;     XmlEntry entry;
     if (!testStartTag(parser, entry, "QUALIFIER"))      if (!testStartTagOrEmptyTag(parser, entry, "QUALIFIER"))
         return false;         return false;
  
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
     // 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 1559 
Line 2178 
  
     // Get flavor oriented attributes:     // Get flavor oriented attributes:
  
     Uint32 flavor = getFlavor(entry, parser.getLine(), "QUALIFIER");      CIMFlavor flavor = getFlavor(entry, parser.getLine(), "QUALIFIER");
  
     // Get VALUE or VALUE.ARRAY element:     // Get VALUE or VALUE.ARRAY element:
  
     // ATTN: KS P1 4 March 2002 - Requires either value or array element or  
     // generates exception.  Correct for spec but means no NULL values on qualifier  
     // values. Alternative is to set NULL value and continue  
   
     CIMValue value;     CIMValue value;
  
       if (empty)
       {
           value.setNullValue(type, false);
       }
       else
       {
     if (!getValueElement(parser, type, value) &&     if (!getValueElement(parser, type, value) &&
         !getValueArrayElement(parser, type, value))         !getValueArrayElement(parser, type, value))
     {     {
         throw XmlSemanticError(parser.getLine(),              value.setNullValue(type, false);
             "Expected VALUE or VALUE.ARRAY element");  
     }     }
  
     // Expect </QUALIFIER>:     // Expect </QUALIFIER>:
  
     expectEndTag(parser, "QUALIFIER");     expectEndTag(parser, "QUALIFIER");
       }
  
     // Build qualifier:     // Build qualifier:
  
Line 1603 
Line 2224 
         {         {
             container.addQualifier(qualifier);             container.addQualifier(qualifier);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate qualifier");  
             // l10n
   
             // throw XmlSemanticError(parser.getLine(), "duplicate qualifier");
   
             MessageLoaderParms mlParms("Common.XmlReader.DUPLICATE_QUALIFIER",
                                        "duplicate qualifier");
   
             throw XmlSemanticError(parser.getLine(), mlParms);
         }         }
     }     }
 } }
Line 1619 
Line 2248 
 //         %CIMName; //         %CIMName;
 //         %ClassOrigin; //         %ClassOrigin;
 //         %Propagated; //         %Propagated;
   //         %EmbeddedObject; #IMPLIED
 //         %CIMType; #REQUIRED> //         %CIMType; #REQUIRED>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1634 
Line 2264 
  
     // 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:
  
     String classOrigin =      CIMName classOrigin =
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");
  
     // Get PROPERTY.PROPAGATED     // Get PROPERTY.PROPAGATED
Line 1646 
Line 2276 
     Boolean propagated = getCimBooleanAttribute(     Boolean propagated = getCimBooleanAttribute(
         parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false);         parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false);
  
       // Get PROPERTY.EMBEDDEDOBJECT attribute:
   
       String embeddedObject = getEmbeddedObjectAttribute(
           parser.getLine(), entry, "PROPERTY");
   
     // 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
     // ATTN: KS P1 change to use the correct constructor  
  
     CIMValue value;      CIMValue value(type, false);
     value.setNullValue(type, false);      property = CIMProperty(name, value, 0, CIMName(), classOrigin, propagated);
     property = CIMProperty(  
         name, value, 0, String(), classOrigin, propagated);  
  
     if (!empty)     if (!empty)
     {     {
         // Get qualifiers:              // Get qualifiers. We need to do this before checking for the property as an
           // embedded object, because we need to also check for the EmbeddedObject qualifier.
         getQualifierElements(parser, property);         getQualifierElements(parser, property);
       }
   
       Boolean embeddedObjectQualifierValue = false;
       Uint32 ix = property.findQualifier(CIMName("EmbeddedObject"));
       if (ix != PEG_NOT_FOUND)
       {
           property.getQualifier(ix).getValue().get(embeddedObjectQualifierValue);
       }
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       String embeddedInstanceQualifierValue;
       ix = property.findQualifier(CIMName("EmbeddedInstance"));
       if (ix != PEG_NOT_FOUND)
       {
           property.getQualifier(ix).getValue().get(embeddedInstanceQualifierValue);
       }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       // If the EMBEDDEDOBJECT attribute is present with value "object"
       // or the EmbeddedObject qualifier exists on this property with value "true"
       // then
       //     Convert the EmbeddedObject-encoded string into a CIMObject
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       Boolean isEmbeddedObject = String::equal(embeddedObject, "object") ||
         embeddedObjectQualifierValue;
       Boolean isEmbeddedInstance = String::equal(embeddedObject, "instance") ||
         embeddedInstanceQualifierValue.size() > 0;
       if (isEmbeddedObject || isEmbeddedInstance)
       {
           // The EMBEDDEDOBJECT attribute is only valid on Properties of type string
           if (type == CIMTYPE_STRING)
           {
               if(isEmbeddedObject)
                 type = CIMTYPE_OBJECT;
               else
                 type = CIMTYPE_INSTANCE;
               CIMValue new_value(type, false);
               CIMProperty new_property = CIMProperty(name, new_value, 0, CIMName(), classOrigin, propagated);
   
               // Copy the qualifiers from the String property to the CIMObject property.
               for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix)
               {
                   // All properties are copied, including the EmbeddedObject qualifier.
                   // This way we don't have to keep track to know that the EmbeddedObject
                   // qualifier needs to be added back during the encode step.
                   new_property.addQualifier(property.getQualifier(ix));
               }
   
               value = new_value;
               property = new_property;
           }
           else
           {
               // Error -- throw exception
               // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
               // l10n
   
               // throw XmlValidationError(parser.getLine(),
               //   "expected string type");
   
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
               throw XmlValidationError(parser.getLine(), mlParms);
           }
       }
   #else
       if (String::equal(embeddedObject, "object") || embeddedObjectQualifierValue)
       {
           // The EMBEDDEDOBJECT attribute is only valid on Properties of type string
           if (type == CIMTYPE_STRING)
           {
               type = CIMTYPE_OBJECT;
               CIMValue new_value(type, false);
               CIMProperty new_property = CIMProperty(name, new_value, 0, CIMName(), classOrigin, propagated);
   
               // Copy the qualifiers from the String property to the CIMObject property.
               for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix)
               {
                   // All properties are copied, including the EmbeddedObject qualifier.
                   // This way we don't have to keep track to know that the EmbeddedObject
                   // qualifier needs to be added back during the encode step.
                   new_property.addQualifier(property.getQualifier(ix));
               }
   
               value = new_value;
               property = new_property;
           }
           else
           {
               // Error -- throw exception
               // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
               // l10n
  
         // Get value:  Insert value if getValueElement exists (returns True)              // throw XmlValidationError(parser.getLine(),
               //   "expected string type");
  
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
               throw XmlValidationError(parser.getLine(), mlParms);
           }
       }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       // Continue on to get property value, if not empty.
       if (!empty)
       {
         if (getValueElement(parser, type, value))         if (getValueElement(parser, type, value))
             property.setValue(value);             property.setValue(value);
   
         expectEndTag(parser, "PROPERTY");         expectEndTag(parser, "PROPERTY");
     }     }
  
Line 1701 
Line 2437 
  
     if (!stringToUnsignedInteger(tmp, arraySize) || arraySize == 0)     if (!stringToUnsignedInteger(tmp, arraySize) || arraySize == 0)
     {     {
         // l10n
   
         // char message[128];
         // sprintf(message, "Illegal value for %s.%s", tagName, "ARRAYSIZE");
         // throw XmlSemanticError(lineNumber, message);
   
         char message[128];         char message[128];
         sprintf(message, "Illegal value for %s.%s", tagName, "ARRAYSIZE");        sprintf(message, "%s.%s", tagName, "ARRAYSIZE");
         throw XmlSemanticError(lineNumber, message);  
         MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE",
                                    "Illegal value for $0",
                                    message);
   
         throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     value = Uint32(arraySize);     value = Uint32(arraySize);
Line 1720 
Line 2467 
 //             %CIMType; #REQUIRED //             %CIMType; #REQUIRED
 //             %ArraySize; //             %ArraySize;
 //             %ClassOrigin; //             %ClassOrigin;
 //             %Propagated;>  //             %Propagated;
   //             %EmbeddedObject; #IMPLIED>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
Line 1739 
Line 2487 
  
     // 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 1753 
Line 2502 
  
     // Get PROPERTY.CLASSORIGIN attribute:     // Get PROPERTY.CLASSORIGIN attribute:
  
     String classOrigin      CIMName classOrigin = getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.ARRAY");
         = getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.ARRAY");  
  
     // Get PROPERTY.ARRAY.PROPAGATED     // Get PROPERTY.ARRAY.PROPAGATED
  
     Boolean propagated = getCimBooleanAttribute(      Boolean propagated = getCimBooleanAttribute(parser.getLine()
         parser.getLine(), entry, "PROPERTY.ARRAY", "PROPAGATED", false, false);                                                  ,entry
                                                   ,"PROPERTY.ARRAY"
                                                   ,"PROPAGATED"
                                                   ,false
                                                   ,false);
   
       // Get PROPERTY.EMBEDDEDOBJECT attribute:
   
       String embeddedObject = getEmbeddedObjectAttribute(parser.getLine()
                                                          ,entry
                                                          ,"PROPERTY.ARRAY");
  
     // Create property:     // Create property:
  
     // ATTN: KS P1 4 March 2002 Change to use correct constructor.      CIMValue value(type, true, arraySize);
     // ATTN: KS P3 4 March 2002.  Why create extra value. Use same one.      property = CIMProperty(name, value, arraySize, CIMName(), classOrigin, propagated);
   
     CIMValue nullValue;  
     nullValue.setNullValue(type, true, arraySize);  
     property = CIMProperty(  
         name, nullValue, arraySize, String(), classOrigin, propagated);  
  
     if (!empty)     if (!empty)
     {     {
         // Get qualifiers:         // Get qualifiers:
   
         getQualifierElements(parser, property);         getQualifierElements(parser, property);
       }
  
         // Get value:      Boolean embeddedObjectQualifierValue = false;
       Uint32 ix = property.findQualifier(CIMName("EmbeddedObject"));
       if (ix != PEG_NOT_FOUND)
       {
           property.getQualifier(ix).getValue().get(embeddedObjectQualifierValue);
       }
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       String embeddedInstanceQualifierValue;
       ix = property.findQualifier(CIMName("EmbeddedInstance"));
       if (ix != PEG_NOT_FOUND)
       {
           property.getQualifier(ix).getValue().get(embeddedInstanceQualifierValue);
       }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       // If the EMBEDDEDOBJECT attribute is present with value "object"
       // or the EmbeddedObject qualifier exists on this property with value "true"
       // then
       //     Convert the EmbeddedObject-encoded string into a CIMObject
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       Boolean isEmbeddedObject = String::equal(embeddedObject, "object") ||
         embeddedObjectQualifierValue;
       Boolean isEmbeddedInstance = String::equal(embeddedObject, "instance") ||
         embeddedInstanceQualifierValue.size() > 0;
       if (isEmbeddedObject || isEmbeddedInstance)
       {
           // The EMBEDDEDOBJECT attribute is only valid on Properties of type string
           if (type == CIMTYPE_STRING)
           {
               if(isEmbeddedObject)
                 type = CIMTYPE_OBJECT;
               else
                 type = CIMTYPE_INSTANCE;
               CIMValue new_value(type, true, arraySize);
               CIMProperty new_property = CIMProperty(name, new_value, arraySize, CIMName(), classOrigin, propagated);
  
         // ATTN: KS P1 4 March 2002. Does not set array type into value.              // Copy the qualifiers from the String property to the CIMObject property.
         // ATTN: Thus, if it returns false, the CIMValue is nothing.              for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix)
         CIMValue value;              {
                   // All properties are copied, including the EmbeddedObject qualifier.
                   // This way we don't have to keep track to know that the EmbeddedObject
                   // qualifier needs to be added back during the encode step.
                   new_property.addQualifier(property.getQualifier(ix));
               }
   
               value = new_value;
               property = new_property;
           }
           else
           {
               // Error -- throw exception
               // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
               // l10n
   
               // throw XmlValidationError(parser.getLine(),
               //   "expected string type");
   
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
               throw XmlValidationError(parser.getLine(), mlParms);
           }
       }
   #else
       if (String::equal(embeddedObject, "object") || embeddedObjectQualifierValue)
       {
           // The EMBEDDEDOBJECT attribute is only valid on Properties of type string
           if (type == CIMTYPE_STRING)
           {
               type = CIMTYPE_OBJECT;
               CIMValue new_value(type, true, arraySize);
               CIMProperty new_property = CIMProperty(name, new_value, arraySize, CIMName(), classOrigin, propagated);
   
               // Copy the qualifiers from the String property to the CIMObject property.
               for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix)
               {
                   // All properties are copied, including the EmbeddedObject qualifier.
                   // This way we don't have to keep track to know that the EmbeddedObject
                   // qualifier needs to be added back during the encode step.
                   new_property.addQualifier(property.getQualifier(ix));
               }
   
               value = new_value;
               property = new_property;
           }
           else
           {
               // Error -- throw exception
               // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
               // l10n
   
               // throw XmlValidationError(parser.getLine(),
               //   "expected string type");
   
               MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                "The EMBEDDEDOBJECT attribute is only valid on string types.");
  
               throw XmlValidationError(parser.getLine(), mlParms);
           }
       }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       // Continue on to get property array value, if not empty.
       // Else not an embedded object, if not empty, get the property array value.
       if (!empty)
       {
         if (getValueArrayElement(parser, type, value))         if (getValueArrayElement(parser, type, value))
         {         {
             if (arraySize && arraySize != value.getArraySize())             if (arraySize && arraySize != value.getArraySize())
             {             {
                 throw XmlSemanticError(parser.getLine(),  
                 // l10n
   
                 // throw XmlSemanticError(parser.getLine(),
                 //   "ARRAYSIZE attribute and value-array size are different");
   
                 MessageLoaderParms mlParms("Common.XmlReader.ARRAY_SIZE_DIFFERENT",
                     "ARRAYSIZE attribute and value-array size are different");                     "ARRAYSIZE attribute and value-array size are different");
   
                 throw XmlSemanticError(parser.getLine(), mlParms);
             }             }
  
             property.setValue(value);             property.setValue(value);
         }         }
   
         expectEndTag(parser, "PROPERTY.ARRAY");         expectEndTag(parser, "PROPERTY.ARRAY");
     }     }
  
Line 1816 
Line 2676 
  
     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 = String(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)
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //               "expected content of HOST element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CONTENT_ELEMENT",
             "expected content of HOST element");             "expected content of HOST element");
     }  
  
     host = entry.text;        throw XmlValidationError(parser.getLine(), mlParms);
   
       }
  
       host = String(entry.text);
   #endif
     expectEndTag(parser, "HOST");     expectEndTag(parser, "HOST");
     return true;     return true;
 } }
Line 1840 
Line 2725 
  
 Boolean XmlReader::getNameSpaceElement( Boolean XmlReader::getNameSpaceElement(
     XmlParser& parser,     XmlParser& parser,
     String& nameSpaceComponent)      CIMName& nameSpaceComponent)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1875 
Line 2760 
     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())
     {     {
         throw XmlValidationError(parser.getLine(),  
             "Expected one or more NAMESPACE elements within "        // l10n
             "LOCALNAMESPACEPATH element");  
         // throw XmlValidationError(parser.getLine(),
         //   "Expected one or more NAMESPACE elements within "
         //   "LOCALNAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_NAMESPACE_ELEMENTS",
                                    "Expected one or more NAMESPACE elements within LOCALNAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
   
     }     }
  
     expectEndTag(parser, "LOCALNAMESPACEPATH");     expectEndTag(parser, "LOCALNAMESPACEPATH");
Line 1917 
Line 2812 
     if (!testStartTag(parser, entry, "NAMESPACEPATH"))     if (!testStartTag(parser, entry, "NAMESPACEPATH"))
         return false;         return false;
  
     if (!getHostElement(parser, host))      if (!getHostElement(parser, host)) {
         throw XmlValidationError(parser.getLine(), "expected HOST element");  
         // l10n
   
         // throw XmlValidationError(parser.getLine(), "expected HOST element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_HOST_ELEMENT",
                                    "expected HOST element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     if (!getLocalNameSpacePathElement(parser, nameSpace))     if (!getLocalNameSpacePathElement(parser, nameSpace))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected LOCALNAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_LOCALNAMESPACEPATH_ELEMENT",
             "expected LOCALNAMESPACEPATH element");             "expected LOCALNAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     expectEndTag(parser, "NAMESPACEPATH");     expectEndTag(parser, "NAMESPACEPATH");
Line 1942 
Line 2854 
  
 Boolean XmlReader::getClassNameElement( Boolean XmlReader::getClassNameElement(
     XmlParser& parser,     XmlParser& parser,
     String& className,      CIMName& className,
     Boolean required)     Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
Line 1951 
Line 2863 
     {     {
         if (required)         if (required)
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             // "expected CLASSNAME element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASSNAME_ELEMENT",
                 "expected CLASSNAME element");                 "expected CLASSNAME element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
         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 1977 
Line 2896 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 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 1985 
Line 2904 
     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];
   
       // sprintf(buffer,
       // "Illegal value for %s.VALUETYPE attribute; "
       // "CIMValue must be one of \"string\", \"boolean\", or \"numeric\"",
       // elementName);
   
       // throw XmlSemanticError(lineNumber, buffer);
   
  
     char buffer[MESSAGE_SIZE];     char buffer[MESSAGE_SIZE];
       sprintf(buffer, "%s.VALUETYPE", elementName);
  
     sprintf(buffer,      MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_CIMVALUE_ATTRIBUTE",
         "Illegal value for %s.VALUETYPE attribute; "                                 "Illegal value for $0 attribute; CIMValue must be one of \"string\", \"boolean\", or \"numeric\"", buffer);
         "CIMValue must be one of \"string\", \"boolean\", or \"numeric\"",  
         elementName);  
  
     throw XmlSemanticError(lineNumber, buffer);      throw XmlSemanticError(lineNumber, mlParms);
     return KeyBinding::BOOLEAN;  
       return CIMKeyBinding::BOOLEAN;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2017 
Line 2946 
  
 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 2037 
Line 2966 
             throw XmlException(XmlException::UNCLOSED_TAGS, parser.getLine());             throw XmlException(XmlException::UNCLOSED_TAGS, parser.getLine());
  
         if (entry.type == XmlEntry::CONTENT)         if (entry.type == XmlEntry::CONTENT)
             value = entry.text;              value = String(entry.text);
         else         else
             parser.putBack(entry);             parser.putBack(entry);
  
Line 2059 
Line 2988 
  
 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 2072 
Line 3001 
  
     if (!getKeyValueElement(parser, type, value))     if (!getKeyValueElement(parser, type, value))
     {     {
         CIMReference reference;          CIMObjectPath reference;
  
         if (!getValueReferenceElement(parser, reference))         if (!getValueReferenceElement(parser, reference))
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //          "Expected KEYVALUE or VALUE.REFERENCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_KEYVALUE_OR_REFERENCE_ELEMENT",
                       "Expected KEYVALUE or VALUE.REFERENCE element");                       "Expected KEYVALUE or VALUE.REFERENCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
  
         type = KeyBinding::REFERENCE;          type = CIMKeyBinding::REFERENCE;
         value = reference.toString();         value = reference.toString();
     }     }
  
Line 2104 
Line 3041 
 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 2123 
Line 3060 
         return true;         return true;
     }     }
  
     String name;      CIMName name;
     KeyBinding::Type type;      CIMKeyBinding::Type type;
     String value;     String value;
     CIMReference 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 2153 
Line 3090 
  
 Boolean XmlReader::getInstanceNameElement( Boolean XmlReader::getInstanceNameElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& 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;
  
     instanceName.set(String(), String(), className, keyBindings);      instanceName.set(String(), CIMNamespaceName(), className, keyBindings);
     return true;     return true;
 } }
  
Line 2175 
Line 3112 
  
 Boolean XmlReader::getInstancePathElement( Boolean XmlReader::getInstancePathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2187 
Line 3124 
  
     if (!getNameSpacePathElement(parser, host, nameSpace))     if (!getNameSpacePathElement(parser, host, nameSpace))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected NAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_NAMESPACEPATH_ELEMENT",
             "expected NAMESPACEPATH element");             "expected NAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     String className;     String className;
     Array<KeyBinding> keyBindings;      Array<CIMKeyBinding> keyBindings;
  
     if (!getInstanceNameElement(parser, className, keyBindings))     if (!getInstanceNameElement(parser, className, keyBindings))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCENAME element");
   
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCENAME_ELEMENT",
             "expected INSTANCENAME element");             "expected INSTANCENAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     reference.set(host, nameSpace, className, keyBindings);     reference.set(host, nameSpace, className, keyBindings);
Line 2216 
Line 3172 
  
 Boolean XmlReader::getLocalInstancePathElement( Boolean XmlReader::getLocalInstancePathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2227 
Line 3183 
  
     if (!getLocalNameSpacePathElement(parser, nameSpace))     if (!getLocalNameSpacePathElement(parser, nameSpace))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected LOCALNAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_LOCALNAMESPACEPATH_ELEMENT",
             "expected LOCALNAMESPACEPATH element");             "expected LOCALNAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     String className;     String className;
     Array<KeyBinding> keyBindings;      Array<CIMKeyBinding> keyBindings;
  
     if (!getInstanceNameElement(parser, className, keyBindings))     if (!getInstanceNameElement(parser, className, keyBindings))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCENAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCENAME_ELEMENT",
             "expected INSTANCENAME element");             "expected INSTANCENAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     reference.set(String(), nameSpace, className, keyBindings);     reference.set(String(), nameSpace, className, keyBindings);
Line 2256 
Line 3230 
  
 Boolean XmlReader::getClassPathElement( Boolean XmlReader::getClassPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2268 
Line 3242 
  
     if (!getNameSpacePathElement(parser, host, nameSpace))     if (!getNameSpacePathElement(parser, host, nameSpace))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //    "expected NAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_NAMESPACEPATH_ELEMENT",
             "expected NAMESPACEPATH element");             "expected NAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     String className;      CIMName className;
  
     if (!getClassNameElement(parser, className))     if (!getClassNameElement(parser, className))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected CLASSNAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASSNAME_ELEMENT",
             "expected CLASSNAME element");             "expected CLASSNAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     reference.set(host, nameSpace, className);     reference.set(host, nameSpace, className);
Line 2296 
Line 3288 
  
 Boolean XmlReader::getLocalClassPathElement( Boolean XmlReader::getLocalClassPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2307 
Line 3299 
  
     if (!getLocalNameSpacePathElement(parser, nameSpace))     if (!getLocalNameSpacePathElement(parser, nameSpace))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //    "expected LOCALNAMESPACEPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_LOCALNAMESPACEPATH_ELEMENT",
             "expected LOCALNAMESPACEPATH element");             "expected LOCALNAMESPACEPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     String className;      CIMName className;
  
     if (!getClassNameElement(parser, className))     if (!getClassNameElement(parser, className))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected CLASSNAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASSNAME_ELEMENT",
             "expected CLASSNAME element");             "expected CLASSNAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     reference.set(String(), nameSpace, className);     reference.set(String(), nameSpace, className);
Line 2338 
Line 3348 
  
 Boolean XmlReader::getValueReferenceElement( Boolean XmlReader::getValueReferenceElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2351 
Line 3361 
     if (entry.type != XmlEntry::START_TAG &&     if (entry.type != XmlEntry::START_TAG &&
         entry.type != XmlEntry::EMPTY_TAG)         entry.type != XmlEntry::EMPTY_TAG)
     {     {
         throw XmlValidationError(parser.getLine(),  
             "Expected one of the following start tags: "        // l10n
             "CLASSPATH, LOCALCLASSPATH, CLASSNAME, INSTANCEPATH, "  
             "LOCALINSTANCEPATH, INSTANCENAME");        // throw XmlValidationError(parser.getLine(),
         //   "Expected one of the following start tags: "
         //    "CLASSPATH, LOCALCLASSPATH, CLASSNAME, INSTANCEPATH, "
         //    "LOCALINSTANCEPATH, INSTANCENAME");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_START_TAGS",
                                    "Expected one of the following start tags: CLASSPATH, LOCALCLASSPATH, CLASSNAME, INSTANCEPATH, LOCALINSTANCEPATH, INSTANCENAME");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     if (strcmp(entry.text, "CLASSPATH") == 0)     if (strcmp(entry.text, "CLASSPATH") == 0)
Line 2370 
Line 3389 
     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(), String(), className);          reference.set(String(), CIMNamespaceName(), className);
     }     }
     else if (strcmp(entry.text, "INSTANCEPATH") == 0)     else if (strcmp(entry.text, "INSTANCEPATH") == 0)
     {     {
Line 2388 
Line 3407 
     {     {
         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(), String(), className, keyBindings);          reference.set(String(), CIMNamespaceName(), className, keyBindings);
     }     }
  
     expectEndTag(parser, "VALUE.REFERENCE");     expectEndTag(parser, "VALUE.REFERENCE");
Line 2410 
Line 3429 
     CIMValue& value)     CIMValue& value)
 { {
     XmlEntry entry;     XmlEntry entry;
     Array<CIMReference> referenceArray;      Array<CIMObjectPath> referenceArray;
     CIMReference reference;      CIMObjectPath reference;
  
     value.clear();     value.clear();
  
Line 2462 
Line 3481 
  
     // 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:
  
     String referenceClass = getReferenceClassAttribute(      CIMName referenceClass = getReferenceClassAttribute(
         parser.getLine(), entry, "PROPERTY.REFERENCE");         parser.getLine(), entry, "PROPERTY.REFERENCE");
  
     // Get PROPERTY.CLASSORIGIN attribute:     // Get PROPERTY.CLASSORIGIN attribute:
  
     String classOrigin =      CIMName classOrigin =
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.REFERENCE");         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.REFERENCE");
  
     // Get PROPERTY.PROPAGATED     // Get PROPERTY.PROPAGATED
Line 2482 
Line 3501 
  
     // Create property:     // Create property:
  
     CIMValue value;      CIMValue value = CIMValue(CIMTYPE_REFERENCE, false, 0);
     value.set(CIMReference());  //    value.set(CIMObjectPath());
     property = CIMProperty(     property = CIMProperty(
         name, value, 0, referenceClass, classOrigin, propagated);         name, value, 0, referenceClass, classOrigin, propagated);
  
Line 2491 
Line 3510 
     {     {
         getQualifierElements(parser, property);         getQualifierElements(parser, property);
  
         CIMReference reference;          CIMObjectPath reference;
  
         if (getValueReferenceElement(parser, reference))         if (getValueReferenceElement(parser, reference))
             property.setValue(reference);             property.setValue(reference);
Line 2521 
Line 3540 
         {         {
             container.addProperty(property);             container.addProperty(property);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate property");  
             // l10n
   
             // throw XmlSemanticError(parser.getLine(), "duplicate property");
   
             MessageLoaderParms mlParms("Common.XmlReader.DUPLICATE_PROPERTY",
                                        "duplicate property");
   
             throw XmlSemanticError(parser.getLine(), mlParms);
         }         }
     }     }
 } }
Line 2552 
Line 3579 
  
     // 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 2597 
Line 3625 
  
     // 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 2647 
Line 3676 
  
     // 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:
  
     String referenceClass = getReferenceClassAttribute(      CIMName referenceClass = getReferenceClassAttribute(
         parser.getLine(), entry, "PARAMETER.REFERENCE");         parser.getLine(), entry, "PARAMETER.REFERENCE");
  
     // Create parameter:     // Create parameter:
  
     parameter = CIMParameter(name, CIMType::REFERENCE, false, 0, referenceClass);      parameter = CIMParameter(name, CIMTYPE_REFERENCE, false, 0, referenceClass);
  
     if (!empty)     if (!empty)
     {     {
Line 2693 
Line 3722 
  
     // 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:
  
     String referenceClass = getReferenceClassAttribute(      CIMName referenceClass = getReferenceClassAttribute(
         parser.getLine(), entry, "PARAMETER.REFARRAY");         parser.getLine(), entry, "PARAMETER.REFARRAY");
  
     // Get PARAMETER.ARRAYSIZE attribute:     // Get PARAMETER.ARRAYSIZE attribute:
Line 2709 
Line 3738 
  
     // Create parameter:     // Create parameter:
  
     parameter = CIMParameter(name, CIMType::REFERENCE, true, arraySize,      parameter = CIMParameter(name, CIMTYPE_REFERENCE, true, arraySize,
                              referenceClass);                              referenceClass);
  
     if (!empty)     if (!empty)
Line 2741 
Line 3770 
         {         {
             container.addParameter(parameter);             container.addParameter(parameter);
         }         }
         catch (AlreadyExists&)          catch (AlreadyExistsException&)
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate parameter");  
             // l10n
   
             // throw XmlSemanticError(parser.getLine(), "duplicate parameter");
   
             MessageLoaderParms mlParms("Common.XmlReader.DUPLICATE_PARAMETER",
                                        "duplicate parameter");
   
             throw XmlSemanticError(parser.getLine(), mlParms);
         }         }
     }     }
 } }
Line 2775 
Line 3812 
  
     // 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 2797 
Line 3834 
  
     // Get flavor oriented attributes:     // Get flavor oriented attributes:
  
     Uint32 flavor = getFlavor(entry,parser.getLine(), "QUALIFIER.DECLARATION");      CIMFlavor flavor = getFlavor (entry, parser.getLine (),
           "QUALIFIER.DECLARATION");
  
     // No need to look for interior elements if empty tag:     // No need to look for interior elements if empty tag:
  
     Uint32 scope = CIMScope::NONE;      CIMScope scope = CIMScope ();
     CIMValue value;     CIMValue value;
       Boolean gotValue = false;
  
     if (!empty)     if (!empty)
     {     {
Line 2816 
Line 3855 
         {         {
             if (!isArray)             if (!isArray)
             {             {
                 throw XmlSemanticError(parser.getLine(),  
                     "VALUE.ARRAY element encountered without "                // l10n
                     "ISARRAY attribute");  
                 // throw XmlSemanticError(parser.getLine(),
                 //    "VALUE.ARRAY element encountered without "
                 //    "ISARRAY attribute");
   
                 MessageLoaderParms mlParms("Common.XmlReader.ARRAY_WITHOUT_ISARRAY",
                                            "VALUE.ARRAY element encountered without ISARRAY attribute");
   
                 throw XmlSemanticError(parser.getLine(), mlParms);
             }             }
  
             if (arraySize && arraySize != value.getArraySize())             if (arraySize && arraySize != value.getArraySize())
             {             {
                 throw XmlSemanticError(parser.getLine(),  
                     "VALUE.ARRAY size is not the same as "                // l10n
                     "ARRAYSIZE attribute");  
                 // throw XmlSemanticError(parser.getLine(),
                 //   "VALUE.ARRAY size is not the same as "
                 //    "ARRAYSIZE attribute");
   
                 MessageLoaderParms mlParms("Common.XmlReader.ARRAY_SIZE_NOT_SAME",
                                            "VALUE.ARRAY size is not the same as ARRAYSIZE attribute");
   
                 throw XmlSemanticError(parser.getLine(), mlParms);
             }             }
   
               gotValue = true;
         }         }
         else if (getValueElement(parser, type, value))         else if (getValueElement(parser, type, value))
         {         {
             if (isArray)             if (isArray)
             {             {
                 throw XmlSemanticError(parser.getLine(),  
                 // l10n
   
                 // throw XmlSemanticError(parser.getLine(),
                 //    "ISARRAY attribute used but VALUE element encountered");
   
                 MessageLoaderParms mlParms("Common.XmlReader.ARRAY_ATTRIBUTE_DIFFERENT",
                     "ISARRAY attribute used but VALUE element encountered");                     "ISARRAY attribute used but VALUE element encountered");
   
                 throw XmlSemanticError(parser.getLine(), mlParms);
             }             }
   
               gotValue = true;
         }         }
  
         // Now get the closing tag:         // Now get the closing tag:
Line 2842 
Line 3909 
         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 2877 
Line 3944 
  
     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");
  
     String classOrigin =      CIMName classOrigin =
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");
  
     Boolean propagated = getCimBooleanAttribute(     Boolean propagated = getCimBooleanAttribute(
Line 2916 
Line 3984 
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "CLASS"))      if (!testStartTagOrEmptyTag(parser, entry, "CLASS"))
         return false;         return false;
  
     String name = getCimNameAttribute(parser.getLine(), entry, "CLASS");      CIMName name = getCimNameAttribute(parser.getLine(), entry, "CLASS");
  
     String superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");      CIMName superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");
  
     cimClass = CIMClass(name, superClass);     cimClass = CIMClass(name, superClass);
  
           if(entry.type != XmlEntry::EMPTY_TAG)
           {
   
     // Get QUALIFIER elements:     // Get QUALIFIER elements:
  
     getQualifierElements(parser, cimClass);     getQualifierElements(parser, cimClass);
Line 2943 
Line 4014 
     // Get CLASS end tag:     // Get CLASS end tag:
  
     expectEndTag(parser, "CLASS");     expectEndTag(parser, "CLASS");
           }
  
     return true;     return true;
 } }
Line 2963 
Line 4035 
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "INSTANCE"))      if (!testStartTagOrEmptyTag(parser, entry, "INSTANCE"))
         return false;         return false;
  
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
     String className = getClassNameAttribute(     String className = getClassNameAttribute(
         parser.getLine(), entry, "INSTANCE");         parser.getLine(), entry, "INSTANCE");
  
     cimInstance = CIMInstance(className);     cimInstance = CIMInstance(className);
  
       if (!empty)
       {
     // Get QUALIFIER elements:     // Get QUALIFIER elements:
   
     getQualifierElements(parser, cimInstance);     getQualifierElements(parser, cimInstance);
  
     // Get PROPERTY elements:     // Get PROPERTY elements:
   
     GetPropertyElements(parser, cimInstance);     GetPropertyElements(parser, cimInstance);
  
     // Get INSTANCE end tag:     // Get INSTANCE end tag:
   
     expectEndTag(parser, "INSTANCE");     expectEndTag(parser, "INSTANCE");
       }
  
     return true;     return true;
 } }
Line 2995 
Line 4069 
  
 Boolean XmlReader::getNamedInstanceElement( Boolean XmlReader::getNamedInstanceElement(
     XmlParser& parser,     XmlParser& parser,
     CIMNamedInstance& namedInstance)      CIMInstance& namedInstance)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "VALUE.NAMEDINSTANCE"))     if (!testStartTag(parser, entry, "VALUE.NAMEDINSTANCE"))
         return false;         return false;
  
     CIMReference instanceName;      CIMObjectPath instanceName;
  
     // Get INSTANCENAME elements:     // Get INSTANCENAME elements:
  
     if (!getInstanceNameElement(parser, instanceName))     if (!getInstanceNameElement(parser, instanceName))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //    "expected INSTANCENAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCENAME_ELEMENT",
             "expected INSTANCENAME element");             "expected INSTANCENAME element");
     }  
  
     CIMInstance instance;        throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     // Get INSTANCE elements:     // Get INSTANCE elements:
  
     if (!getInstanceElement(parser, instance))      if (!getInstanceElement(parser, namedInstance))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCE element");
   
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
             "expected INSTANCE element");             "expected INSTANCE element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     // Get VALUE.NAMEDINSTANCE end tag:     // Get VALUE.NAMEDINSTANCE end tag:
  
     expectEndTag(parser, "VALUE.NAMEDINSTANCE");     expectEndTag(parser, "VALUE.NAMEDINSTANCE");
  
     namedInstance.set(instanceName, instance);      namedInstance.setPath (instanceName);
  
     return true;     return true;
 } }
Line 3041 
Line 4130 
 { {
     if (!getClassElement(parser, x))     if (!getClassElement(parser, x))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected CLASS element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
             "expected CLASS element");             "expected CLASS element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 3056 
Line 4153 
 { {
     if (!getInstanceElement(parser, x))     if (!getInstanceElement(parser, x))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCE element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
             "expected INSTANCE element");             "expected INSTANCE element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 3071 
Line 4176 
 { {
     if (!getQualifierDeclElement(parser, x))     if (!getQualifierDeclElement(parser, x))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected QUALIFIER.DECLARATION element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_QUALIFIER_DECLARATION_ELEMENT",
             "expected QUALIFIER.DECLARATION element");             "expected QUALIFIER.DECLARATION element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 3094 
Line 4207 
  
     // Get MESSAGE.ID:     // Get MESSAGE.ID:
  
     if (!entry.getAttributeValue("ID", id))      if (!entry.getAttributeValue("ID", id)) {
         throw XmlValidationError(parser.getLine(),  
             "Bad or missing MESSAGE.ID attribute");        // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Invalid or missing MESSAGE.ID attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.INVALID_MISSING_MESSAGE_ID_ATTRIBUTE",
                                    "Invalid or missing MESSAGE.ID attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
  
     // Get MESSAGE.PROTOCOLVERSION:     // Get MESSAGE.PROTOCOLVERSION:
  
     if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion))      if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion)) {
         throw XmlValidationError(parser.getLine(),  
             "Bad or missing MESSAGE.PROTOCOLVERSION attribute");        // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Invalid or missing MESSAGE.PROTOCOLVERSION attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.INVALID_MISSING_PROTOCOLVERSION_ATTRIBUTE",
                                    "Invalid or missing MESSAGE.PROTOCOLVERSION attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     return true;     return true;
 } }
Line 3124 
Line 4256 
  
     // Get IMETHODCALL.NAME attribute:     // Get IMETHODCALL.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),      if (!entry.getAttributeValue("NAME", name)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing IMETHODCALL.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_IMETHODCALL_ATTRIBUTE",
             "Missing IMETHODCALL.NAME attribute");             "Missing IMETHODCALL.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
   
     return true;     return true;
 } }
  
Line 3139 
Line 4282 
  
 Boolean XmlReader::getIMethodResponseStartTag( Boolean XmlReader::getIMethodResponseStartTag(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "IMETHODRESPONSE"))      if (!testStartTagOrEmptyTag(parser, entry, "IMETHODRESPONSE"))
         return false;         return false;
  
       isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
   
     // Get IMETHODRESPONSE.NAME attribute:     // Get IMETHODRESPONSE.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))      if (!entry.getAttributeValue("NAME", name)) {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing IMETHODRESPONSE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_IMETHODRESPONSE_ATTRIBUTE",
             "Missing IMETHODRESPONSE.NAME attribute");             "Missing IMETHODRESPONSE.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
   
     return true;     return true;
 } }
  
Line 3163 
Line 4319 
  
 Boolean XmlReader::getIParamValueTag( Boolean XmlReader::getIParamValueTag(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "IPARAMVALUE"))      if (!testStartTagOrEmptyTag(parser, entry, "IPARAMVALUE"))
         return false;         return false;
  
       isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
   
     // Get IPARAMVALUE.NAME attribute:     // Get IPARAMVALUE.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))      if (!entry.getAttributeValue("NAME", name)) {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing IPARAMVALUE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_IPARAMVALUE_ATTRIBUTE",
             "Missing IPARAMVALUE.NAME attribute");             "Missing IPARAMVALUE.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // rejectNullIParamValue()
   //
   //------------------------------------------------------------------------------
   
   void XmlReader::rejectNullIParamValue(
       XmlParser& parser,
       Boolean isEmptyTag,
       const char* paramName)
   {
       if (isEmptyTag)
       {
           MessageLoaderParms mlParms("Common.XmlReader.INVALID_NULL_IPARAMVALUE",
               "A null value is not valid for IPARAMVALUE \"$0\".",
               paramName);
           throw XmlValidationError(parser.getLine(), mlParms);
       }
   }
   
   //------------------------------------------------------------------------------
   //
 // getBooleanValueElement() // getBooleanValueElement()
 // //
 //     Get an elements like: "<VALUE>FALSE</VALUE>" //     Get an elements like: "<VALUE>FALSE</VALUE>"
Line 3198 
Line 4386 
     {     {
         if (required)         if (required)
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             // "Expected VALUE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                 "Expected VALUE element");                 "Expected VALUE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
         return false;         return false;
     }     }
  
     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(),  
             "Bad value for VALUE element: must be \"TRUE\" or \"FALSE\"");        // l10n
   
         // throw XmlSemanticError(parser.getLine(),
         //   "Invalid value for VALUE element: must be \"TRUE\" or \"FALSE\"");
   
         MessageLoaderParms mlParms("Common.XmlReader.INVALID_VALUE_FOR_VALUE_ELEMENT",
                                    "Invalid value for VALUE element: must be \"TRUE\" or \"FALSE\"");
   
         throw XmlSemanticError(parser.getLine(), mlParms);
       }
  
     expectEndTag(parser, "VALUE");     expectEndTag(parser, "VALUE");
  
Line 3221 
Line 4426 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getErrorElement()  //     DMTF CR Pending
 // //
 //     <!ELEMENT ERROR EMPTY>  //     <!ELEMENT ERROR (INSTANCE*)>
 //     <!ATTLIST ERROR //     <!ATTLIST ERROR
 //         CODE CDATA #REQUIRED //         CODE CDATA #REQUIRED
 //         DESCRIPTION CDATA #IMPLIED> //         DESCRIPTION CDATA #IMPLIED>
Line 3232 
Line 4437 
  
 Boolean XmlReader::getErrorElement( Boolean XmlReader::getErrorElement(
     XmlParser& parser,     XmlParser& parser,
     CIMStatusCode& code,      CIMException& cimException,
     const char*& description,  
     Boolean required)     Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "ERROR"))     if (!testStartTagOrEmptyTag(parser, entry, "ERROR"))
     {     {
         if (required)        if (required) {
             throw XmlValidationError(parser.getLine(),"Expected ERROR element");  
           // l10n
   
           // throw XmlValidationError(parser.getLine(),"Expected ERROR element");
   
           MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_ERROR_ELEMENT",
                                      "Expected ERROR element");
   
           throw XmlValidationError(parser.getLine(), mlParms);
   
         }
         return false;         return false;
     }     }
  
Line 3251 
Line 4465 
  
     Uint32 tmpCode;     Uint32 tmpCode;
  
     if (!entry.getAttributeValue("CODE", tmpCode))      if (!entry.getAttributeValue("CODE", tmpCode)) {
         throw XmlValidationError(  
             parser.getLine(), "missing ERROR.CODE attribute");  
  
     code = CIMStatusCode(tmpCode);  
         // l10n
   
         // throw XmlValidationError(
         //       parser.getLine(), "missing ERROR.CODE attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_ERROR_CODE_ATTRIBUTE",
                                    "missing ERROR.CODE attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
       }
  
     // Get ERROR.DESCRIPTION:     // Get ERROR.DESCRIPTION:
  
     description = "";      String tmpDescription;
     entry.getAttributeValue("DESCRIPTION", description);  
       entry.getAttributeValue("DESCRIPTION", tmpDescription);
  
     if (!empty)     if (!empty)
       {
           while (testStartTagOrEmptyTag(parser, entry))
           {
               skipElement(parser, entry);
           }
   
         expectEndTag(parser, "ERROR");         expectEndTag(parser, "ERROR");
       }
  
       cimException = PEGASUS_CIM_EXCEPTION(CIMStatusCode(tmpCode), tmpDescription);
     return true;     return true;
 } }
  
Line 3292 
Line 4524 
     {     {
         object = CIMObject(cimInstance);         object = CIMObject(cimInstance);
     }     }
     else if (!XmlReader::getClassElement(parser, cimClass))      else if (XmlReader::getClassElement(parser, cimClass))
     {     {
         object = CIMObject(cimClass);         object = CIMObject(cimClass);
     }     }
     else     else
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Expected INSTANCE or CLASS element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_OR_CLASS_ELEMENT",
             "Expected INSTANCE or CLASS element");             "Expected INSTANCE or CLASS element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     expectEndTag(parser, "VALUE.OBJECT");     expectEndTag(parser, "VALUE.OBJECT");
Line 3316 
Line 4557 
  
 Boolean XmlReader::getValueObjectWithPathElement( Boolean XmlReader::getValueObjectWithPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMObjectWithPath& objectWithPath)      CIMObject& objectWithPath)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "VALUE.OBJECTWITHPATH"))     if (!testStartTag(parser, entry, "VALUE.OBJECTWITHPATH"))
         return false;         return false;
  
     CIMReference reference;      CIMObjectPath reference;
     Boolean isInstance = false;     Boolean isInstance = false;
  
     if (XmlReader::getInstancePathElement(parser, reference))     if (XmlReader::getInstancePathElement(parser, reference))
         isInstance = true;         isInstance = true;
     else if (!XmlReader::getClassPathElement(parser, reference))     else if (!XmlReader::getClassPathElement(parser, reference))
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n 485
   
         // throw XmlValidationError(parser.getLine(),
         //    "Expected INSTANCEPATH or CLASSPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCEPATH_OR_CLASSPATH_ELEMENT",
             "Expected INSTANCEPATH or CLASSPATH element");             "Expected INSTANCEPATH or CLASSPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     if (isInstance)     if (isInstance)
Line 3340 
Line 4589 
  
         if (!XmlReader::getInstanceElement(parser, cimInstance))         if (!XmlReader::getInstanceElement(parser, cimInstance))
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //               "Expected INSTANCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                 "Expected INSTANCE element");                 "Expected INSTANCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
         objectWithPath.set(reference, CIMObject(cimInstance));          objectWithPath = CIMObject (cimInstance);
           objectWithPath.setPath (reference);
     }     }
     else     else
     {     {
Line 3351 
Line 4609 
  
         if (!XmlReader::getClassElement(parser, cimClass))         if (!XmlReader::getClassElement(parser, cimClass))
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             // "Expected CLASS element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
                 "Expected CLASS element");                 "Expected CLASS element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
         objectWithPath.set(reference, CIMObject(cimClass));          objectWithPath = CIMObject (cimClass);
           objectWithPath.setPath (reference);
     }     }
  
     expectEndTag(parser, "VALUE.OBJECTWITHPATH");     expectEndTag(parser, "VALUE.OBJECTWITHPATH");
Line 3372 
Line 4639 
  
 Boolean XmlReader::getValueObjectWithLocalPathElement( Boolean XmlReader::getValueObjectWithLocalPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMObjectWithPath& objectWithPath)      CIMObject& objectWithPath)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "VALUE.OBJECTWITHLOCALPATH"))     if (!testStartTag(parser, entry, "VALUE.OBJECTWITHLOCALPATH"))
         return false;         return false;
  
     CIMReference reference;      CIMObjectPath reference;
     Boolean isInstance = false;     Boolean isInstance = false;
  
     if (XmlReader::getLocalInstancePathElement(parser, reference))     if (XmlReader::getLocalInstancePathElement(parser, reference))
         isInstance = true;         isInstance = true;
     else if (!XmlReader::getLocalClassPathElement(parser, reference))     else if (!XmlReader::getLocalClassPathElement(parser, reference))
     {     {
         throw XmlValidationError(parser.getLine(),  
             "Expected LOCALINSTANCEPATH or LOCALCLASSPATH element");        // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Expected LOCALINSTANCEPATH or LOCALCLASSPATH element");
   
         //l10n updated
         MessageLoaderParms mlParms("Common.XmlConstants.MISSING_ELEMENT_LOCALPATH",
                                                                                                                   MISSING_ELEMENT_LOCALPATH);
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     if (isInstance)     if (isInstance)
Line 3396 
Line 4673 
  
         if (!XmlReader::getInstanceElement(parser, cimInstance))         if (!XmlReader::getInstanceElement(parser, cimInstance))
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //               "Expected INSTANCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                 "Expected INSTANCE element");                 "Expected INSTANCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
   
         }         }
         objectWithPath.set(reference, CIMObject(cimInstance));          objectWithPath = CIMObject (cimInstance);
           objectWithPath.setPath (reference);
     }     }
     else     else
     {     {
Line 3407 
Line 4694 
  
         if (!XmlReader::getClassElement(parser, cimClass))         if (!XmlReader::getClassElement(parser, cimClass))
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             // "Expected CLASS element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
                 "Expected CLASS element");                 "Expected CLASS element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
   
   
         }         }
         objectWithPath.set(reference, CIMObject(cimClass));          objectWithPath = CIMObject (cimClass);
           objectWithPath.setPath (reference);
     }     }
  
     expectEndTag(parser, "VALUE.OBJECTWITHLOCALPATH");     expectEndTag(parser, "VALUE.OBJECTWITHLOCALPATH");
Line 3428 
Line 4726 
  
 void XmlReader::getObjectArray( void XmlReader::getObjectArray(
     XmlParser& parser,     XmlParser& parser,
     Array<CIMObjectWithPath>& objectArray)      Array<CIMObject>& objectArray)
 { {
     CIMObject object;     CIMObject object;
     CIMObjectWithPath objectWithPath;      CIMObject objectWithPath;
  
     objectArray.clear();     objectArray.clear();
  
     if (getValueObjectElement(parser, object))     if (getValueObjectElement(parser, object))
     {     {
         objectArray.append(CIMObjectWithPath(CIMReference(), object));          objectArray.append(object);
         while (getValueObjectElement(parser, object))         while (getValueObjectElement(parser, object))
             objectArray.append(CIMObjectWithPath(CIMReference(), object));              objectArray.append(object);
     }     }
     else if (getValueObjectWithPathElement(parser, objectWithPath))     else if (getValueObjectWithPathElement(parser, objectWithPath))
     {     {
Line 3463 
Line 4761 
  
 Boolean XmlReader::getObjectNameElement( Boolean XmlReader::getObjectNameElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& objectName)      CIMObjectPath& objectName)
 { {
     String className;      CIMName className;
  
     if (getClassNameElement(parser, className, false))     if (getClassNameElement(parser, className, false))
     {     {
         objectName.set(String(), String(), className);          objectName.set(String(), CIMNamespaceName(), className);
         return true;         return true;
     }     }
     else if (getInstanceNameElement(parser, objectName))     else if (getInstanceNameElement(parser, objectName))
         return true;         return true;
     else     else
     {     {
         throw XmlValidationError(parser.getLine(),  
             "expected CLASSNAME or INSTANCENAME element");        // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected CLASSNAME or INSTANCENAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASSNAME_OR_INSTANCENAME_ELEMENT",
                                    "Expected CLASSNAME or INSTANCENAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
     }     }
  
     return false;      PEGASUS_UNREACHABLE( return false; )
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 3491 
Line 4798 
  
 Boolean XmlReader::getObjectPathElement( Boolean XmlReader::getObjectPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& objectPath)      CIMObjectPath& objectPath)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 3510 
Line 4817 
     }     }
     else     else
     {     {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCEPATH or CLASSPATH element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCEPATH_OR_CLASSPATH_ELEMENT",
             "expected INSTANCEPATH or CLASSPATH element");             "expected INSTANCEPATH or CLASSPATH element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     PEGASUS_UNREACHABLE ( return false; )     PEGASUS_UNREACHABLE ( return false; )
Line 3534 
Line 4849 
  
     // Get EXPMETHODCALL.NAME attribute:     // Get EXPMETHODCALL.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),        if (!entry.getAttributeValue("NAME", name)) {
   
           // l10n
   
           // throw XmlValidationError(parser.getLine(),
           // "Missing EXPMETHODCALL.NAME attribute");
   
           MessageLoaderParms mlParms("Common.XmlReader.MISSING_EXPMETHODCALL_ATTRIBUTE",
             "Missing EXPMETHODCALL.NAME attribute");             "Missing EXPMETHODCALL.NAME attribute");
  
           throw XmlValidationError(parser.getLine(), mlParms);
         }
   
     return true;     return true;
 } }
  
Line 3549 
Line 4874 
  
 Boolean XmlReader::getEMethodResponseStartTag( Boolean XmlReader::getEMethodResponseStartTag(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "EXPMETHODRESPONSE"))      if (!testStartTagOrEmptyTag(parser, entry, "EXPMETHODRESPONSE"))
         return false;         return false;
  
       isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
   
     // Get EXPMETHODRESPONSE.NAME attribute:     // Get EXPMETHODRESPONSE.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),        if (!entry.getAttributeValue("NAME", name)) {
           // l10n
   
           // throw XmlValidationError(
           //   parser.getLine(), "Missing EXPMETHODRESPONSE.NAME attribute");
   
           MessageLoaderParms mlParms("Common.XmlReader.MISSING_EXPMETHODRESPONSE_ATTRIBUTE",
             "Missing EXPMETHODRESPONSE.NAME attribute");             "Missing EXPMETHODRESPONSE.NAME attribute");
  
           throw XmlValidationError(parser.getLine(), mlParms);
         }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // 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)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing EXPPARAMVALUE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_EXPPARAMVALUE_ATTRIBUTE",
                                    "Missing EXPPARAMVALUE.NAME attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
   
   
     return true;     return true;
 } }
  
Line 3582 
Line 4955 
  
     // Get METHODCALL.NAME attribute:     // Get METHODCALL.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),      if (!entry.getAttributeValue("NAME", name)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //               "Missing METHODCALL.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_METHODCALL_ATTRIBUTE",
             "Missing METHODCALL.NAME attribute");             "Missing METHODCALL.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
   
     return true;     return true;
 } }
  
Line 3597 
Line 4981 
  
 Boolean XmlReader::getMethodResponseStartTag( Boolean XmlReader::getMethodResponseStartTag(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "METHODRESPONSE"))      if (!testStartTagOrEmptyTag(parser, entry, "METHODRESPONSE"))
         return false;         return false;
  
       isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
   
     // Get METHODRESPONSE.NAME attribute:     // Get METHODRESPONSE.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),      if (!entry.getAttributeValue("NAME", name)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing METHODRESPONSE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_METHODRESPONSE_ATTRIBUTE",
             "Missing METHODRESPONSE.NAME attribute");             "Missing METHODRESPONSE.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
     return true;     return true;
 } }
  
Line 3620 
Line 5017 
 // <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?> // <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?>
 // <!ATTLIST PARAMVALUE // <!ATTLIST PARAMVALUE
 //      %CIMName; //      %CIMName;
   //      %EmbeddedObject; #IMPLIED
 //      %ParamType;> //      %ParamType;>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 3630 
Line 5028 
 { {
     XmlEntry entry;     XmlEntry entry;
     const char* name;     const char* name;
     CIMType type;      CIMType type=CIMTYPE_BOOLEAN;
     CIMValue value;     CIMValue value;
  
     if (!testStartTagOrEmptyTag(parser, entry, "PARAMVALUE"))     if (!testStartTagOrEmptyTag(parser, entry, "PARAMVALUE"))
Line 3640 
Line 5038 
  
     // Get PARAMVALUE.NAME attribute:     // Get PARAMVALUE.NAME attribute:
  
     if (!entry.getAttributeValue("NAME", name))      if (!entry.getAttributeValue("NAME", name)) {
         throw XmlValidationError(parser.getLine(),  
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing PARAMVALUE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_PARAMVALUE_ATTRIBUTE",
             "Missing PARAMVALUE.NAME attribute");             "Missing PARAMVALUE.NAME attribute");
  
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
       // Get PROPERTY.EMBEDDEDOBJECT
   
       String embeddedObject = getEmbeddedObjectAttribute(
           parser.getLine(), entry, "PARAMVALUE");
   
     // 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)
       {
           gotType = false; // Can't distinguish array and non-array types
       }
       else
     {     {
         // 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 )
         {         {
             CIMReference 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
         }         }
  
         // Parse non-reference value         // Parse non-reference value
         if ( type != CIMType::REFERENCE )          if ( type != CIMTYPE_REFERENCE )
           {
               CIMType effectiveType;
               if (!gotType)
         {         {
             // If we don't know what type the value is, read it as a String             // If we don't know what type the value is, read it as a String
             CIMType effectiveType = type;                          effectiveType = CIMTYPE_STRING;
             if ( effectiveType == CIMType::NONE)                  }
               else
             {             {
                 effectiveType = CIMType::STRING;                          effectiveType = type;
                   }
   
               // If the EMBEDDEDOBJECT attribute is present with value "object"
               // then
               //     Convert the EmbeddedObject-encoded string into a CIMObject
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
               Boolean isEmbeddedObject = String::equal(embeddedObject, "object");
               Boolean isEmbeddedInstance = String::equal(embeddedObject, "instance");
               if(isEmbeddedObject || isEmbeddedInstance)
               {
                   // The EMBEDDEDOBJECT attribute is only valid on Parameters of type string
                   // The type must have been specified.
                   if (gotType && (type == CIMTYPE_STRING))
                   {
                     if(isEmbeddedObject)
                       effectiveType = CIMTYPE_OBJECT; // Used below by getValueElement() or getValueArrayElement()
                     else
                       effectiveType = CIMTYPE_INSTANCE;
             }             }
                   else
                   {
                       // Error -- throw exception
                       // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
                       // l10n
   
                       // throw XmlValidationError(parser.getLine(),
                       //   "expected string type");
   
                       MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                        "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
                       throw XmlValidationError(parser.getLine(), mlParms);
                   }
               }
   #else
               if (String::equal(embeddedObject, "object"))
               {
                   // The EMBEDDEDOBJECT attribute is only valid on Parameters of type string
                   // The type must have been specified.
                   if (gotType && (type == CIMTYPE_STRING))
                   {
                       // Used below by getValueElement() or getValueArrayElement()
                       effectiveType = CIMTYPE_OBJECT;
                   }
                   else
                   {
                       // Error -- throw exception
                       // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
                       // l10n
   
                       // throw XmlValidationError(parser.getLine(),
                       //   "expected string type");
   
                       MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                        "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
                       throw XmlValidationError(parser.getLine(), mlParms);
                   }
               }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
  
             if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) &&             if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) &&
                  !XmlReader::getValueElement(parser, effectiveType, value) )                  !XmlReader::getValueElement(parser, effectiveType, value) )
             {             {
                   gotType = false; // Can't distinguish array and non-array types
                 value.clear();    // Isn't necessary; should already be cleared                 value.clear();    // Isn't necessary; should already be cleared
             }             }
   
         }         }
  
         expectEndTag(parser, "PARAMVALUE");         expectEndTag(parser, "PARAMVALUE");
     }     }
  
     paramValue = CIMParamValue(name, value, Boolean(type!=CIMType::NONE));  
       paramValue = CIMParamValue(name, value, gotType);
  
     return true;     return true;
 } }
Line 3698 
Line 5184 
 // //
 // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)> // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)>
 // <!ATTLIST RETURNVALUE // <!ATTLIST RETURNVALUE
   //      %EmbeddedObject; #IMPLIED
 //      %ParamType;> //      %ParamType;>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 3713 
Line 5200 
     if (!testStartTag(parser, entry, "RETURNVALUE"))     if (!testStartTag(parser, entry, "RETURNVALUE"))
         return false;         return false;
  
       // Get PROPERTY.EMBEDDEDOBJECT
   
       String embeddedObject = getEmbeddedObjectAttribute(
           parser.getLine(), entry, "RETURNVALUE");
   
     // 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 )
     {     {
         CIMReference 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)
         {         {
             throw XmlValidationError(parser.getLine(),  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //   "expected VALUE.REFERENCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_REFERENCE_ELEMENT",
                 "expected VALUE.REFERENCE element");                 "expected VALUE.REFERENCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
     }     }
  
     // Parse non-reference return value     // Parse non-reference return value
     if ( type != CIMType::REFERENCE )      if ( type != CIMTYPE_REFERENCE )
       {
           if (!gotType)
     {     {
         // If we don't know what type the value is, read it as a String         // If we don't know what type the value is, read it as a String
         if ( type == CIMType::NONE)              type = CIMTYPE_STRING;
           }
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
           Boolean isEmbeddedObject = String::equal(embeddedObject, "object");
           Boolean isEmbeddedInstance = String::equal(embeddedObject, "instance");
           if(isEmbeddedObject || isEmbeddedInstance)
           {
               if (gotType && (type == CIMTYPE_STRING))
         {         {
             type = CIMType::STRING;                  if(isEmbeddedObject)
                     type = CIMTYPE_OBJECT; // Used below by getValueElement() or getValueArrayElement()
                   else
                     type = CIMTYPE_INSTANCE;
         }         }
               else
               {
                   // Error -- throw exception
                   // (the EmbeddedObject attribute may be applied only to entities that have the type String)
  
                   // l10n
   
                   // throw XmlValidationError(parser.getLine(),
                   //   "expected string type");
   
                   MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                    "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
                   throw XmlValidationError(parser.getLine(), mlParms);
               }
           }
   #else
           if (String::equal(embeddedObject, "object"))
           {
               if (gotType && (type == CIMTYPE_STRING))
               {
                   type = CIMTYPE_OBJECT;  // Used below by getValueElement()
               }
               else
               {
                   // Error -- throw exception
                   // (the EmbeddedObject attribute may be applied only to entities that have the type String)
   
                   // l10n
   
                   // throw XmlValidationError(parser.getLine(),
                   //   "expected string type");
   
                   MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE",
                                    "The EMBEDDEDOBJECT attribute is only valid on string types.");
   
                   throw XmlValidationError(parser.getLine(), mlParms);
               }
           }
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
         if ( !XmlReader::getValueElement(parser, type, returnValue) )         if ( !XmlReader::getValueElement(parser, type, returnValue) )
         {         {
             throw XmlValidationError(parser.getLine(),  
                   // l10n
   
                   // throw XmlValidationError(parser.getLine(),
                   //   "expected VALUE element");
   
                   MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                 "expected VALUE element");                 "expected VALUE element");
   
                   throw XmlValidationError(parser.getLine(), mlParms);
         }         }
     }     }
  
Line 3757 
Line 5317 
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
   


Legend:
Removed from v.1.49  
changed lines
  Added in v.1.119

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2