(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.7 and 1.108

version 1.7, 2001/04/13 21:53:47 version 1.108, 2005/02/22 18:08:32
Line 1 
Line 1 
 //BEGIN_LICENSE  //%2005////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   // 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.
   //
   // Permission is hereby granted, free of charge, to any person obtaining a copy
   // of this software and associated documentation files (the "Software"), to
   // deal in the Software without restriction, including without limitation the
   // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   // sell copies of the Software, and to permit persons to whom the Software is
   // furnished to do so, subject to the following conditions:
   //
   // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
   // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
   // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
   // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
   // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
   // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   //
   //==============================================================================
   //
   // Author: Mike Brasher (mbrasher@bmc.com)
   //
   // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
   //                  (carolann_graves@hp.com)
   //              Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
   //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
   //              Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a  //%/////////////////////////////////////////////////////////////////////////////
 // copy of this software and associated documentation files (the "Software"),  #include <Pegasus/Common/Config.h>
 // to deal in the Software without restriction, including without limitation  
 // the rights to use, copy, modify, merge, publish, distribute, sublicense,  
 // and/or sell copies of the Software, and to permit persons to whom the  
 // Software is furnished to do so, subject to the following conditions:  
 //  
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL  
 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  
 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  
 // DEALINGS IN THE SOFTWARE.  
 //  
 //END_LICENSE  
 //BEGIN_HISTORY  
 //  
 // Author:  
 //  
 // $Log$  
 // Revision 1.7  2001/04/13 21:53:47  karl  
 // add get and set property  
 //  
 // Revision 1.6  2001/04/08 01:13:22  mike  
 // Changed "ConstCIM" to "CIMConst"  
 //  
 // Revision 1.4  2001/02/26 04:33:28  mike  
 // Fixed many places where cim names were be compared with operator==(String,String).  
 // Changed all of these to use CIMName::equal()  
 //  
 // Revision 1.3  2001/02/19 01:47:16  mike  
 // Renamed names of the form CIMConst to CIMConst.  
 //  
 // Revision 1.2  2001/02/16 02:06:07  mike  
 // Renamed many classes and headers.  
 //  
 // Revision 1.1.1.1  2001/01/14 19:53:32  mike  
 // Pegasus import  
 //  
 //  
 //END_HISTORY  
   
 #include <cassert>  
 #include <cctype> #include <cctype>
 #include <cstdio> #include <cstdio>
 #include <cstdlib> #include <cstdlib>
   #if defined(PEGASUS_OS_TYPE_UNIX) || defined(PEGASUS_OS_VMS)
   #include <errno.h>
   #endif
 #include "CIMName.h" #include "CIMName.h"
 #include "XmlReader.h" #include "XmlReader.h"
 #include "XmlWriter.h" #include "XmlWriter.h"
Line 56 
Line 50 
 #include "CIMQualifierDecl.h" #include "CIMQualifierDecl.h"
 #include "CIMClass.h" #include "CIMClass.h"
 #include "CIMInstance.h" #include "CIMInstance.h"
   #include "CIMObject.h"
   #include "CIMParamValue.h"
   #include "System.h"
   #include "XmlConstants.h"
   #ifdef PEGASUS_PLATFORM_OS400_ISERIES_IBM
   #include "OS400ConvertChar.h"
   #endif
   // l10n
   #include <Pegasus/Common/MessageLoader.h>
  
   #define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000))
   #define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF)
   
   PEGASUS_USING_STD;
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 static const Uint32 MESSAGE_SIZE = 128; static const Uint32 MESSAGE_SIZE = 128;
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // expectXmlDeclaration()  // getXmlDeclaration()
   //
   //     <?xml version="1.0" encoding="utf-8"?>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlReader::expectXmlDeclaration(  void XmlReader::getXmlDeclaration(
     XmlParser& parser,     XmlParser& parser,
     XmlEntry& entry)      const char*& xmlVersion,
       const char*& xmlEncoding)
 { {
       XmlEntry entry;
   
     if (!parser.next(entry) ||     if (!parser.next(entry) ||
         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)) {
   
         // 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))
       {
           // ATTN-RK-P3-20020403:  Is there a default encoding?
       }
     }     }
   
   //------------------------------------------------------------------------------
   //
   //  testXmlDeclaration ()
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::testXmlDeclaration (
       XmlParser& parser,
       XmlEntry& entry)
   {
       if (!parser.next (entry) ||
           entry.type != XmlEntry::XML_DECLARATION ||
           strcmp (entry.text, "xml") != 0)
       {
           parser.putBack (entry);
           return false;
       }
   
       return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 95 
Line 155 
         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 115 
Line 183 
         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", tagName);        // l10n
         throw XmlValidationError(parser.getLine(), message);  
         // 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);
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
Line 137 
Line 215 
         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 158 
Line 244 
         (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 189 
Line 283 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // testEndTag>()  // testEndTag()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
Line 233 
Line 327 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // 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 254 
Line 369 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // testCimStartTag()  // getCimStartTag()
 // //
 //     <!ELEMENT CIM (MESSAGE|DECLARATION)> //     <!ELEMENT CIM (MESSAGE|DECLARATION)>
 //     <!ATTRLIST CIM //     <!ATTRLIST CIM
Line 263 
Line 378 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlReader::testCimStartTag(XmlParser& parser)  void XmlReader::getCimStartTag(
       XmlParser& parser,
       const char*& cimVersion,
       const char*& dtdVersion)
 { {
     XmlEntry entry;     XmlEntry entry;
     XmlReader::expectStartTag(parser, entry, "CIM");     XmlReader::expectStartTag(parser, entry, "CIM");
  
     const char* cimVersion;      if (!entry.getAttributeValue("CIMVERSION", cimVersion)) {
  
     if (!entry.getAttributeValue("CIMVERSION", cimVersion))        // l10n
         throw XmlValidationError(  
             parser.getLine(), "missing CIM.CIMVERSION attribute");  
  
     if (strcmp(cimVersion, "2.0") != 0)        // throw XmlValidationError(
         throw XmlValidationError(parser.getLine(),        //   parser.getLine(), "missing CIM.CIMVERSION attribute");
             "CIM.CIMVERSION attribute must be \"2.0\"");  
  
     const char* dtdVersion;        MessageLoaderParms mlParms("Common.XmlReader.MISSING_CIMVERSION_ATTRIBUTE",
                                    "missing CIM.CIMVERSION attribute");
  
     if (!entry.getAttributeValue("DTDVERSION", dtdVersion))        throw XmlValidationError(parser.getLine(), mlParms);
         throw XmlValidationError(  
             parser.getLine(), "missing CIM.DTDVERSION attribute");  
   
     if (strcmp(dtdVersion, "2.0") != 0)  
         throw XmlValidationError(parser.getLine(),  
             "CIM.DTDVERSION attribute must be \"2.0\"");  
 } }
  
 //------------------------------------------------------------------------------      if (!entry.getAttributeValue("DTDVERSION", dtdVersion)){
 //  
 // getIsArrayAttribute()  
 //  
 //------------------------------------------------------------------------------  
  
 Boolean XmlReader::getIsArrayAttribute(        // l10n
     Uint32 lineNumber,  
     const XmlEntry& entry,  
     const char* tagName,  
     Boolean& value)  
 {  
     const char* tmp;  
  
     if (!entry.getAttributeValue("ISARRAY", tmp))        // throw XmlValidationError(
         return false;        //   parser.getLine(), "missing CIM.DTDVERSION attribute");
  
     if (strcmp(tmp, "true") == 0)        MessageLoaderParms mlParms("Common.XmlReader.MISSING_DTDVERSION_ATTRIBUTE",
     {                                   "missing CIM.DTDVERSION attribute");
         value = true;  
         return true;  
     }  
     else if (strcmp(tmp, "false") == 0)  
     {  
         value = false;  
         return true;  
     }  
  
     char buffer[62];        throw XmlValidationError(parser.getLine(), mlParms);
     sprintf(buffer, "Bad %s.%s attribute value", "ISARRAY", tagName);      }
     throw XmlSemanticError(lineNumber, buffer);  
     return false;  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 331 
Line 421 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getCimNameAttribute(  CIMName XmlReader::getCimNameAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName,     const char* elementName,
Line 341 
Line 431 
  
     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.getLength() == 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 CIMName (name);
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 376 
Line 495 
  
     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 400 
Line 545 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getClassOriginAttribute(  CIMName XmlReader::getClassOriginAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* tagName)     const char* tagName)
Line 408 
Line 553 
     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 429 
Line 585 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getReferenceClassAttribute(  CIMName XmlReader::getReferenceClassAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName)     const char* elementName)
Line 437 
Line 593 
     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 458 
Line 630 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 String XmlReader::getSuperClassAttribute(  CIMName XmlReader::getSuperClassAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* tagName)     const char* tagName)
Line 466 
Line 638 
     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 483 
Line 667 
 // //
 // getCimTypeAttribute() // getCimTypeAttribute()
 // //
   // This method can be used to get a TYPE attribute or a PARAMTYPE attribute.
   // The only significant difference is that PARAMTYPE may specify a value of
   // "reference" type.  This method recognizes these attributes by name, and
   // does not allow a "TYPE" attribute to be of "reference" type.
   //
 //     <!ENTITY % CIMType "TYPE (boolean|string|char16|uint8|sint8|uint16 //     <!ENTITY % CIMType "TYPE (boolean|string|char16|uint8|sint8|uint16
 //         |sint16|uint32|sint32|uint64|sint64|datetime|real32|real64)"> //         |sint16|uint32|sint32|uint64|sint64|datetime|real32|real64)">
 // //
   //     <!ENTITY % ParamType "PARAMTYPE (boolean|string|char16|uint8|sint8
   //         |uint16|sint16|uint32|sint32|uint64|sint64|datetime|real32|real64
   //         |reference)">
   //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 CIMType XmlReader::getCimTypeAttribute(  Boolean XmlReader::getCimTypeAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* tagName)      CIMType& cimType,  // Output parameter
       const char* tagName,
       const char* attributeName,
       Boolean required)
 { {
     const char* typeName;     const char* typeName;
  
     if (!entry.getAttributeValue("TYPE", typeName))      if (!entry.getAttributeValue(attributeName, typeName))
       {
           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.TYPE attribute", tagName);            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
             {
               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;
       else unrecognizedType = true;
  
     // ATTN: "reference" is not legal according to the DTD; however, it is      if (unrecognizedType ||
     // used by the XML version of the CIM schema.          ((type == CIMTYPE_REFERENCE) &&
            (strcmp(attributeName, "PARAMTYPE") != 0)))
       {
         // l10n
   
         // char message[MESSAGE_SIZE];
         // sprintf(message, "Illegal value for %s.%s attribute", tagName,
         //       attributeName);
         // throw XmlSemanticError(lineNumber, message);
  
     if (type == CIMType::NONE)        char buffer[MESSAGE_SIZE];
     {        sprintf(buffer, "%s.%s", tagName, attributeName);
         char message[MESSAGE_SIZE];  
         sprintf(message, "Illegal value for %s.TYPE attribute", tagName);        MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE",
         throw XmlSemanticError(lineNumber, message);                                   "Illegal value for $0 attribute",
                                    buffer);
   
         throw XmlSemanticError(lineNumber, mlParms);
     }     }
  
     return type;      cimType = type;
       return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 569 
Line 799 
         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);  
           MessageLoaderParms mlParms("Common.XmlReader.MISSING_REQUIRED_ATTRIBUTE",
                                      "missing required $0 attribute",
                                      buffer);
  
         throw XmlValidationError(lineNumber, buffer);          throw XmlValidationError(lineNumber, mlParms);
     }     }
  
     if (strcmp(tmp, "true") == 0)     if (strcmp(tmp, "true") == 0)
Line 581 
Line 822 
     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 598 
Line 851 
  
 Boolean XmlReader::stringToReal(const char* stringValue, Real64& x) Boolean XmlReader::stringToReal(const char* stringValue, Real64& x)
 { {
       //
       // Check the string against the DMTF-defined grammar
       //
     const char* p = stringValue;     const char* p = stringValue;
  
     if (!*p)     if (!*p)
Line 654 
Line 910 
     if (*p)     if (*p)
         return false;         return false;
  
       //
       // Do the conversion
       //
     char* end;     char* end;
       errno = 0;
     x = strtod(stringValue, &end);     x = strtod(stringValue, &end);
     return true;      if (*end || (errno == ERANGE))
       {
           return false;
 } }
  
 //------------------------------------------------------------------------------      return true;
 //  }
 // stringToSignedInteger  
 //  
 //      [ "+" | "-" ] ( positiveDecimalDigit *decimalDigit | "0" )  
 //  
 // ATTN-B: handle conversion from hexadecimal.  
 //------------------------------------------------------------------------------  
  
 Boolean XmlReader::stringToSignedInteger(  inline Uint8 _xmlReader_hexCharToNumeric(const char c)
     const char* stringValue,  
     Sint64& x)  
 { {
     x = 0;      Uint8 n;
     const char* p = stringValue;  
   
     if (!*p)  
         return false;  
   
     // Skip optional sign:  
  
     Boolean negative = *p == '-';      if (isdigit(c))
           n = (c - '0');
       else if (isupper(c))
           n = (c - 'A' + 10);
       else // if (islower(c))
           n = (c - 'a' + 10);
  
     if (negative || *p == '+')      return n;
         p++;  }
  
     // If the next thing is a zero, then it must be the last:  // 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;
  
     if (*p == '0')      Array<Uint8> utf8Chars;
         return p[1] == '\0';  
  
     // Expect a positive decimal digit:      for (i=0; i<uriString.size(); i++)
       {
           if (uriString[i] == '%')
           {
               if (i+2 >= uriString.size())
               {
                 // l10n
  
     const char* first = p;                // throw ParseError("Invalid URI encoding");
  
     if (!isdigit(*p) || *p == '0')                MessageLoaderParms mlParms("Common.XmlReader.INVALID_URI_ENCODING",
         return false;                                           "Invalid URI encoding");
  
     p++;                throw ParseError(MessageLoader::getMessage(mlParms));
  
     // Expect zero or more digits:              }
  
     while (isdigit(*p))              Uint8 digit1 = _xmlReader_hexCharToNumeric(char(uriString[++i]));
         p++;              Uint8 digit2 = _xmlReader_hexCharToNumeric(char(uriString[++i]));
               if ( (digit1 > 15) || (digit2 > 15) )
               {
                 // l10n
  
     if (*p)                // throw ParseError("Invalid URI encoding");
         return false;  
  
     const char* last = p;                MessageLoaderParms mlParms("Common.XmlReader.INVALID_URI_ENCODING",
                                            "Invalid URI encoding");
  
     while (first != last)                throw ParseError(MessageLoader::getMessage(mlParms));
         x = 10 * x + (*first++ - '0');              }
  
     if (negative)              Uint16 decodedChar = Uint16(digit1<<4) + Uint16(digit2);
         x = -x;              utf8Chars.append((Uint8)decodedChar);
           }
           else
           {
               utf8Chars.append((Uint8)uriString[i]);
           }
       }
  
     return true;      // 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();
       }
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // stringToUnsignedInteger  // stringToSignedInteger
 // //
 //      [ "+" | "-" ] ( positiveDecimalDigit *decimalDigit | "0" ) //      [ "+" | "-" ] ( positiveDecimalDigit *decimalDigit | "0" )
   //    or
   //      [ "+" | "-" ] ( "0x" | "0X" ) 1*hexDigit
 // //
 // ATTN-B: handle conversion from hexadecimal.  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::stringToUnsignedInteger(  Boolean XmlReader::stringToSignedInteger(
     const char* stringValue,     const char* stringValue,
     Uint64& x)      Sint64& x)
 { {
     x = 0;     x = 0;
     const char* p = stringValue;     const char* p = stringValue;
  
     if (!*p)      if (!p || !*p)
         return false;         return false;
  
     // Skip optional sign:     // Skip optional sign:
  
     if (*p == '-')      Boolean negative = *p == '-';
         return false;  
  
     if (*p == '+')      if (negative || *p == '+')
         p++;         p++;
  
     // If the next thing is a zero, then it must be the last:  
   
     if (*p == '0')     if (*p == '0')
         return p[1] == '\0';      {
           if ( (p[1] == 'x') || (p[1] == 'X') )
     // Expect a positive decimal digit:          {
               // Convert a hexadecimal string
  
     const char* first = p;              // Skip over the "0x"
               p+=2;
  
     if (!isdigit(*p) || *p == '0')              // At least one hexadecimal digit is required
               if (!isxdigit(*p))
         return false;         return false;
  
     p++;              // Build the Sint64 as a negative number, regardless of the
               // eventual sign (negative numbers can be bigger than positive ones)
   
               // Add on each digit, checking for overflow errors
               while (isxdigit(*p))
               {
                   // Make sure we won't overflow when we multiply by 16
                   if (x < PEGASUS_SINT64_MIN/16)
                   {
                       return false;
                   }
                   x = x << 4;
   
                   // Make sure we don't overflow when we add the next digit
                   Sint64 newDigit = Sint64(_xmlReader_hexCharToNumeric(*p++));
                   if (PEGASUS_SINT64_MIN - x > -newDigit)
                   {
                       return false;
                   }
                   x = x - newDigit;
               }
   
               // If we found a non-hexadecimal digit, report an error
               if (*p)
                   return false;
   
               // Return the integer to positive, if necessary, checking for an
               // overflow error
               if (!negative)
               {
                   if (x == PEGASUS_SINT64_MIN)
                   {
                       return false;
                   }
                   x = -x;
               }
               return true;
           }
           else
           {
               // A decimal string that starts with '0' must be exactly "0".
               return p[1] == '\0';
           }
       }
   
       // Expect a positive decimal digit:
   
       // At least one decimal digit is required
       if (!isdigit(*p))
           return false;
  
     // Expect zero or more digits:      // Build the Sint64 as a negative number, regardless of the
       // eventual sign (negative numbers can be bigger than positive ones)
  
       // Add on each digit, checking for overflow errors
     while (isdigit(*p))     while (isdigit(*p))
         p++;      {
           // Make sure we won't overflow when we multiply by 10
           if (x < PEGASUS_SINT64_MIN/10)
           {
               return false;
           }
           x = 10 * x;
   
           // Make sure we won't overflow when we add the next digit
           Sint64 newDigit = (*p++ - '0');
           if (PEGASUS_SINT64_MIN - x > -newDigit)
           {
               return false;
           }
           x = x - newDigit;
       }
   
       // If we found a non-decimal digit, report an error
       if (*p)
           return false;
   
       // Return the integer to positive, if necessary, checking for an
       // overflow error
       if (!negative)
       {
           if (x == PEGASUS_SINT64_MIN)
           {
               return false;
           }
           x = -x;
       }
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // stringToUnsignedInteger
   //
   //      ( positiveDecimalDigit *decimalDigit | "0" )
   //    or
   //      ( "0x" | "0X" ) 1*hexDigit
   //
   //------------------------------------------------------------------------------
  
   Boolean XmlReader::stringToUnsignedInteger(
       const char* stringValue,
       Uint64& x)
   {
       x = 0;
       const char* p = stringValue;
   
       if (!p || !*p)
           return false;
   
       if (*p == '0')
       {
           if ( (p[1] == 'x') || (p[1] == 'X') )
           {
               // Convert a hexadecimal string
   
               // Skip over the "0x"
               p+=2;
   
               // At least one hexadecimal digit is required
               if (!*p)
                   return false;
   
               // Add on each digit, checking for overflow errors
               while (isxdigit(*p))
               {
                   // Make sure we won't overflow when we multiply by 16
                   if (x > PEGASUS_UINT64_MAX/16)
                   {
                       return false;
                   }
                   x = x << 4;
   
                   // We can't overflow when we add the next digit
                   Uint64 newDigit = Uint64(_xmlReader_hexCharToNumeric(*p++));
                   if (PEGASUS_UINT64_MAX - x < newDigit)
                   {
                       return false;
                   }
                   x = x + newDigit;
               }
   
               // If we found a non-hexadecimal digit, report an error
     if (*p)     if (*p)
         return false;         return false;
  
     const char* last = p;              return true;
           }
           else
           {
               // A decimal string that starts with '0' must be exactly "0".
               return p[1] == '\0';
           }
       }
   
       // Expect a positive decimal digit:
   
       // Add on each digit, checking for overflow errors
       while (isdigit(*p))
       {
           // Make sure we won't overflow when we multiply by 10
           if (x > PEGASUS_UINT64_MAX/10)
           {
               return false;
           }
           x = 10 * x;
   
           // Make sure we won't overflow when we add the next digit
           Uint64 newDigit = (*p++ - '0');
           if (PEGASUS_UINT64_MAX - x < newDigit)
           {
               return false;
           }
           x = x + newDigit;
       }
  
     while (first != last)      // If we found a non-decimal digit, report an error
         x = 10 * x + (*first++ - '0');      if (*p)
           return false;
  
     return true;     return true;
 } }
Line 779 
Line 1228 
 // //
 // stringToValue() // stringToValue()
 // //
 // ATTN-C: note that integers are truncated without warning. What should be  // Return: CIMValue. If the string input is zero length creates a CIMValue
 // done in this case? In C they are truncated without warning by design.  //         with value defined by the type.  Else the value is inserted.
   //
   //         Note that this does not set the CIMValue Null if the string is empty.
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
Line 791 
Line 1242 
 { {
     // ATTN-B: accepting only UTF-8 for now! (affects string and char16):     // ATTN-B: accepting only UTF-8 for now! (affects string and char16):
  
       // Create value per type
     switch (type)     switch (type)
     {     {
         case CIMType::BOOLEAN:          case CIMTYPE_BOOLEAN:
         {         {
             if (strcmp(valueString, "TRUE") == 0)              if (System::strcasecmp(valueString, "TRUE") == 0)
                 return CIMValue(true);                 return CIMValue(true);
             else if (strcmp(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");
  
             return CIMValue(Char16(valueString[0]));              MessageLoaderParms mlParms("Common.XmlReader.INVALID_CHAR16_VALUE",
                                          "Invalid char16 value");
   
               throw XmlSemanticError(lineNumber, mlParms);
             }
   
               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: return CIMValue(Uint8(x));                  case CIMTYPE_UINT8:
                 case CIMType::UINT16: return CIMValue(Uint16(x));                  {
                 case CIMType::UINT32: return CIMValue(Uint32(x));                      if (x >= (Uint64(1)<<8))
                 case CIMType::UINT64: return CIMValue(Uint64(x));                      {
   
                         // 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));
                   }
                   case CIMTYPE_UINT16:
                   {
                       if (x >= (Uint64(1)<<16))
                       {
   
                         // 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));
                   }
                   case CIMTYPE_UINT32:
                   {
                       if (x >= (Uint64(1)<<32))
                       {
   
                         // 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));
                   }
                   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: return CIMValue(Sint8(x));                  case CIMTYPE_SINT8:
                 case CIMType::SINT16: return CIMValue(Sint16(x));                  {
                 case CIMType::SINT32: return CIMValue(Sint32(x));                      if(  (x >= (Sint64(1)<<7)) || (x < (-(Sint64(1)<<7))) )
                 case CIMType::SINT64: return CIMValue(Sint64(x));                      {
   
                         // 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));
                   }
                   case CIMTYPE_SINT16:
                   {
                       if(  (x >= (Sint64(1)<<15)) || (x < (-(Sint64(1)<<15))) )
                       {
   
                         // 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));
                   }
                   case CIMTYPE_SINT32:
                   {
                       if(  (x >= (Sint64(1)<<31)) || (x < (-(Sint64(1)<<31))) )
                       {
   
                         // 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));
                   }
                   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 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 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(x);             return CIMValue(x);
         }         }
  
Line 903 
Line 1536 
             break;             break;
     }     }
  
     throw XmlSemanticError(lineNumber, "malformed XML");      // l10n
   
       // throw XmlSemanticError(lineNumber, "malformed XML");
   
       MessageLoaderParms mlParms("Common.XmlReader.MALFORMED_XML",
                                  "malformed XML");
   
       throw XmlSemanticError(lineNumber, mlParms);
   
     return false;     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;
   }
   
   //------------------------------------------------------------------------------
   //
 // getValueElement() // getValueElement()
 // //
 //     <!ELEMENT VALUE (#PCDATA)> //     <!ELEMENT VALUE (#PCDATA)>
 // //
   // Return: false if no value element.
   //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getValueElement( Boolean XmlReader::getValueElement(
Line 920 
Line 1593 
     CIMType type,     CIMType type,
     CIMValue& value)     CIMValue& value)
 { {
     // Get VALUE start tag:      // Get VALUE start tag: Return false if no VALUE start Tag
  
     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;
  
     // Get VALUE content:  
   
     const char* valueString = "";     const char* valueString = "";
  
     if (!empty)     if (!empty)
Line 940 
Line 1610 
  
         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;
 } }
  
 //----------------------------------------------------------------------------  //------------------------------------------------------------------------------
 //  
 // getPropertyValue  
 //     Expect (ERROR|IRETURNVALUE).!ELEMENT VALUE (#PCDATA)>  
 //  
 //      PropertyValue:  
 //      <!ELEMENT VALUE>  
 // //
 //      <!ELEMENT VALUE.ARRAY (VALUE*)>  // getStringValueElement()
 // //
 //      <!ELEMENT VALUE.REFERENCE (CLASSPATH|LOCALCLASSPATH|CLASSNAME|  //     <!ELEMENT VALUE (#PCDATA)>
 //                           INSTANCEPATH|LOCALINSTANCEPATH|INSTANCENAME)>  
 // //
 //----------------------------------------------------------------------------  //------------------------------------------------------------------------------
 Boolean XmlReader::getPropertyValue(  
   Boolean XmlReader::getStringValueElement(
     XmlParser& parser,     XmlParser& parser,
     CIMValue& cimValue)      String& str,
       Boolean required)
 { {
     //Test for Element value type      XmlEntry entry;
     CIMType type = CIMType::STRING;  
     if (XmlReader::getValueElement(parser, type, cimValue))  
         return true;  
  
     //Test for Element.array value      if (!testStartTagOrEmptyTag(parser, entry, "VALUE"))
     if(XmlReader::getValueArrayElement(parser, type, cimValue))      {
        return true;        if (required) {
  
     // Test for Value.reference type          // l10n
     // ATTN:This returns a different type (CIMReference)  
     // ATTN: Possibly change to simply return result after  
     // we figure out the type differences.  
  
    CIMReference reference;          // throw XmlValidationError(parser.getLine(),"Expected VALUE element");
    if(XmlReader::getValueReferenceElement(parser, reference))  
           MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                                      "Expected VALUE element");
   
           throw XmlValidationError(parser.getLine(), mlParms);
   
   
         }
         return false;
       }
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       const char* valueString = "";
   
       if (!empty)
       {
           if (testContentOrCData(parser, entry))
               valueString = entry.text;
   
           expectEndTag(parser, "VALUE");
       }
   
       str = String(valueString);
       return true;
   }
   
   //----------------------------------------------------------------------------
   //
   // getPropertyValue
   //     Use: Decode property value from SetProperty request and
   //     GetProperty response.
   //
   //     PropertyValue is one of:
   //
   //
   //      <!ELEMENT VALUE.ARRAY (VALUE*)>
   //
   //      <!ELEMENT VALUE.REFERENCE (CLASSPATH|LOCALCLASSPATH|CLASSNAME|
   //         <!ELEMENT VALUE.ARRAY (VALUE*)>
   //
   //         <!ELEMENT VALUE.REFERENCE (CLASSPATH|LOCALCLASSPATH|CLASSNAME|
   //                           INSTANCEPATH|LOCALINSTANCEPATH|INSTANCENAME)>
   //
   //         <!ELEMENT VALUE.REFARRAY (VALUE.REFERENCE*)>
   //
   //----------------------------------------------------------------------------
   Boolean XmlReader::getPropertyValue(
       XmlParser& parser,
       CIMValue& cimValue)
   {
       // Can not test for value type, so assume String
       const CIMType type = CIMTYPE_STRING;
   
       // Test for VALUE element
       if (XmlReader::getValueElement(parser, type, cimValue))
       {
           return true;
       }
   
       // Test for VALUE.ARRAY element
       if (XmlReader::getValueArrayElement(parser, type, cimValue))
       {
          return true;
       }
   
       // Test for VALUE.REFERENCE element
       CIMObjectPath reference;
       if (XmlReader::getValueReferenceElement(parser, reference))
       {
           cimValue.set(reference);
           return true;
       }
   
       // Test for VALUE.REFARRAY element
       if (XmlReader::getValueReferenceArrayElement(parser, cimValue))
       {
       return true;       return true;
       }
  
    return false;    return false;
 } }
Line 999 
Line 1742 
 { {
     Array<T> array;     Array<T> array;
  
     for (Uint32 i = 0, n = stringArray.getSize(); i < n; i++)      for (Uint32 i = 0, n = stringArray.size(); i < n; i++)
     {     {
         CIMValue value = XmlReader::stringToValue(         CIMValue value = XmlReader::stringToValue(
             lineNumber, stringArray[i], type);             lineNumber, stringArray[i], type);
Line 1019 
Line 1762 
 { {
     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);
  
         default:         default:
Line 1075 
Line 1818 
 // //
 //     <!ELEMENT VALUE.ARRAY (VALUE*)> //     <!ELEMENT VALUE.ARRAY (VALUE*)>
 // //
   //  Return: Boolean. Returns false if there is no VALUE.ARRAY start element
   //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getValueArrayElement( Boolean XmlReader::getValueArrayElement(
Line 1082 
Line 1827 
     CIMType type,     CIMType type,
     CIMValue& value)     CIMValue& value)
 { {
       // Clears any values from the Array. Assumes this is array CIMValue
     value.clear();     value.clear();
  
     // Get VALUE.ARRAY open tag:     // Get VALUE.ARRAY open tag:
  
     XmlEntry entry;     XmlEntry entry;
       Array<const char*> stringArray;
  
       // If no VALUE.ARRAY start tag, return false
     if (!testStartTagOrEmptyTag(parser, entry, "VALUE.ARRAY"))     if (!testStartTagOrEmptyTag(parser, entry, "VALUE.ARRAY"))
         return false;         return false;
  
     if (entry.type == XmlEntry::EMPTY_TAG)      if (entry.type != XmlEntry::EMPTY_TAG)
         return true;      {
   
     // For each VALUE element:     // For each VALUE element:
  
     Array<const char*> stringArray;  
   
     while (testStartTagOrEmptyTag(parser, entry, "VALUE"))     while (testStartTagOrEmptyTag(parser, entry, "VALUE"))
     {     {
         if (entry.type == XmlEntry::EMPTY_TAG)         if (entry.type == XmlEntry::EMPTY_TAG)
Line 1115 
Line 1860 
     }     }
  
     expectEndTag(parser, "VALUE.ARRAY");     expectEndTag(parser, "VALUE.ARRAY");
       }
  
     value = stringArrayToValue(parser.getLine(), stringArray, type);     value = stringArrayToValue(parser.getLine(), stringArray, type);
     return true;     return true;
Line 1132 
Line 1878 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Uint32 XmlReader::getFlavor(  CIMFlavor XmlReader::getFlavor(
     XmlEntry& entry,     XmlEntry& entry,
     Uint32 lineNumber,     Uint32 lineNumber,
     const char* tagName)     const char* tagName)
Line 1157 
Line 1903 
     Boolean translatable = getCimBooleanAttribute(     Boolean translatable = getCimBooleanAttribute(
         lineNumber, entry, tagName, "TRANSLATABLE", false, false);         lineNumber, entry, tagName, "TRANSLATABLE", false, false);
  
     Uint32 flavor = 0;      // Start with CIMFlavor::NONE.  Defaults are specified in the
       // getCimBooleanAttribute() calls above.
       CIMFlavor flavor = CIMFlavor (CIMFlavor::NONE);
  
     if (overridable)     if (overridable)
         flavor |= CIMFlavor::OVERRIDABLE;          flavor.addFlavor (CIMFlavor::OVERRIDABLE);
       else
           flavor.addFlavor (CIMFlavor::DISABLEOVERRIDE);
  
     if (toSubClass)     if (toSubClass)
         flavor |= CIMFlavor::TOSUBCLASS;          flavor.addFlavor (CIMFlavor::TOSUBCLASS);
       else
           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 1191 
Line 1943 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 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 1204 
Line 1957 
         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 1244 
Line 1997 
 // //
 // getQualifierElement() // getQualifierElement()
 // //
 //     <!ELEMENT QUALIFIER (VALUE|VALUE.ARRAY)>  //     <!ELEMENT QUALIFIER (VALUE|VALUE.ARRAY)?>
 //     <!ATTLIST QUALIFIER //     <!ATTLIST QUALIFIER
 //         %CIMName; //         %CIMName;
 //         %CIMType; #REQUIRED //         %CIMType; #REQUIRED
Line 1260 
Line 2013 
     // 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 1278 
Line 2034 
  
     // 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:
  
     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 1318 
Line 2080 
         {         {
             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 1349 
Line 2119 
  
     // 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 1363 
Line 2133 
  
     // 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:      // Create property: Sets type and !isarray
  
     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)
     {     {
Line 1378 
Line 2147 
  
         getQualifierElements(parser, property);         getQualifierElements(parser, property);
  
         // Get value:          // Get value:  Insert value if getValueElement exists (returns True)
  
         if (getValueElement(parser, type, value))         if (getValueElement(parser, type, value))
             property.setValue(value);             property.setValue(value);
Line 1415 
Line 2184 
  
     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 1453 
Line 2233 
  
     // 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 1467 
Line 2248 
  
     // 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
Line 1477 
Line 2258 
  
     // Create property:     // Create property:
  
     CIMValue nullValue;      CIMValue value(type, true, arraySize);
     nullValue.setNullValue(type, true, arraySize);  
     property = CIMProperty(     property = CIMProperty(
         name, nullValue, arraySize, String(), classOrigin, propagated);          name, value, arraySize, CIMName(), classOrigin, propagated);
  
     if (!empty)     if (!empty)
     {     {
Line 1490 
Line 2270 
  
         // Get value:         // Get value:
  
         CIMValue value;  
   
         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);
Line 1525 
Line 2311 
  
     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 1549 
Line 2360 
  
 Boolean XmlReader::getNameSpaceElement( Boolean XmlReader::getNameSpaceElement(
     XmlParser& parser,     XmlParser& parser,
     String& nameSpaceComponent)      CIMName& nameSpaceComponent)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1584 
Line 2395 
     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.getLength())          if (nameSpace.size())
             nameSpace += '/';              nameSpace.append('/');
  
         nameSpace += nameSpaceComponent;          nameSpace.append(nameSpaceComponent.getString());
     }     }
  
     if (!nameSpace.getLength())      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 1626 
Line 2447 
     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 1651 
Line 2489 
  
 Boolean XmlReader::getClassNameElement( Boolean XmlReader::getClassNameElement(
     XmlParser& parser,     XmlParser& parser,
     String& className,      CIMName& className,
     Boolean required)     Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
Line 1660 
Line 2498 
     {     {
         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 1686 
Line 2531 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 KeyBinding::CIMType XmlReader::getValueTypeAttribute(  CIMKeyBinding::Type XmlReader::getValueTypeAttribute(
     Uint32 lineNumber,     Uint32 lineNumber,
     const XmlEntry& entry,     const XmlEntry& entry,
     const char* elementName)     const char* elementName)
Line 1694 
Line 2539 
     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);
   
       MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_CIMVALUE_ATTRIBUTE",
                                  "Illegal value for $0 attribute; CIMValue must be one of \"string\", \"boolean\", or \"numeric\"", buffer);
  
     sprintf(buffer,      throw XmlSemanticError(lineNumber, mlParms);
         "Illegal value for %s.VALUETYPE attribute; "  
         "CIMValue must be one of \"string\", \"boolean\", or \"numeric\"",  
         elementName);  
  
     throw XmlSemanticError(lineNumber, buffer);      return CIMKeyBinding::BOOLEAN;
     return KeyBinding::BOOLEAN;  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1722 
Line 2577 
 //     <!ATTLIST KEYVALUE //     <!ATTLIST KEYVALUE
 //         VALUETYPE (string|boolean|numeric)  'string'> //         VALUETYPE (string|boolean|numeric)  'string'>
 // //
 // ATTN-B: VALUE.REFERENCE ignored above; can't understand why it is needed!  
 //  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getKeyValueElement( Boolean XmlReader::getKeyValueElement(
     XmlParser& parser,     XmlParser& parser,
     KeyBinding::CIMType& type,      CIMKeyBinding::Type& type,
     String& value)     String& value)
 { {
     XmlEntry entry;     XmlEntry entry;
Line 1748 
Line 2601 
             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 1766 
Line 2619 
 //     <!ATTLIST KEYBINDING //     <!ATTLIST KEYBINDING
 //         %CIMName;> //         %CIMName;>
 // //
 // ATTN-B: VALUE.REFERENCE ignored above; can't understand why it is needed!  
 //  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getKeyBindingElement( Boolean XmlReader::getKeyBindingElement(
     XmlParser& parser,     XmlParser& parser,
     String& name,      CIMName& name,
     String& value,     String& value,
     KeyBinding::CIMType& type)      CIMKeyBinding::Type& type)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1784 
Line 2635 
     name = getCimNameAttribute(parser.getLine(), entry, "KEYBINDING");     name = getCimNameAttribute(parser.getLine(), entry, "KEYBINDING");
  
     if (!getKeyValueElement(parser, type, value))     if (!getKeyValueElement(parser, type, value))
         throw XmlValidationError(parser.getLine(), "Expected KEYVALUE element");      {
           CIMObjectPath reference;
   
           if (!getValueReferenceElement(parser, reference))
           {
   
             // 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");
   
             throw XmlValidationError(parser.getLine(), mlParms);
           }
   
           type = CIMKeyBinding::REFERENCE;
           value = reference.toString();
       }
  
     expectEndTag(parser, "KEYBINDING");     expectEndTag(parser, "KEYBINDING");
     return true;     return true;
Line 1798 
Line 2668 
 //     <!ATTLIST INSTANCENAME //     <!ATTLIST INSTANCENAME
 //         %ClassName;> //         %ClassName;>
 // //
 // ATTN-B: VALUE.REFERENCE sub-element not accepted yet.  // Note: An empty key name is used in the keyBinding when the INSTANCENAME is
 // ATTN-B: KEYVALUE sub-element nothandled yet.  // specified using a KEYVALUE or a VALUE.REFERENCE.
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 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 1820 
Line 2690 
  
     className = getClassNameAttribute(parser.getLine(), entry, "INSTANCENAME");     className = getClassNameAttribute(parser.getLine(), entry, "INSTANCENAME");
  
     if (!empty)      if (empty)
     {     {
         String name;          return true;
         KeyBinding::CIMType type;      }
   
       CIMName name;
       CIMKeyBinding::Type type;
         String value;         String value;
       CIMObjectPath reference;
  
       if (getKeyValueElement(parser, type, value))
       {
           // Use empty key name because none was specified
           keyBindings.append(CIMKeyBinding(name, value, type));
       }
       else if (getValueReferenceElement(parser, reference))
       {
           // Use empty key name because none was specified
           type = CIMKeyBinding::REFERENCE;
           value = reference.toString();
           keyBindings.append(CIMKeyBinding(name, value, type));
       }
       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));
       }
  
         if (!empty)  
             expectEndTag(parser, "INSTANCENAME");             expectEndTag(parser, "INSTANCENAME");
   
       return true;
     }     }
  
   Boolean XmlReader::getInstanceNameElement(
       XmlParser& parser,
       CIMObjectPath& instanceName)
   {
       String className;
       Array<CIMKeyBinding> keyBindings;
   
       if (!XmlReader::getInstanceNameElement(parser, className, keyBindings))
           return false;
   
       instanceName.set(String(), CIMNamespaceName(), className, keyBindings);
     return true;     return true;
 } }
  
Line 1846 
Line 2747 
  
 Boolean XmlReader::getInstancePathElement( Boolean XmlReader::getInstancePathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1858 
Line 2759 
  
     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 1887 
Line 2807 
  
 Boolean XmlReader::getLocalInstancePathElement( Boolean XmlReader::getLocalInstancePathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1898 
Line 2818 
  
     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 1927 
Line 2865 
  
 Boolean XmlReader::getClassPathElement( Boolean XmlReader::getClassPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1939 
Line 2877 
  
     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 1967 
Line 2923 
  
 Boolean XmlReader::getLocalClassPathElement( Boolean XmlReader::getLocalClassPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 1978 
Line 2934 
  
     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 2009 
Line 2983 
  
 Boolean XmlReader::getValueReferenceElement( Boolean XmlReader::getValueReferenceElement(
     XmlParser& parser,     XmlParser& parser,
     CIMReference& reference)      CIMObjectPath& reference)
 { {
     XmlEntry entry;     XmlEntry entry;
  
Line 2022 
Line 2996 
     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 2041 
Line 3024 
     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 2059 
Line 3042 
     {     {
         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");
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getValueReferenceArrayElement()
   //
   //     <!ELEMENT VALUE.REFARRAY (VALUE.REFERENCE*)>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getValueReferenceArrayElement(
       XmlParser& parser,
       CIMValue& value)
   {
       XmlEntry entry;
       Array<CIMObjectPath> referenceArray;
       CIMObjectPath reference;
   
       value.clear();
   
       // Get VALUE.REFARRAY open tag:
   
       if (!testStartTagOrEmptyTag(parser, entry, "VALUE.REFARRAY"))
           return false;
   
       if (entry.type != XmlEntry::EMPTY_TAG)
       {
           // For each VALUE.REFERENCE element:
   
           while (getValueReferenceElement(parser, reference))
           {
               referenceArray.append(reference);
           }
   
           expectEndTag(parser, "VALUE.REFARRAY");
       }
   
       value.set(referenceArray);
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getPropertyReferenceElement()
   //
   //     <!ELEMENT PROPERTY.REFERENCE (QUALIFIER*,(VALUE.REFERENCE)?)>
   //     <!ATTLIST PROPERTY.REFERENCE
   //         %CIMName;
   //         %ReferenceClass;
   //         %ClassOrigin;
   //         %Propagated;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getPropertyReferenceElement(
       XmlParser& parser,
       CIMProperty& property)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "PROPERTY.REFERENCE"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get PROPERTY.NAME attribute:
   
       CIMName name = getCimNameAttribute(
           parser.getLine(), entry, "PROPERTY.REFERENCE");
   
       // Get PROPERTY.REFERENCECLASS attribute:
   
       CIMName referenceClass = getReferenceClassAttribute(
           parser.getLine(), entry, "PROPERTY.REFERENCE");
   
       // Get PROPERTY.CLASSORIGIN attribute:
   
       CIMName classOrigin =
           getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.REFERENCE");
   
       // Get PROPERTY.PROPAGATED
   
       Boolean propagated = getCimBooleanAttribute(parser.getLine(), entry,
           "PROPERTY.REFERENCE", "PROPAGATED", false, false);
   
       // Create property:
   
       CIMValue value = CIMValue(CIMTYPE_REFERENCE, false, 0);
   //    value.set(CIMObjectPath());
       property = CIMProperty(
           name, value, 0, referenceClass, classOrigin, propagated);
   
       if (!empty)
       {
           getQualifierElements(parser, property);
   
           CIMObjectPath reference;
   
           if (getValueReferenceElement(parser, reference))
               property.setValue(reference);
   
           expectEndTag(parser, "PROPERTY.REFERENCE");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // GetPropertyElements()
   //
   //------------------------------------------------------------------------------
   
   template<class CONTAINER>
   void GetPropertyElements(XmlParser& parser, CONTAINER& container)
   {
       CIMProperty property;
   
       while (XmlReader::getPropertyElement(parser, property) ||
           XmlReader::getPropertyArrayElement(parser, property) ||
           XmlReader::getPropertyReferenceElement(parser, property))
       {
           try
           {
               container.addProperty(property);
           }
           catch (AlreadyExistsException&)
           {
   
             // l10n
   
             // throw XmlSemanticError(parser.getLine(), "duplicate property");
   
             MessageLoaderParms mlParms("Common.XmlReader.DUPLICATE_PROPERTY",
                                        "duplicate property");
   
             throw XmlSemanticError(parser.getLine(), mlParms);
           }
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // getParameterElement()
   //
   //     <!ELEMENT PARAMETER (QUALIFIER*)>
   //     <!ATTLIST PARAMETER
   //         %CIMName;
   //         %CIMType; #REQUIRED>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getParameterElement(
       XmlParser& parser,
       CIMParameter& parameter)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get PARAMETER.NAME attribute:
   
       CIMName name = getCimNameAttribute(parser.getLine(), entry, "PARAMETER");
   
       // Get PARAMETER.TYPE attribute:
   
       CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PARAMETER");
   
       // Create parameter:
   
       parameter = CIMParameter(name, type);
   
       if (!empty)
       {
           getQualifierElements(parser, parameter);
   
           expectEndTag(parser, "PARAMETER");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getParameterArrayElement()
   //
   //     <!ELEMENT PARAMETER.ARRAY (QUALIFIER*)>
   //     <!ATTLIST PARAMETER.ARRAY
   //         %CIMName;
   //         %CIMType; #REQUIRED
   //         %ArraySize;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getParameterArrayElement(
       XmlParser& parser,
       CIMParameter& parameter)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER.ARRAY"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get PARAMETER.ARRAY.NAME attribute:
   
       CIMName name = getCimNameAttribute(
           parser.getLine(), entry, "PARAMETER.ARRAY");
   
       // Get PARAMETER.ARRAY.TYPE attribute:
   
       CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PARAMETER.ARRAY");
   
       // Get PARAMETER.ARRAYSIZE attribute:
   
       Uint32 arraySize = 0;
       getArraySizeAttribute(parser.getLine(), entry, "PARAMETER.ARRAY",arraySize);
   
       // Create parameter:
   
       parameter = CIMParameter(name, type, true, arraySize);
   
       if (!empty)
       {
           getQualifierElements(parser, parameter);
   
           expectEndTag(parser, "PARAMETER.ARRAY");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getParameterReferenceElement()
   //
   //     <!ELEMENT PARAMETER.REFERENCE (QUALIFIER*)>
   //     <!ATTLIST PARAMETER.REFERENCE
   //         %CIMName;
   //         %ReferenceClass;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getParameterReferenceElement(
       XmlParser& parser,
       CIMParameter& parameter)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER.REFERENCE"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get PARAMETER.NAME attribute:
   
       CIMName name = getCimNameAttribute(
           parser.getLine(), entry, "PARAMETER.REFERENCE");
   
       // Get PARAMETER.REFERENCECLASS attribute:
   
       CIMName referenceClass = getReferenceClassAttribute(
           parser.getLine(), entry, "PARAMETER.REFERENCE");
   
       // Create parameter:
   
       parameter = CIMParameter(name, CIMTYPE_REFERENCE, false, 0, referenceClass);
   
       if (!empty)
       {
           getQualifierElements(parser, parameter);
           expectEndTag(parser, "PARAMETER.REFERENCE");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getParameterReferenceArrayElement()
   //
   //     <!ELEMENT PARAMETER.REFARRAY (QUALIFIER*)>
   //     <!ATTLIST PARAMETER.REFARRAY
   //         %CIMName;
   //         %ReferenceClass;
   //         %ArraySize;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getParameterReferenceArrayElement(
       XmlParser& parser,
       CIMParameter& parameter)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER.REFARRAY"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get PARAMETER.NAME attribute:
   
       CIMName name = getCimNameAttribute(
           parser.getLine(), entry, "PARAMETER.REFARRAY");
   
       // Get PARAMETER.REFERENCECLASS attribute:
   
       CIMName referenceClass = getReferenceClassAttribute(
           parser.getLine(), entry, "PARAMETER.REFARRAY");
   
       // Get PARAMETER.ARRAYSIZE attribute:
   
       Uint32 arraySize = 0;
       getArraySizeAttribute(parser.getLine(), entry, "PARAMETER.REFARRAY",
                             arraySize);
   
       // Create parameter:
   
       parameter = CIMParameter(name, CIMTYPE_REFERENCE, true, arraySize,
                                referenceClass);
   
       if (!empty)
       {
           getQualifierElements(parser, parameter);
           expectEndTag(parser, "PARAMETER.REFARRAY");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // GetParameterElements()
   //
   //------------------------------------------------------------------------------
   
   template<class CONTAINER>
   void GetParameterElements(XmlParser& parser, CONTAINER& container)
   {
       CIMParameter parameter;
   
       while (XmlReader::getParameterElement(parser, parameter) ||
           XmlReader::getParameterArrayElement(parser, parameter) ||
           XmlReader::getParameterReferenceElement(parser, parameter) ||
           XmlReader::getParameterReferenceArrayElement(parser, parameter))
       {
           try
           {
               container.addParameter(parameter);
           }
           catch (AlreadyExistsException&)
           {
   
             // l10n
   
             // throw XmlSemanticError(parser.getLine(), "duplicate parameter");
   
             MessageLoaderParms mlParms("Common.XmlReader.DUPLICATE_PARAMETER",
                                        "duplicate parameter");
   
             throw XmlSemanticError(parser.getLine(), mlParms);
           }
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // getQualifierDeclElement()
   //
   //     <!ELEMENT QUALIFIER.DECLARATION (SCOPE?,(VALUE|VALUE.ARRAY)?)>
   //     <!ATTLIST QUALIFIER.DECLARATION
   //         %CIMName;
   //         %CIMType; #REQUIRED
   //         ISARRAY (true|false) #IMPLIED
   //         %ArraySize;
   //         %QualifierFlavor;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getQualifierDeclElement(
       XmlParser& parser,
       CIMQualifierDecl& qualifierDecl)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "QUALIFIER.DECLARATION"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       // Get NAME attribute:
   
       CIMName name = getCimNameAttribute(
           parser.getLine(), entry, "QUALIFIER.DECLARATION");
   
       // Get TYPE attribute:
   
       CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "QUALIFIER.DECLARATION");
   
       // Get ISARRAY attribute:
   
       Boolean isArray = getCimBooleanAttribute(
           parser.getLine(), entry, "QUALIFIER.DECLARATION", "ISARRAY",
           false, false);
   
       // Get ARRAYSIZE attribute:
   
       Uint32 arraySize = 0;
       Boolean gotArraySize = getArraySizeAttribute(parser.getLine(),
           entry, "QUALIFIER.DECLARATION", arraySize);
   
       // Get flavor oriented attributes:
   
       CIMFlavor flavor = getFlavor (entry, parser.getLine (),
           "QUALIFIER.DECLARATION");
   
       // No need to look for interior elements if empty tag:
   
       CIMScope scope = CIMScope ();
       CIMValue value;
       Boolean gotValue = false;
   
       if (!empty)
       {
           // Get the option SCOPE element:
   
           scope = getOptionalScope(parser);
   
           // Get VALUE or VALUE.ARRAY element:
   
           if (getValueArrayElement(parser, type, value))
           {
               if (!isArray)
               {
   
                 // l10n
   
                 // 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())
               {
   
                 // l10n
   
                 // 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))
           {
               if (isArray)
               {
   
                 // 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");
   
                 throw XmlSemanticError(parser.getLine(), mlParms);
               }
   
               gotValue = true;
           }
   
           // Now get the closing tag:
   
           expectEndTag(parser, "QUALIFIER.DECLARATION");
       }
   
       if (!gotValue)
       {
           if (isArray)
               value.setNullValue(type, true, arraySize);
           else
               value.setNullValue(type, false);
       }
   
       CIMQualifierDecl tmp(name, value, scope, flavor, arraySize);
       qualifierDecl = CIMQualifierDecl(name, value, scope, flavor, arraySize);
       return true;
   }
   
   //------------------------------------------------------------------------------
   // getMethodElement()
   //
   //     <!ELEMENT METHOD (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|
   //         PARAMETER.ARRAY|PARAMETER.REFARRAY)*)>
   //     <!ATTLIST METHOD
   //         %CIMName;
   //         %CIMType; #IMPLIED
   //         %ClassOrigin;
   //         %Propagated;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getMethodElement(XmlParser& parser, CIMMethod& method)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "METHOD"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       CIMName name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");
   
       CIMType type;
       getCimTypeAttribute(parser.getLine(), entry, type, "PROPERTY");
   
       CIMName classOrigin =
           getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");
   
       Boolean propagated = getCimBooleanAttribute(
           parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false);
   
       method = CIMMethod(name, type, classOrigin, propagated);
   
       if (!empty)
       {
           // ATTN-RK-P2-20020219: Decoding algorithm must not depend on the
           // ordering of qualifiers and parameters.
           getQualifierElements(parser, method);
   
           GetParameterElements(parser, method);
   
           expectEndTag(parser, "METHOD");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   // getClassElement()
   //
   //     <!ELEMENT CLASS (QUALIFIER*,
   //         (PROPERTY|PROPERTY.ARRAY|PROPERTY.REFERENCE)*,METHOD*)>
   //     <!ATTLIST CLASS %CIMName; %SuperClass;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getClassElement(XmlParser& parser, CIMClass& cimClass)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "CLASS"))
           return false;
   
       CIMName name = getCimNameAttribute(parser.getLine(), entry, "CLASS");
   
       CIMName superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");
   
       cimClass = CIMClass(name, superClass);
   
           if(entry.type != XmlEntry::EMPTY_TAG)
           {
   
       // Get QUALIFIER elements:
   
       getQualifierElements(parser, cimClass);
   
       // Get PROPERTY elements:
   
       GetPropertyElements(parser, cimClass);
   
       // Get METHOD elements:
   
       CIMMethod method;
   
       while (getMethodElement(parser, method))
           cimClass.addMethod(method);
   
       // Get CLASS end tag:
   
           expectEndTag(parser, "CLASS");
           }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   // getInstanceElement()
   //
   //     <!ELEMENT INSTANCE (QUALIFIER*,
   //         (PROPERTY|PROPERTY.ARRAY|PROPERTY.REFERENCE)*) >
   //     <!ATTLIST INSTANCE
   //         %ClassName;>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getInstanceElement(
       XmlParser& parser,
       CIMInstance& cimInstance)
   {
       XmlEntry entry;
   
       if (!testStartTagOrEmptyTag(parser, entry, "INSTANCE"))
           return false;
   
       Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
   
       String className = getClassNameAttribute(
           parser.getLine(), entry, "INSTANCE");
   
       cimInstance = CIMInstance(className);
   
       if (!empty)
       {
           // Get QUALIFIER elements:
           getQualifierElements(parser, cimInstance);
   
           // Get PROPERTY elements:
           GetPropertyElements(parser, cimInstance);
   
           // Get INSTANCE end tag:
           expectEndTag(parser, "INSTANCE");
       }
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   // getNamedInstanceElement()
   //
   //     <!ELEMENT VALUE.NAMEDINSTANCE (INSTANCENAME,INSTANCE)>
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getNamedInstanceElement(
       XmlParser& parser,
       CIMInstance& namedInstance)
   {
       XmlEntry entry;
   
       if (!testStartTag(parser, entry, "VALUE.NAMEDINSTANCE"))
           return false;
   
       CIMObjectPath instanceName;
   
       // Get INSTANCENAME elements:
   
       if (!getInstanceNameElement(parser, instanceName))
       {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //    "expected INSTANCENAME element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCENAME_ELEMENT",
                                    "expected INSTANCENAME element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
       // Get INSTANCE elements:
   
       if (!getInstanceElement(parser, namedInstance))
       {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCE element");
   
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                                    "expected INSTANCE element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
       // Get VALUE.NAMEDINSTANCE end tag:
   
       expectEndTag(parser, "VALUE.NAMEDINSTANCE");
   
       namedInstance.setPath (instanceName);
   
       return true;
   }
   
   //------------------------------------------------------------------------------
   //
   // getObject()
   //
   //------------------------------------------------------------------------------
   
   void XmlReader::getObject(XmlParser& parser, CIMClass& x)
   {
       if (!getClassElement(parser, x))
       {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected CLASS element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
                                    "expected CLASS element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // getObject()
   //
   //------------------------------------------------------------------------------
   
   void XmlReader::getObject(XmlParser& parser, CIMInstance& x)
   {
       if (!getInstanceElement(parser, x))
       {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected INSTANCE element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                                    "expected INSTANCE element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // getObject()
   //
   //------------------------------------------------------------------------------
   
   void XmlReader::getObject(XmlParser& parser, CIMQualifierDecl& x)
   {
       if (!getQualifierDeclElement(parser, x))
       {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "expected QUALIFIER.DECLARATION element");
   
         MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_QUALIFIER_DECLARATION_ELEMENT",
                                    "expected QUALIFIER.DECLARATION element");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // getMessageStartTag()
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getMessageStartTag(
       XmlParser& parser,
       String& id,
       String& protocolVersion)
   {
       XmlEntry entry;
   
       if (!testStartTag(parser, entry, "MESSAGE"))
           return false;
   
       // Get MESSAGE.ID:
   
       if (!entry.getAttributeValue("ID", id)) {
   
         // 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:
   
       if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion)) {
   
         // 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;
   }
   
   //------------------------------------------------------------------------------
   //
   // getIMethodCallStartTag()
   //
   //------------------------------------------------------------------------------
   
   Boolean XmlReader::getIMethodCallStartTag(
       XmlParser& parser,
       const char*& name)
   {
       XmlEntry entry;
   
       if (!testStartTag(parser, entry, "IMETHODCALL"))
           return false;
   
       // Get IMETHODCALL.NAME attribute:
   
   
       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");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     expectEndTag(parser, "VALUE.REFERENCE");  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getPropertyReferenceElement()  // getIMethodResponseStartTag()
 //  
 //     <!ELEMENT PROPERTY.REFERENCE (QUALIFIER*,(VALUE.REFERENCE)?)>  
 //     <!ATTLIST PROPERTY.REFERENCE  
 //         %CIMName;  
 //         %ReferenceClass;  
 //         %ClassOrigin;  
 //         %Propagated;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getPropertyReferenceElement(  Boolean XmlReader::getIMethodResponseStartTag(
     XmlParser& parser,     XmlParser& parser,
     CIMProperty& property)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "PROPERTY.REFERENCE"))      if (!testStartTagOrEmptyTag(parser, entry, "IMETHODRESPONSE"))
         return false;         return false;
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;      isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
   
     // Get PROPERTY.NAME attribute:  
  
     String name = getCimNameAttribute(      // Get IMETHODRESPONSE.NAME attribute:
         parser.getLine(), entry, "PROPERTY.REFERENCE");  
  
     // Get PROPERTY.REFERENCECLASS attribute:      if (!entry.getAttributeValue("NAME", name)) {
  
     String referenceClass = getReferenceClassAttribute(        // l10n
         parser.getLine(), entry, "PROPERTY.REFERENCE");  
  
     // Get PROPERTY.CLASSORIGIN attribute:        // throw XmlValidationError(parser.getLine(),
         //   "Missing IMETHODRESPONSE.NAME attribute");
  
     String classOrigin =        MessageLoaderParms mlParms("Common.XmlReader.MISSING_IMETHODRESPONSE_ATTRIBUTE",
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.REFERENCE");                                   "Missing IMETHODRESPONSE.NAME attribute");
  
     // Get PROPERTY.PROPAGATED        throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     Boolean propagated = getCimBooleanAttribute(parser.getLine(), entry,  
         "PROPERTY.REFERENCE", "PROPAGATED", false, false);  
  
     // Create property:      return true;
   }
  
     CIMValue value;  //------------------------------------------------------------------------------
     value.set(CIMReference());  //
     property = CIMProperty(  // getIParamValueTag()
         name, value, 0, referenceClass, classOrigin, propagated);  //
   //------------------------------------------------------------------------------
  
     if (!empty)  Boolean XmlReader::getIParamValueTag(
       XmlParser& parser,
       const char*& name,
       Boolean& isEmptyTag)
     {     {
         getQualifierElements(parser, property);      XmlEntry entry;
  
         CIMReference reference;      if (!testStartTagOrEmptyTag(parser, entry, "IPARAMVALUE"))
           return false;
  
         if (getValueReferenceElement(parser, reference))      isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
             property.setValue(reference);  
  
         expectEndTag(parser, "PROPERTY.REFERENCE");      // Get IPARAMVALUE.NAME attribute:
   
       if (!entry.getAttributeValue("NAME", name)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing IPARAMVALUE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_IPARAMVALUE_ATTRIBUTE",
                                    "Missing IPARAMVALUE.NAME attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     return true;     return true;
Line 2136 
Line 3984 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // GetPropertyElements()  // rejectNullIParamValue()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 template<class CONTAINER>  void XmlReader::rejectNullIParamValue(
 void GetPropertyElements(XmlParser& parser, CONTAINER& container)      XmlParser& parser,
 {      Boolean isEmptyTag,
     CIMProperty property;      const char* paramName)
   
     while (XmlReader::getPropertyElement(parser, property) ||  
         XmlReader::getPropertyArrayElement(parser, property) ||  
         XmlReader::getPropertyReferenceElement(parser, property))  
     {  
         try  
         {         {
             container.addProperty(property);      if (isEmptyTag)
         }  
         catch (AlreadyExists&)  
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate property");          MessageLoaderParms mlParms("Common.XmlReader.INVALID_NULL_IPARAMVALUE",
         }              "A null value is not valid for IPARAMVALUE \"$0\".",
               paramName);
           throw XmlValidationError(parser.getLine(), mlParms);
     }     }
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getParameterElement()  // getBooleanValueElement()
 // //
 //     <!ELEMENT PARAMETER (QUALIFIER*)>  //     Get an elements like: "<VALUE>FALSE</VALUE>"
 //     <!ATTLIST PARAMETER  
 //         %CIMName;  
 //         %CIMType; #REQUIRED>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getParameterElement(  Boolean XmlReader::getBooleanValueElement(
     XmlParser& parser,     XmlParser& parser,
     CIMParameter& parameter)      Boolean& result,
       Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER"))      if (!testStartTag(parser, entry, "VALUE"))
         return false;      {
           if (required)
           {
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;            // l10n
  
     // Get PARAMETER.NAME attribute:            // throw XmlValidationError(parser.getLine(),
             // "Expected VALUE element");
  
     String name = getCimNameAttribute(parser.getLine(), entry, "PARAMETER");            MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                                        "Expected VALUE element");
  
     // Get PARAMETER.TYPE attribute:            throw XmlValidationError(parser.getLine(), mlParms);
           }
           return false;
       }
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PARAMETER");      expectContentOrCData(parser, entry);
  
     // Create parameter:      if (System::strcasecmp(entry.text, "TRUE") == 0)
           result = true;
       else if (System::strcasecmp(entry.text, "FALSE") == 0)
           result = false;
       else {
  
     parameter = CIMParameter(name, type);        // l10n
  
     if (!empty)        // throw XmlSemanticError(parser.getLine(),
     {        //   "Invalid value for VALUE element: must be \"TRUE\" or \"FALSE\"");
         getQualifierElements(parser, parameter);  
  
         expectEndTag(parser, "PARAMETER");        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");
   
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getParameterArrayElement()  //     DMTF CR Pending
 // //
 //     <!ELEMENT PARAMETER.ARRAY (QUALIFIER*)>  //     <!ELEMENT ERROR (INSTANCE*)>
 //     <!ATTLIST PARAMETER.ARRAY  //     <!ATTLIST ERROR
 //         %CIMName;  //         CODE CDATA #REQUIRED
 //         %CIMType; #REQUIRED  //         DESCRIPTION CDATA #IMPLIED>
 //         %ArraySize;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getParameterArrayElement(  Boolean XmlReader::getErrorElement(
     XmlParser& parser,     XmlParser& parser,
     CIMParameter& parameter)      CIMException& cimException,
       Boolean required)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER.ARRAY"))      if (!testStartTagOrEmptyTag(parser, entry, "ERROR"))
       {
         if (required) {
   
           // 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;
       }
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
  
     // Get PARAMETER.ARRAY.NAME attribute:      // Get ERROR.CODE
  
     String name = getCimNameAttribute(      Uint32 tmpCode;
         parser.getLine(), entry, "PARAMETER.ARRAY");  
  
     // Get PARAMETER.ARRAY.TYPE attribute:      if (!entry.getAttributeValue("CODE", tmpCode)) {
  
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PARAMETER.ARRAY");  
  
     // Get PARAMETER.ARRAYSIZE attribute:        // l10n
  
     Uint32 arraySize = 0;        // throw XmlValidationError(
     getArraySizeAttribute(parser.getLine(), entry, "PARAMETER.ARRAY",arraySize);        //       parser.getLine(), "missing ERROR.CODE attribute");
  
     // Create parameter:        MessageLoaderParms mlParms("Common.XmlReader.MISSING_ERROR_CODE_ATTRIBUTE",
                                    "missing ERROR.CODE attribute");
  
     parameter = CIMParameter(name, type, true, arraySize);        throw XmlValidationError(parser.getLine(), mlParms);
   
       }
   
       // Get ERROR.DESCRIPTION:
   
       String tmpDescription;
   
       entry.getAttributeValue("DESCRIPTION", tmpDescription);
  
     if (!empty)     if (!empty)
     {     {
         getQualifierElements(parser, parameter);          while (testStartTagOrEmptyTag(parser, entry))
           {
               skipElement(parser, entry);
           }
  
         expectEndTag(parser, "PARAMETER.ARRAY");          expectEndTag(parser, "ERROR");
     }     }
  
       cimException = PEGASUS_CIM_EXCEPTION(CIMStatusCode(tmpCode), tmpDescription);
     return true;     return true;
 } }
  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
   // getValueObjectElement()
 // //
 // getParameterReferenceElement()  // <!ELEMENT VALUE.OBJECT (CLASS|INSTANCE)>
 //  
 //     <!ELEMENT PARAMETER.REFERENCE (QUALIFIER*)>  
 //     <!ATTLIST PARAMETER.REFERENCE  
 //         %CIMName;  
 //         %ReferenceClass;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getParameterReferenceElement(  Boolean XmlReader::getValueObjectElement(
     XmlParser& parser,     XmlParser& parser,
     CIMParameter& parameter)      CIMObject& object)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "PARAMETER.REFERENCE"))      if (!testStartTag(parser, entry, "VALUE.OBJECT"))
         return false;         return false;
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;      CIMInstance cimInstance;
       CIMClass cimClass;
     // Get PARAMETER.NAME attribute:  
  
     String name = getCimNameAttribute(      if (XmlReader::getInstanceElement(parser, cimInstance))
         parser.getLine(), entry, "PARAMETER.REFERENCE");      {
           object = CIMObject(cimInstance);
       }
       else if (XmlReader::getClassElement(parser, cimClass))
       {
           object = CIMObject(cimClass);
       }
       else
       {
  
     // Get PARAMETER.REFERENCECLASS attribute:        // l10n
  
     String referenceClass = getReferenceClassAttribute(        // throw XmlValidationError(parser.getLine(),
         parser.getLine(), entry, "PARAMETER.REFERENCE");        //   "Expected INSTANCE or CLASS element");
  
     // Create parameter:        MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_OR_CLASS_ELEMENT",
                                    "Expected INSTANCE or CLASS element");
  
     parameter = CIMParameter(name, CIMType::REFERENCE, false, 0, referenceClass);        throw XmlValidationError(parser.getLine(), mlParms);
  
     if (!empty)  
     {  
         getQualifierElements(parser, parameter);  
         expectEndTag(parser, "PARAMETER.REFERENCE");  
     }     }
  
       expectEndTag(parser, "VALUE.OBJECT");
   
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
   // getValueObjectWithPathElement()
 // //
 // GetParameterElements()  // <!ELEMENT VALUE.OBJECTWITHPATH ((CLASSPATH,CLASS)|(INSTANCEPATH,INSTANCE))>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 template<class CONTAINER>  Boolean XmlReader::getValueObjectWithPathElement(
 void GetParameterElements(XmlParser& parser, CONTAINER& container)      XmlParser& parser,
       CIMObject& objectWithPath)
 { {
     CIMParameter parameter;      XmlEntry entry;
  
     while (XmlReader::getParameterElement(parser, parameter) ||      if (!testStartTag(parser, entry, "VALUE.OBJECTWITHPATH"))
         XmlReader::getParameterArrayElement(parser, parameter) ||          return false;
         XmlReader::getParameterReferenceElement(parser, parameter))  
       CIMObjectPath reference;
       Boolean isInstance = false;
   
       if (XmlReader::getInstancePathElement(parser, reference))
           isInstance = true;
       else if (!XmlReader::getClassPathElement(parser, reference))
     {     {
         try  
         // 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");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
   
       if (isInstance)
         {         {
             container.addParameter(parameter);          CIMInstance cimInstance;
   
           if (!XmlReader::getInstanceElement(parser, cimInstance))
           {
   
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //               "Expected INSTANCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                                        "Expected INSTANCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
         catch (AlreadyExists&)          objectWithPath = CIMObject (cimInstance);
           objectWithPath.setPath (reference);
       }
       else
       {
           CIMClass cimClass;
   
           if (!XmlReader::getClassElement(parser, cimClass))
         {         {
             throw XmlSemanticError(parser.getLine(), "duplicate parameter");  
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             // "Expected CLASS element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
                                        "Expected CLASS element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
         }         }
           objectWithPath = CIMObject (cimClass);
           objectWithPath.setPath (reference);
     }     }
   
       expectEndTag(parser, "VALUE.OBJECTWITHPATH");
   
       return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
   // getValueObjectWithLocalPathElement()
 // //
 // getQualifierDeclElement()  // <!ELEMENT VALUE.OBJECTWITHLOCALPATH
 //  //     ((LOCALCLASSPATH,CLASS)|(LOCALINSTANCEPATH,INSTANCE))>
 //     <!ELEMENT QUALIFIER.DECLARATION (SCOPE?,(VALUE|VALUE.ARRAY)?)>  
 //     <!ATTLIST QUALIFIER.DECLARATION  
 //         %CIMName;  
 //         %CIMType; #REQUIRED  
 //         ISARRAY (true|false) #IMPLIED  
 //         %ArraySize;  
 //         %QualifierFlavor;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getQualifierDeclElement(  Boolean XmlReader::getValueObjectWithLocalPathElement(
     XmlParser& parser,     XmlParser& parser,
     CIMQualifierDecl& qualifierDecl)      CIMObject& objectWithPath)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "QUALIFIER.DECLARATION"))      if (!testStartTag(parser, entry, "VALUE.OBJECTWITHLOCALPATH"))
         return false;         return false;
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;      CIMObjectPath reference;
       Boolean isInstance = false;
  
     // Get NAME attribute:      if (XmlReader::getLocalInstancePathElement(parser, reference))
           isInstance = true;
       else if (!XmlReader::getLocalClassPathElement(parser, reference))
       {
  
     String name = getCimNameAttribute(        // l10n
         parser.getLine(), entry, "QUALIFIER.DECLARATION");  
  
     // Get TYPE attribute:        // throw XmlValidationError(parser.getLine(),
         //   "Expected LOCALINSTANCEPATH or LOCALCLASSPATH element");
  
     CIMType type = getCimTypeAttribute(        //l10n updated
         parser.getLine(), entry, "QUALIFIER.DECLARATION");        MessageLoaderParms mlParms("Common.XmlConstants.MISSING_ELEMENT_LOCALPATH",
                                                                                                                   MISSING_ELEMENT_LOCALPATH);
   
         throw XmlValidationError(parser.getLine(), mlParms);
   
       }
   
       if (isInstance)
       {
           CIMInstance cimInstance;
   
           if (!XmlReader::getInstanceElement(parser, cimInstance))
           {
   
             // l10n
   
             // throw XmlValidationError(parser.getLine(),
             //               "Expected INSTANCE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_ELEMENT",
                                        "Expected INSTANCE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
   
           }
           objectWithPath = CIMObject (cimInstance);
           objectWithPath.setPath (reference);
       }
       else
       {
           CIMClass cimClass;
   
           if (!XmlReader::getClassElement(parser, cimClass))
           {
   
             // l10n
  
     // Get ISARRAY attribute:            // throw XmlValidationError(parser.getLine(),
             // "Expected CLASS element");
  
     Boolean isArray = false;            MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_CLASS_ELEMENT",
     getIsArrayAttribute(                                       "Expected CLASS element");
         parser.getLine(), entry, "QUALIFIER.DECLARATION", isArray);  
  
     // Get ARRAYSIZE attribute:            throw XmlValidationError(parser.getLine(), mlParms);
  
     Uint32 arraySize = 0;  
     Boolean gotArraySize = getArraySizeAttribute(parser.getLine(),  
         entry, "QUALIFIER.DECLARATION", arraySize);  
  
     // Get flavor oriented attributes:          }
           objectWithPath = CIMObject (cimClass);
           objectWithPath.setPath (reference);
       }
  
     Uint32 flavor = getFlavor(entry,parser.getLine(), "QUALIFIER.DECLARATION");      expectEndTag(parser, "VALUE.OBJECTWITHLOCALPATH");
  
     // No need to look for interior elements if empty tag:      return true;
   }
  
     Uint32 scope = CIMScope::NONE;  //------------------------------------------------------------------------------
     CIMValue value;  // getObjectArray()
   //
   // <object>
   //     (VALUE.OBJECT|VALUE.OBJECTWITHLOCALPATH|VALUE.OBJECTWITHPATH)
   //
   //------------------------------------------------------------------------------
  
     if (!empty)  void XmlReader::getObjectArray(
       XmlParser& parser,
       Array<CIMObject>& objectArray)
     {     {
         // Get the option SCOPE element:      CIMObject object;
       CIMObject objectWithPath;
         scope = getOptionalScope(parser);  
  
         // Get VALUE or VALUE.ARRAY element:      objectArray.clear();
  
         if (getValueArrayElement(parser, type, value))      if (getValueObjectElement(parser, object))
         {  
             if (!isArray)  
             {             {
                 throw XmlSemanticError(parser.getLine(),          objectArray.append(object);
                     "VALUE.ARRAY element encountered without "          while (getValueObjectElement(parser, object))
                     "ISARRAY attribute");              objectArray.append(object);
             }             }
       else if (getValueObjectWithPathElement(parser, objectWithPath))
             if (arraySize && arraySize != value.getArraySize())  
             {             {
                 throw XmlSemanticError(parser.getLine(),          objectArray.append(objectWithPath);
                     "VALUE.ARRAY size is not the same as "          while (getValueObjectWithPathElement(parser, objectWithPath))
                     "ARRAYSIZE attribute");              objectArray.append(objectWithPath);
             }  
         }         }
         else if (getValueElement(parser, type, value))      else if (getValueObjectWithLocalPathElement(parser, objectWithPath))
         {  
             if (isArray)  
             {             {
                 throw XmlSemanticError(parser.getLine(),          objectArray.append(objectWithPath);
                     "ISARRAY attribute used but VALUE element encountered");          while (getValueObjectWithLocalPathElement(parser, objectWithPath))
               objectArray.append(objectWithPath);
             }             }
         }         }
  
         // Now get the closing tag:  //------------------------------------------------------------------------------
   //
   // <objectName>: (CLASSNAME|INSTANCENAME)
   //
   //------------------------------------------------------------------------------
  
         expectEndTag(parser, "QUALIFIER.DECLARATION");  Boolean XmlReader::getObjectNameElement(
     }      XmlParser& parser,
       CIMObjectPath& objectName)
   {
       CIMName className;
  
     if (value.getType() == CIMType::NONE)      if (getClassNameElement(parser, className, false))
     {     {
         if (isArray)          objectName.set(String(), CIMNamespaceName(), className);
             value.setNullValue(type, true, arraySize);          return true;
       }
       else if (getInstanceNameElement(parser, objectName))
           return true;
         else         else
             value.setNullValue(type, false);      {
   
         // 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);
   
     }     }
  
     CIMQualifierDecl tmp(name, value, scope, flavor, arraySize);      PEGASUS_UNREACHABLE( return false; )
     qualifierDecl = CIMQualifierDecl(name, value, scope, flavor, arraySize);  
     return true;  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // getMethodElement()  
 // //
 //     <!ELEMENT METHOD (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|  // <!ELEMENT OBJECTPATH (INSTANCEPATH|CLASSPATH)>
 //         PARAMETER.ARRAY|PARAMETER.REFARRAY)*)>  
 //     <!ATTLIST METHOD  
 //         %CIMName;  
 //         %CIMType; #IMPLIED  
 //         %ClassOrigin;  
 //         %Propagated;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getMethodElement(XmlParser& parser, CIMMethod& method)  Boolean XmlReader::getObjectPathElement(
       XmlParser& parser,
       CIMObjectPath& objectPath)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTagOrEmptyTag(parser, entry, "METHOD"))      if (!testStartTag(parser, entry, "OBJECTPATH"))
         return false;         return false;
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;      if (getClassPathElement(parser, objectPath))
       {
     String name = getCimNameAttribute(parser.getLine(), entry, "PROPERTY");          expectEndTag(parser, "OBJECTPATH");
           return true;
     CIMType type = getCimTypeAttribute(parser.getLine(), entry, "PROPERTY");      }
       else if (getInstancePathElement(parser, objectPath))
     String classOrigin =      {
         getClassOriginAttribute(parser.getLine(), entry, "PROPERTY");          expectEndTag(parser, "OBJECTPATH");
           return true;
     Boolean propagated = getCimBooleanAttribute(      }
         parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false);      else
       {
  
     method = CIMMethod(name, type, classOrigin, propagated);        // l10n
  
     if (!empty)        // throw XmlValidationError(parser.getLine(),
     {        //   "expected INSTANCEPATH or CLASSPATH element");
         getQualifierElements(parser, method);  
  
         GetParameterElements(parser, method);        MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCEPATH_OR_CLASSPATH_ELEMENT",
                                    "expected INSTANCEPATH or CLASSPATH element");
  
         expectEndTag(parser, "METHOD");        throw XmlValidationError(parser.getLine(), mlParms);
     }     }
  
     return true;      PEGASUS_UNREACHABLE ( return false; )
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // getClassElement()  
 // //
 //     <!ELEMENT CLASS (QUALIFIER*,  // getEMethodCallStartTag()
 //         (PROPERTY|PROPERTY.ARRAY|PROPERTY.REFERENCE)*,METHOD*)>  
 //     <!ATTLIST CLASS %CIMName; %SuperClass;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getClassElement(XmlParser& parser, CIMClass& cimClass)  Boolean XmlReader::getEMethodCallStartTag(
       XmlParser& parser,
       const char*& name)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "CLASS"))      if (!testStartTag(parser, entry, "EXPMETHODCALL"))
         return false;         return false;
  
     String name = getCimNameAttribute(parser.getLine(), entry, "CLASS");      // Get EXPMETHODCALL.NAME attribute:
   
     String superClass = getSuperClassAttribute(parser.getLine(), entry,"CLASS");  
   
     cimClass = CIMClass(name, superClass);  
   
     // Get QUALIFIER elements:  
   
     getQualifierElements(parser, cimClass);  
   
     // Get PROPERTY elements:  
  
     GetPropertyElements(parser, cimClass);  
  
     // Get METHOD elements:        if (!entry.getAttributeValue("NAME", name)) {
  
     CIMMethod method;          // l10n
  
     while (getMethodElement(parser, method))          // throw XmlValidationError(parser.getLine(),
         cimClass.addMethod(method);          // "Missing EXPMETHODCALL.NAME attribute");
  
     // Get CLASS end tag:          MessageLoaderParms mlParms("Common.XmlReader.MISSING_EXPMETHODCALL_ATTRIBUTE",
                                      "Missing EXPMETHODCALL.NAME attribute");
  
     expectEndTag(parser, "CLASS");          throw XmlValidationError(parser.getLine(), mlParms);
         }
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // getInstanceElement()  
 // //
 //     <!ELEMENT INSTANCE (QUALIFIER*,  // getEMethodResponseStartTag()
 //         (PROPERTY|PROPERTY.ARRAY|PROPERTY.REFERENCE)*) >  
 //     <!ATTLIST INSTANCE  
 //         %ClassName;>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getInstanceElement(  Boolean XmlReader::getEMethodResponseStartTag(
     XmlParser& parser,     XmlParser& parser,
     CIMInstance& cimInstance)      const char*& name,
       Boolean& isEmptyTag)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "INSTANCE"))      if (!testStartTagOrEmptyTag(parser, entry, "EXPMETHODRESPONSE"))
         return false;         return false;
  
     String className = getClassNameAttribute(      isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
         parser.getLine(), entry, "INSTANCE");  
   
     cimInstance = CIMInstance(className);  
  
     // Get QUALIFIER elements:      // Get EXPMETHODRESPONSE.NAME attribute:
  
     getQualifierElements(parser, cimInstance);  
  
     // Get PROPERTY elements:        if (!entry.getAttributeValue("NAME", name)) {
           // l10n
  
     GetPropertyElements(parser, cimInstance);          // throw XmlValidationError(
           //   parser.getLine(), "Missing EXPMETHODRESPONSE.NAME attribute");
  
     // Get INSTANCE end tag:          MessageLoaderParms mlParms("Common.XmlReader.MISSING_EXPMETHODRESPONSE_ATTRIBUTE",
                                      "Missing EXPMETHODRESPONSE.NAME attribute");
  
     expectEndTag(parser, "INSTANCE");          throw XmlValidationError(parser.getLine(), mlParms);
         }
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getMessageStartTag()  // getEParamValueTag()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getMessageStartTag(  Boolean XmlReader::getEParamValueTag(
     XmlParser& parser,     XmlParser& parser,
     Uint32& id,      const char*& name)
     const char*& protocolVersion)  
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "MESSAGE"))      if (!testStartTag(parser, entry, "EXPPARAMVALUE"))
         return false;         return false;
  
     // Get MESSAGE.ID:      // Get EXPPARAMVALUE.NAME attribute:
  
     if (!entry.getAttributeValue("ID", id))  
         throw XmlValidationError(parser.getLine(),  
             "Bad or missing MESSAGE.ID attribute");  
  
     // Get MESSAGE.PROTOCOLVERSION:      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);
       }
   
  
     if (!entry.getAttributeValue("PROTOCOLVERSION", protocolVersion))  
         throw XmlValidationError(parser.getLine(),  
             "Bad or missing MESSAGE.ID attribute");  
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getIMethodCallStartTag()  // getMethodCallStartTag()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getIMethodCallStartTag(  Boolean XmlReader::getMethodCallStartTag(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)     const char*& name)
 { {
     XmlEntry entry;     XmlEntry entry;
  
     if (!testStartTag(parser, entry, "IMETHODCALL"))      if (!testStartTag(parser, entry, "METHODCALL"))
         return false;         return false;
  
     // Get IMETHODCALL.NAME attribute:      // Get METHODCALL.NAME attribute:
   
   
       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");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     if (!entry.getAttributeValue("NAME", name))  
         throw XmlValidationError(parser.getLine(),  
             "Missing IMETHODCALL.NAME attribute");  
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getIMethodResponseStartTag()  // getMethodResponseStartTag()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getIMethodResponseStartTag(  Boolean XmlReader::getMethodResponseStartTag(
     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, "METHODRESPONSE"))
         return false;         return false;
  
     // Get IMETHODRESPONSE.NAME attribute:      isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG);
  
     if (!entry.getAttributeValue("NAME", name))      // Get METHODRESPONSE.NAME attribute:
         throw XmlValidationError(parser.getLine(),  
             "Missing IMETHODRESPONSE.NAME attribute");  
       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");
   
         throw XmlValidationError(parser.getLine(), mlParms);
       }
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getIParamValueTag()  // getParamValueElement()
   //
   // <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?>
   // <!ATTLIST PARAMVALUE
   //      %CIMName;
   //      %ParamType;>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getIParamValueTag(  Boolean XmlReader::getParamValueElement(
     XmlParser& parser,     XmlParser& parser,
     const char*& name)      CIMParamValue& paramValue)
 { {
     XmlEntry entry;     XmlEntry entry;
       const char* name;
       CIMType type=CIMTYPE_BOOLEAN;
       CIMValue value;
  
     if (!testStartTag(parser, entry, "IPARAMVALUE"))      if (!testStartTagOrEmptyTag(parser, entry, "PARAMVALUE"))
         return false;         return false;
  
     // Get IPARAMVALUE.NAME attribute:      Boolean empty = entry.type == XmlEntry::EMPTY_TAG;
  
     if (!entry.getAttributeValue("NAME", name))      // Get PARAMVALUE.NAME attribute:
         throw XmlValidationError(parser.getLine(),  
             "Missing IPARAMVALUE.NAME attribute");  
  
     return true;      if (!entry.getAttributeValue("NAME", name)) {
   
         // l10n
   
         // throw XmlValidationError(parser.getLine(),
         //   "Missing PARAMVALUE.NAME attribute");
   
         MessageLoaderParms mlParms("Common.XmlReader.MISSING_PARAMVALUE_ATTRIBUTE",
                                    "Missing PARAMVALUE.NAME attribute");
   
         throw XmlValidationError(parser.getLine(), mlParms);
 } }
  
 //------------------------------------------------------------------------------  
 //  
 // getBooleanValueElement()  
 //  
 //     Get an elements like: "<VALUE>FALSE</VALUE>"  
 //  
 //------------------------------------------------------------------------------  
  
 Boolean XmlReader::getBooleanValueElement(      // Get PARAMVALUE.PARAMTYPE attribute:
     XmlParser& parser,  
     Boolean& result,      Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type,
     Boolean required)                                            "PARAMVALUE", "PARAMTYPE", false);
   
       if (!empty)
 { {
     XmlEntry entry;          // Parse VALUE.REFERENCE and VALUE.REFARRAY type
           if ( (type == CIMTYPE_REFERENCE) || !gotType )
           {
               CIMObjectPath reference;
               if (XmlReader::getValueReferenceElement(parser, reference))
               {
                   value.set(reference);
                   type = CIMTYPE_REFERENCE;
                   gotType = true;
               }
               else if (XmlReader::getValueReferenceArrayElement(parser, value))
               {
                   type = CIMTYPE_REFERENCE;
                   gotType = true;
               }
               // If type==reference but no VALUE.REFERENCE found, use null value
           }
  
     if (!testStartTag(parser, entry, "VALUE"))          // Parse non-reference value
           if ( type != CIMTYPE_REFERENCE )
     {     {
         if (required)              CIMType effectiveType;
               if (!gotType)
         {         {
             throw XmlValidationError(parser.getLine(),                  // If we don't know what type the value is, read it as a String
                 "Expected VALUE element");                  effectiveType = CIMTYPE_STRING;
         }         }
         return false;              else
               {
                   effectiveType = type;
     }     }
  
     expectContentOrCData(parser, entry);              if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) &&
                    !XmlReader::getValueElement(parser, effectiveType, value) )
               {
                   value.clear();    // Isn't necessary; should already be cleared
               }
           }
  
     if (strcmp(entry.text, "TRUE") == 0)          expectEndTag(parser, "PARAMVALUE");
         result = true;      }
     else if (strcmp(entry.text, "FALSE") == 0)  
         result = false;  
     else  
         throw XmlSemanticError(parser.getLine(),  
             "Bad value for VALUE element: must be \"TRUE\" or \"FALSE\"");  
  
     expectEndTag(parser, "VALUE");      paramValue = CIMParamValue(name, value, gotType);
  
     return true;     return true;
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // getErrorElement()  // getReturnValueElement()
 // //
 //     <!ELEMENT ERROR EMPTY>  // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)>
 //     <!ATTLIST ERROR  // <!ATTLIST RETURNVALUE
 //         CODE CDATA #REQUIRED  //      %ParamType;>
 //         DESCRIPTION CDATA #IMPLIED>  
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Boolean XmlReader::getErrorElement(  Boolean XmlReader::getReturnValueElement(
     XmlParser& parser,     XmlParser& parser,
     CIMException::Code& code,      CIMValue& returnValue)
     const char*& description,  
     Boolean required)  
 { {
     XmlEntry entry;     XmlEntry entry;
       CIMType type;
       CIMValue value;
  
     if (!testStartTagOrEmptyTag(parser, entry, "ERROR"))      if (!testStartTag(parser, entry, "RETURNVALUE"))
     {  
         if (required)  
             throw XmlValidationError(parser.getLine(),"Expected ERROR element");  
         return false;         return false;
   
       // Get RETURNVALUE.PARAMTYPE attribute:
       // NOTE: Array type return values are not allowed (2/20/02)
   
       Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type,
                                             "RETURNVALUE", "PARAMTYPE", false);
   
       // Parse VALUE.REFERENCE type
       if ( (type == CIMTYPE_REFERENCE) || !gotType )
       {
           CIMObjectPath reference;
           if (XmlReader::getValueReferenceElement(parser, reference))
           {
               returnValue.set(reference);
               type = CIMTYPE_REFERENCE;
               gotType = true;
     }     }
           else if (type == CIMTYPE_REFERENCE)
           {
  
     Boolean empty = entry.type == XmlEntry::EMPTY_TAG;            // l10n
  
     // Get ERROR.CODE            // throw XmlValidationError(parser.getLine(),
             //   "expected VALUE.REFERENCE element");
  
     Uint32 tmpCode;            MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_REFERENCE_ELEMENT",
                                        "expected VALUE.REFERENCE element");
  
     if (!entry.getAttributeValue("CODE", tmpCode))            throw XmlValidationError(parser.getLine(), mlParms);
         throw XmlValidationError(          }
             parser.getLine(), "missing ERROR.CODE attribute");      }
  
     code = CIMException::Code(tmpCode);      // Parse non-reference return value
       if ( type != CIMTYPE_REFERENCE )
       {
           if (!gotType)
           {
               // If we don't know what type the value is, read it as a String
               type = CIMTYPE_STRING;
           }
  
     // Get ERROR.DESCRIPTION:          if ( !XmlReader::getValueElement(parser, type, returnValue) )
           {
  
     description = "";            // l10n
     entry.getAttributeValue("DESCRIPTION", description);  
  
     if (!empty)            // throw XmlValidationError(parser.getLine(),
         expectEndTag(parser, "ERROR");            //   "expected VALUE element");
   
             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_VALUE_ELEMENT",
                                        "expected VALUE element");
   
             throw XmlValidationError(parser.getLine(), mlParms);
           }
       }
   
       expectEndTag(parser, "RETURNVALUE");
  
     return true;     return true;
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
   


Legend:
Removed from v.1.7  
changed lines
  Added in v.1.108

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2