version 1.94.4.4, 2004/07/02 14:40:08
|
version 1.117, 2006/03/03 20:31:25
|
|
|
//%2003//////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L. P., IBM Corp., The Open Group, Tivoli Systems. |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; | // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; |
// IBM Corp.; EMC Corporation, The Open Group. | // IBM Corp.; EMC Corporation, The Open Group. |
|
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// (carolann_graves@hp.com) | // (carolann_graves@hp.com) |
// Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com) | // Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com) |
// Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) | // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) |
// Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
// Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com) |
|
// Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#3103 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <cctype> | #include <cctype> |
#include <cstdio> | #include <cstdio> |
#include <cstdlib> | #include <cstdlib> |
#if defined(PEGASUS_OS_TYPE_UNIX) |
#if defined(PEGASUS_OS_TYPE_UNIX) || defined(PEGASUS_OS_VMS) |
#include <errno.h> | #include <errno.h> |
#endif | #endif |
#include "CIMName.h" | #include "CIMName.h" |
|
|
#endif | #endif |
// l10n | // l10n |
#include <Pegasus/Common/MessageLoader.h> | #include <Pegasus/Common/MessageLoader.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
|
#include "CIMNameUnchecked.h" |
| |
#define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000)) | #define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000)) |
#define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF) | #define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF) |
|
|
| |
#endif | #endif |
} | } |
return CIMName (name); |
return CIMNameUnchecked(name); |
} | } |
| |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
if (!entry.getAttributeValue("CLASSORIGIN", name)) | if (!entry.getAttributeValue("CLASSORIGIN", name)) |
return CIMName(); | return CIMName(); |
| |
// KS 200209 This may be temp but we are adding test for form |
|
// CLASSNAME = "" for Wbemservices interoperability. Returns same |
|
// as if attribute did not exist. |
|
if (name.size() == 0) |
|
return CIMName(); |
|
|
|
if (!CIMName::legal(name)) | if (!CIMName::legal(name)) |
{ | { |
// l10n | // l10n |
|
|
| |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
// | // |
|
// getEmbeddedObjectAttribute() |
|
// |
|
// <!ENTITY % EmbeddedObject "EMBEDDEDOBJECT (object | instance) #IMPLIED"> |
|
// |
|
//------------------------------------------------------------------------------ |
|
|
|
String XmlReader::getEmbeddedObjectAttribute( |
|
Uint32 lineNumber, |
|
const XmlEntry& entry, |
|
const char* elementName) |
|
{ |
|
String embeddedObject; |
|
|
|
if (!entry.getAttributeValue("EMBEDDEDOBJECT", embeddedObject)) |
|
return String(); |
|
|
|
// The embeddedObject attribute, if present, must have the string |
|
// value "object" or "instance". |
|
if (!(String::equal(embeddedObject, "object") || |
|
String::equal(embeddedObject, "instance") |
|
) |
|
) |
|
{ |
|
// l10n |
|
|
|
// char buffer[MESSAGE_SIZE]; |
|
// sprintf(buffer, |
|
// "Illegal value for %s.EMBEDDEDOBJECT attribute", elementName); |
|
// throw XmlSemanticError(lineNumber, buffer); |
|
|
|
char buffer[MESSAGE_SIZE]; |
|
sprintf(buffer, "%s.EMBEDDEDOBJECT", elementName); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.ILLEGAL_VALUE_FOR_ATTRIBUTE", |
|
"Illegal value for $0 attribute", |
|
buffer); |
|
|
|
throw XmlSemanticError(lineNumber, mlParms); |
|
|
|
} |
|
|
|
return embeddedObject; |
|
} |
|
|
|
//------------------------------------------------------------------------------ |
|
// |
// getReferenceClassAttribute() | // getReferenceClassAttribute() |
// | // |
// <!ENTITY % ReferenceClass "REFERENCECLASS CDATA #IMPLIED"> | // <!ENTITY % ReferenceClass "REFERENCECLASS CDATA #IMPLIED"> |
|
|
type = CIMTYPE_REAL64; | type = CIMTYPE_REAL64; |
else if (strcmp(typeName, "reference") == 0) | else if (strcmp(typeName, "reference") == 0) |
type = CIMTYPE_REFERENCE; | type = CIMTYPE_REFERENCE; |
|
// PEP 194: |
|
// Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, just a |
|
// Pegasus internal representation of an embedded object, so it won't be found here. |
else unrecognizedType = true; | else unrecognizedType = true; |
| |
if (unrecognizedType || | if (unrecognizedType || |
|
|
{ | { |
// Convert UTF-8 to UTF-16 and return the String | // Convert UTF-8 to UTF-16 and return the String |
utf8Chars.append('\0'); | utf8Chars.append('\0'); |
return String((char *)utf8Chars.getData(),STRING_FLAG_UTF8); |
return String((char *)utf8Chars.getData()); |
} | } |
else | else |
{ | { |
|
|
| |
case CIMTYPE_STRING: | case CIMTYPE_STRING: |
{ | { |
return CIMValue(String(valueString, STRING_FLAG_UTF8)); |
return CIMValue(String(valueString)); |
} | } |
| |
case CIMTYPE_CHAR16: | case CIMTYPE_CHAR16: |
|
|
} | } |
*/ | */ |
// Converts UTF-8 to UTF-16 | // Converts UTF-8 to UTF-16 |
String tmp(valueString, STRING_FLAG_UTF8); |
String tmp(valueString); |
if (tmp.size() != 1) | if (tmp.size() != 1) |
{ | { |
// l10n | // l10n |
|
|
return CIMValue(x); | return CIMValue(x); |
} | } |
| |
|
// PEP 194: |
|
// Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, but just a |
|
// Pegasus internal representation of an embedded object. However, this case is |
|
// used when decoding string representations of embedded objects. |
|
case CIMTYPE_OBJECT: |
|
{ |
|
CIMObject x; |
|
|
|
if (*valueString == '\0') |
|
{ |
|
return CIMValue(CIMTYPE_OBJECT, false, 0); |
|
} |
|
else |
|
{ |
|
// Convert the non-NULL string to a CIMObject (containing either a |
|
// CIMInstance or a CIMClass). |
|
|
|
// First we need to create a new "temporary" XmlParser that is |
|
// just the value of the Embedded Object in String representation. |
|
AutoArrayPtr<char> tmp_buffer(new char[strlen(valueString) + 1]); |
|
strcpy(tmp_buffer.get(), valueString); |
|
XmlParser tmp_parser(tmp_buffer.get()); |
|
|
|
// The next bit of logic constructs a CIMObject from the Embedded Object String. |
|
// It is similar to the method XmlReader::getValueObjectElement(). |
|
CIMInstance cimInstance; |
|
CIMClass cimClass; |
|
|
|
if (XmlReader::getInstanceElement(tmp_parser, cimInstance)) |
|
{ |
|
x = CIMObject(cimInstance); |
|
} |
|
else if (XmlReader::getClassElement(tmp_parser, cimClass)) |
|
{ |
|
x = CIMObject(cimClass); |
|
} |
|
else |
|
{ |
|
// l10n |
|
|
|
// throw XmlValidationError(parser.getLine(), |
|
// "Expected INSTANCE or CLASS element"); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_INSTANCE_OR_CLASS_ELEMENT", |
|
"Expected INSTANCE or CLASS element"); // change "element" to "embedded object" |
|
|
|
throw XmlValidationError(lineNumber, mlParms); |
|
|
|
} |
|
// Ok, now we can delete the storage for the temporary XmlParser. |
|
tmp_buffer.reset(); |
|
} |
|
return CIMValue(x); |
|
} |
|
|
default: | default: |
break; | break; |
} | } |
|
|
| |
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; |
| |
|
|
if (!empty) | if (!empty) |
{ | { |
if (testContentOrCData(parser, entry)) | if (testContentOrCData(parser, entry)) |
|
{ |
valueString = entry.text; | valueString = entry.text; |
|
} |
| |
expectEndTag(parser, "VALUE"); | expectEndTag(parser, "VALUE"); |
} | } |
|
|
expectEndTag(parser, "VALUE"); | expectEndTag(parser, "VALUE"); |
} | } |
| |
str = String(valueString,STRING_FLAG_UTF8); |
str = String(valueString); |
return true; | return true; |
} | } |
| |
|
|
case CIMTYPE_REAL64: | case CIMTYPE_REAL64: |
return StringArrayToValueAux(lineNumber, array, type, (Real64*)0); | return StringArrayToValueAux(lineNumber, array, type, (Real64*)0); |
| |
|
// PEP 194: |
|
// Note that "object" (ie. CIMTYPE_OBJECT) is not a real CIM datatype, but just a |
|
// Pegasus internal representation of an embedded object. However, this case is |
|
// used when decoding string representations of embedded objects. |
|
case CIMTYPE_OBJECT: |
|
return StringArrayToValueAux(lineNumber, array, type, (CIMObject*)0); |
|
|
default: | default: |
break; | break; |
} | } |
|
|
// 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: |
| |
CIMName name = getCimNameAttribute(parser.getLine(), entry, "QUALIFIER"); | CIMName name = getCimNameAttribute(parser.getLine(), entry, "QUALIFIER"); |
|
|
| |
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)) |
{ | { |
|
|
// Expect </QUALIFIER>: | // Expect </QUALIFIER>: |
| |
expectEndTag(parser, "QUALIFIER"); | expectEndTag(parser, "QUALIFIER"); |
|
} |
| |
// Build qualifier: | // Build qualifier: |
| |
|
|
// %CIMName; | // %CIMName; |
// %ClassOrigin; | // %ClassOrigin; |
// %Propagated; | // %Propagated; |
|
// %EmbeddedObject; #IMPLIED |
// %CIMType; #REQUIRED> | // %CIMType; #REQUIRED> |
// | // |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
Boolean propagated = getCimBooleanAttribute( | Boolean propagated = getCimBooleanAttribute( |
parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false); | parser.getLine(), entry, "PROPERTY", "PROPAGATED", false, false); |
| |
|
// Get PROPERTY.EMBEDDEDOBJECT attribute: |
|
|
|
String embeddedObject = getEmbeddedObjectAttribute( |
|
parser.getLine(), entry, "PROPERTY"); |
|
|
// Get PROPERTY.TYPE attribute: | // Get PROPERTY.TYPE attribute: |
| |
CIMType type; | CIMType type; |
|
|
| |
if (!empty) | if (!empty) |
{ | { |
// Get qualifiers: |
// Get qualifiers. We need to do this before checking for the property as an |
|
// embedded object, because we need to also check for the EmbeddedObject qualifier. |
getQualifierElements(parser, property); | getQualifierElements(parser, property); |
|
} |
|
|
|
Boolean embeddedObjectQualifierValue = false; |
|
Uint32 ix = property.findQualifier(CIMName("EmbeddedObject")); |
|
if (ix != PEG_NOT_FOUND) |
|
{ |
|
property.getQualifier(ix).getValue().get(embeddedObjectQualifierValue); |
|
} |
|
|
|
// If the EMBEDDEDOBJECT attribute is present with value "object" |
|
// or the EmbeddedObject qualifier exists on this property with value "true" |
|
// then |
|
// Convert the EmbeddedObject-encoded string into a CIMObject |
|
if (String::equal(embeddedObject, "object") || embeddedObjectQualifierValue) |
|
{ |
|
// The EMBEDDEDOBJECT attribute is only valid on Properties of type string |
|
if (type == CIMTYPE_STRING) |
|
{ |
|
type = CIMTYPE_OBJECT; |
|
CIMValue new_value(type, false); |
|
CIMProperty new_property = CIMProperty(name, new_value, 0, CIMName(), classOrigin, propagated); |
|
|
|
// Copy the qualifiers from the String property to the CIMObject property. |
|
for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix) |
|
{ |
|
// All properties are copied, including the EmbeddedObject qualifier. |
|
// This way we don't have to keep track to know that the EmbeddedObject |
|
// qualifier needs to be added back during the encode step. |
|
new_property.addQualifier(property.getQualifier(ix)); |
|
} |
|
|
|
value = new_value; |
|
property = new_property; |
|
} |
|
else |
|
{ |
|
// Error -- throw exception |
|
// (the EmbeddedObject attribute may be applied only to entities that have the type String) |
| |
// Get value: Insert value if getValueElement exists (returns True) |
// l10n |
| |
|
// throw XmlValidationError(parser.getLine(), |
|
// "expected string type"); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE", |
|
"The EMBEDDEDOBJECT attribute is only valid on string types."); |
|
|
|
throw XmlValidationError(parser.getLine(), mlParms); |
|
} |
|
} |
|
|
|
// Continue on to get property value, if not empty. |
|
if (!empty) |
|
{ |
if (getValueElement(parser, type, value)) | if (getValueElement(parser, type, value)) |
property.setValue(value); | property.setValue(value); |
|
|
expectEndTag(parser, "PROPERTY"); | expectEndTag(parser, "PROPERTY"); |
} | } |
| |
|
|
// %CIMType; #REQUIRED | // %CIMType; #REQUIRED |
// %ArraySize; | // %ArraySize; |
// %ClassOrigin; | // %ClassOrigin; |
// %Propagated;> |
// %Propagated; |
|
// %EmbeddedObject; #IMPLIED> |
// | // |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
| |
|
|
| |
// Get PROPERTY.CLASSORIGIN attribute: | // Get PROPERTY.CLASSORIGIN attribute: |
| |
CIMName classOrigin |
CIMName classOrigin = getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.ARRAY"); |
= getClassOriginAttribute(parser.getLine(), entry, "PROPERTY.ARRAY"); |
|
| |
// Get PROPERTY.ARRAY.PROPAGATED | // Get PROPERTY.ARRAY.PROPAGATED |
| |
Boolean propagated = getCimBooleanAttribute( |
Boolean propagated = getCimBooleanAttribute(parser.getLine() |
parser.getLine(), entry, "PROPERTY.ARRAY", "PROPAGATED", false, false); |
,entry |
|
,"PROPERTY.ARRAY" |
|
,"PROPAGATED" |
|
,false |
|
,false); |
|
|
|
// Get PROPERTY.EMBEDDEDOBJECT attribute: |
|
|
|
String embeddedObject = getEmbeddedObjectAttribute(parser.getLine() |
|
,entry |
|
,"PROPERTY.ARRAY"); |
| |
// Create property: | // Create property: |
| |
CIMValue value(type, true, arraySize); | CIMValue value(type, true, arraySize); |
property = CIMProperty( |
property = CIMProperty(name, value, arraySize, CIMName(), classOrigin, propagated); |
name, value, arraySize, CIMName(), classOrigin, propagated); |
|
| |
if (!empty) | if (!empty) |
{ | { |
// Get qualifiers: | // Get qualifiers: |
|
|
getQualifierElements(parser, property); | getQualifierElements(parser, property); |
|
} |
|
|
|
Boolean embeddedObjectQualifierValue = false; |
|
Uint32 ix = property.findQualifier(CIMName("EmbeddedObject")); |
|
if (ix != PEG_NOT_FOUND) |
|
{ |
|
property.getQualifier(ix).getValue().get(embeddedObjectQualifierValue); |
|
} |
| |
// Get value: |
// If the EMBEDDEDOBJECT attribute is present with value "object" |
|
// or the EmbeddedObject qualifier exists on this property with value "true" |
|
// then |
|
// Convert the EmbeddedObject-encoded string into a CIMObject |
|
if (String::equal(embeddedObject, "object") || embeddedObjectQualifierValue) |
|
{ |
|
// The EMBEDDEDOBJECT attribute is only valid on Properties of type string |
|
if (type == CIMTYPE_STRING) |
|
{ |
|
type = CIMTYPE_OBJECT; |
|
CIMValue new_value(type, true, arraySize); |
|
CIMProperty new_property = CIMProperty(name, new_value, arraySize, CIMName(), classOrigin, propagated); |
|
|
|
// Copy the qualifiers from the String property to the CIMObject property. |
|
for (Uint32 ix = 0; ix < property.getQualifierCount(); ++ix) |
|
{ |
|
// All properties are copied, including the EmbeddedObject qualifier. |
|
// This way we don't have to keep track to know that the EmbeddedObject |
|
// qualifier needs to be added back during the encode step. |
|
new_property.addQualifier(property.getQualifier(ix)); |
|
} |
| |
|
value = new_value; |
|
property = new_property; |
|
} |
|
else |
|
{ |
|
// Error -- throw exception |
|
// (the EmbeddedObject attribute may be applied only to entities that have the type String) |
|
|
|
// l10n |
|
|
|
// throw XmlValidationError(parser.getLine(), |
|
// "expected string type"); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE", |
|
"The EMBEDDEDOBJECT attribute is only valid on string types."); |
|
|
|
throw XmlValidationError(parser.getLine(), mlParms); |
|
} |
|
} |
|
|
|
// Continue on to get property array value, if not empty. |
|
// Else not an embedded object, if not empty, get the property array value. |
|
if (!empty) |
|
{ |
if (getValueArrayElement(parser, type, value)) | if (getValueArrayElement(parser, type, value)) |
{ | { |
if (arraySize && arraySize != value.getArraySize()) | if (arraySize && arraySize != value.getArraySize()) |
|
|
| |
property.setValue(value); | property.setValue(value); |
} | } |
|
|
expectEndTag(parser, "PROPERTY.ARRAY"); | expectEndTag(parser, "PROPERTY.ARRAY"); |
} | } |
| |
|
|
throw XmlException(XmlException::UNCLOSED_TAGS, parser.getLine()); | throw XmlException(XmlException::UNCLOSED_TAGS, parser.getLine()); |
| |
if (entry.type == XmlEntry::CONTENT) | if (entry.type == XmlEntry::CONTENT) |
host = String(entry.text,STRING_FLAG_UTF8); |
host = String(entry.text); |
else | else |
{ | { |
parser.putBack(entry); | parser.putBack(entry); |
|
|
| |
} | } |
| |
host = String(entry.text,STRING_FLAG_UTF8); |
host = String(entry.text); |
#endif | #endif |
expectEndTag(parser, "HOST"); | expectEndTag(parser, "HOST"); |
return true; | return true; |
|
|
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 = String(entry.text,STRING_FLAG_UTF8); |
value = String(entry.text); |
else | else |
parser.putBack(entry); | parser.putBack(entry); |
| |
|
|
| |
Boolean XmlReader::getIMethodResponseStartTag( | Boolean XmlReader::getIMethodResponseStartTag( |
XmlParser& parser, | XmlParser& parser, |
const char*& name) |
const char*& name, |
|
Boolean& isEmptyTag) |
{ | { |
XmlEntry entry; | XmlEntry entry; |
| |
if (!testStartTag(parser, entry, "IMETHODRESPONSE")) |
if (!testStartTagOrEmptyTag(parser, entry, "IMETHODRESPONSE")) |
return false; | return false; |
| |
|
isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG); |
|
|
// Get IMETHODRESPONSE.NAME attribute: | // Get IMETHODRESPONSE.NAME attribute: |
| |
if (!entry.getAttributeValue("NAME", name)) { | if (!entry.getAttributeValue("NAME", name)) { |
|
|
} | } |
| |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
// Pending DMTF CR |
// |
|
// DMTF CR Pending |
// | // |
// <!ELEMENT ERROR (INSTANCE*)> | // <!ELEMENT ERROR (INSTANCE*)> |
// <!ATTLIST ERROR | // <!ATTLIST ERROR |
|
|
{ | { |
object = CIMObject(cimInstance); | object = CIMObject(cimInstance); |
} | } |
else if (!XmlReader::getClassElement(parser, cimClass)) |
else if (XmlReader::getClassElement(parser, cimClass)) |
{ | { |
object = CIMObject(cimClass); | object = CIMObject(cimClass); |
} | } |
|
|
| |
} | } |
| |
return false; |
PEGASUS_UNREACHABLE( return false; ) |
} | } |
| |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
| |
Boolean XmlReader::getEMethodResponseStartTag( | Boolean XmlReader::getEMethodResponseStartTag( |
XmlParser& parser, | XmlParser& parser, |
const char*& name) |
const char*& name, |
|
Boolean& isEmptyTag) |
{ | { |
XmlEntry entry; | XmlEntry entry; |
| |
if (!testStartTag(parser, entry, "EXPMETHODRESPONSE")) |
if (!testStartTagOrEmptyTag(parser, entry, "EXPMETHODRESPONSE")) |
return false; | return false; |
| |
|
isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG); |
|
|
// Get EXPMETHODRESPONSE.NAME attribute: | // Get EXPMETHODRESPONSE.NAME attribute: |
| |
| |
|
|
| |
Boolean XmlReader::getMethodResponseStartTag( | Boolean XmlReader::getMethodResponseStartTag( |
XmlParser& parser, | XmlParser& parser, |
const char*& name) |
const char*& name, |
|
Boolean& isEmptyTag) |
{ | { |
XmlEntry entry; | XmlEntry entry; |
| |
if (!testStartTag(parser, entry, "METHODRESPONSE")) |
if (!testStartTagOrEmptyTag(parser, entry, "METHODRESPONSE")) |
return false; | return false; |
| |
|
isEmptyTag = (entry.type == XmlEntry::EMPTY_TAG); |
|
|
// Get METHODRESPONSE.NAME attribute: | // Get METHODRESPONSE.NAME attribute: |
| |
| |
|
|
// <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?> | // <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?> |
// <!ATTLIST PARAMVALUE | // <!ATTLIST PARAMVALUE |
// %CIMName; | // %CIMName; |
|
// %EmbeddedObject; #IMPLIED |
// %ParamType;> | // %ParamType;> |
// | // |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
throw XmlValidationError(parser.getLine(), mlParms); | throw XmlValidationError(parser.getLine(), mlParms); |
} | } |
| |
|
// Get PROPERTY.EMBEDDEDOBJECT |
|
|
|
String embeddedObject = getEmbeddedObjectAttribute( |
|
parser.getLine(), entry, "PARAMVALUE"); |
| |
// Get PARAMVALUE.PARAMTYPE attribute: | // Get PARAMVALUE.PARAMTYPE attribute: |
| |
Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type, | Boolean gotType = getCimTypeAttribute(parser.getLine(), entry, type, |
"PARAMVALUE", "PARAMTYPE", false); | "PARAMVALUE", "PARAMTYPE", false); |
| |
if (!empty) |
if (empty) |
|
{ |
|
gotType = false; // Can't distinguish array and non-array types |
|
} |
|
else |
{ | { |
// Parse VALUE.REFERENCE and VALUE.REFARRAY type | // Parse VALUE.REFERENCE and VALUE.REFARRAY type |
if ( (type == CIMTYPE_REFERENCE) || !gotType ) | if ( (type == CIMTYPE_REFERENCE) || !gotType ) |
|
|
effectiveType = type; | effectiveType = type; |
} | } |
| |
|
// If the EMBEDDEDOBJECT attribute is present with value "object" |
|
// then |
|
// Convert the EmbeddedObject-encoded string into a CIMObject |
|
if (String::equal(embeddedObject, "object")) |
|
{ |
|
// The EMBEDDEDOBJECT attribute is only valid on Parameters of type string |
|
// The type must have been specified. |
|
if (gotType && (type == CIMTYPE_STRING)) |
|
{ |
|
// Used below by getValueElement() or getValueArrayElement() |
|
effectiveType = CIMTYPE_OBJECT; |
|
} |
|
else |
|
{ |
|
// Error -- throw exception |
|
// (the EmbeddedObject attribute may be applied only to entities that have the type String) |
|
|
|
// l10n |
|
|
|
// throw XmlValidationError(parser.getLine(), |
|
// "expected string type"); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE", |
|
"The EMBEDDEDOBJECT attribute is only valid on string types."); |
|
|
|
throw XmlValidationError(parser.getLine(), mlParms); |
|
} |
|
} |
|
|
if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) && | if ( !XmlReader::getValueArrayElement(parser, effectiveType, value) && |
!XmlReader::getValueElement(parser, effectiveType, value) ) | !XmlReader::getValueElement(parser, effectiveType, value) ) |
{ | { |
|
gotType = false; // Can't distinguish array and non-array types |
value.clear(); // Isn't necessary; should already be cleared | value.clear(); // Isn't necessary; should already be cleared |
} | } |
|
|
} | } |
| |
expectEndTag(parser, "PARAMVALUE"); | expectEndTag(parser, "PARAMVALUE"); |
} | } |
| |
|
|
paramValue = CIMParamValue(name, value, gotType); | paramValue = CIMParamValue(name, value, gotType); |
| |
return true; | return true; |
|
|
// | // |
// <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)> | // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)> |
// <!ATTLIST RETURNVALUE | // <!ATTLIST RETURNVALUE |
|
// %EmbeddedObject; #IMPLIED |
// %ParamType;> | // %ParamType;> |
// | // |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
if (!testStartTag(parser, entry, "RETURNVALUE")) | if (!testStartTag(parser, entry, "RETURNVALUE")) |
return false; | return false; |
| |
|
// Get PROPERTY.EMBEDDEDOBJECT |
|
|
|
String embeddedObject = getEmbeddedObjectAttribute( |
|
parser.getLine(), entry, "RETURNVALUE"); |
|
|
// Get RETURNVALUE.PARAMTYPE attribute: | // Get RETURNVALUE.PARAMTYPE attribute: |
// NOTE: Array type return values are not allowed (2/20/02) | // NOTE: Array type return values are not allowed (2/20/02) |
| |
|
|
type = CIMTYPE_STRING; | type = CIMTYPE_STRING; |
} | } |
| |
|
if (String::equal(embeddedObject, "object")) |
|
{ |
|
if (gotType && (type == CIMTYPE_STRING)) |
|
{ |
|
type = CIMTYPE_OBJECT; // Used below by getValueElement() |
|
} |
|
else |
|
{ |
|
// Error -- throw exception |
|
// (the EmbeddedObject attribute may be applied only to entities that have the type String) |
|
|
|
// l10n |
|
|
|
// throw XmlValidationError(parser.getLine(), |
|
// "expected string type"); |
|
|
|
MessageLoaderParms mlParms("Common.XmlReader.INVALID_EMBEDDEDOBJECT_TYPE", |
|
"The EMBEDDEDOBJECT attribute is only valid on string types."); |
|
|
|
throw XmlValidationError(parser.getLine(), mlParms); |
|
} |
|
} |
|
|
if ( !XmlReader::getValueElement(parser, type, returnValue) ) | if ( !XmlReader::getValueElement(parser, type, returnValue) ) |
{ | { |
| |