I was teached following XML are valid empty array in mailing list.
I issue GetInstance with following PropertyList, I expect responces do not have any properties which is described in DSP0200.
a) Empty array 1
<IPARAMVALUE NAME="PropertyList">
<VALUE.ARRAY>
<VALUE/>
</VALUE.ARRAY>
</IPARAMVALUE>
b) Empty array 2
<IPARAMVALUE NAME="PropertyList">
<VALUE.ARRAY/>
</IPARAMVALUE>
About a), responce is filtered correctly.
But, b)'s responce has all properties that are not filtered, it is not comply DSP0200.
My proposal fix; in the case of b), Bison parser build same result object as a).
It is a little bit complicated, because instances are handled by some providers.
I verified following three providers;
(1) InternalProvider
I checked with CIM_RegisteredProfile Instance (InstanceId=CIM:SFCB_PR) which already exists.
(2) InteropProvider
I create CIM_IndicationFilter instance by using CIM-XML which is described in DSP0200 Appendix B.12. Subscription Example.
(3) InteropServerProvider
I used CIM_NameSpace Instance (Name=root/interop) which already exists.
CIM-XML;
(1) InternalProvider: Request
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="5328" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="GetInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="interop"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="InstanceName">
<INSTANCENAME CLASSNAME="CIM_RegisteredProfile">
<KEYBINDING NAME="instanceid">
<KEYVALUE>CIM:SFCB_PR</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</IPARAMVALUE>
<IPARAMVALUE NAME="PropertyList">
<VALUE.ARRAY/>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
(1) InternalProvider: Response
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="5328" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="GetInstance">
<IRETURNVALUE>
<INSTANCE CLASSNAME="cim_registeredprofile">
<PROPERTY.ARRAY NAME="AdvertiseTypeDescriptions" TYPE="string">
</PROPERTY.ARRAY>
<PROPERTY.ARRAY NAME="AdvertiseTypes" TYPE="uint16">
<VALUE.ARRAY>
<VALUE>3</VALUE>
</VALUE.ARRAY>
</PROPERTY.ARRAY>
<PROPERTY NAME="RegisteredVersion" TYPE="string">
<VALUE>1.0.0</VALUE>
</PROPERTY>
<PROPERTY NAME="RegisteredName" TYPE="string">
<VALUE>Profile Registration</VALUE>
</PROPERTY>
<PROPERTY NAME="OtherRegisteredOrganization" TYPE="string">
</PROPERTY>
<PROPERTY NAME="RegisteredOrganization" TYPE="uint16">
<VALUE>2</VALUE>
</PROPERTY>
<PROPERTY NAME="InstanceID" TYPE="string">
<VALUE>CIM:SFCB_PR</VALUE>
</PROPERTY>
<PROPERTY NAME="Caption" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
</PROPERTY>
</INSTANCE>
</IRETURNVALUE>
</IMETHODRESPONSE>
</SIMPLERSP>
</MESSAGE>
</CIM>
(2) InteropProvider: Create Instance
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="5227" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="CreateInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="interop"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="NewInstance">
<INSTANCE CLASSNAME="CIM_IndicationFilter">
<PROPERTY NAME="CreationClassName" TYPE="string">
<VALUE>CIM_IndicationFilter</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string">
<VALUE>ACMESubscription12345</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemCreationClassName" TYPE="string">
<VALUE>CIM_UnitaryComputerSystem</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemName" TYPE="string">
<VALUE>server001.acme.com</VALUE>
</PROPERTY>
<PROPERTY NAME="Query" TYPE="string">
<VALUE>SELECT Description, AlertType, PerceivedSeverity, ProbableCause, IndicationTime FROM CIM_AlertIndication WHERE PerceivedSeverity = 3</VALUE>
</PROPERTY>
<PROPERTY NAME="QueryLanguage" TYPE="string">
<VALUE>WQL</VALUE>
</PROPERTY>
<PROPERTY NAME="SourceNamespace" TYPE="string">
<VALUE>root/interop</VALUE>
</PROPERTY>
</INSTANCE>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
(2) InteropProvider: Request
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="5315" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="GetInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="interop"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="InstanceName">
<INSTANCENAME CLASSNAME="CIM_IndicationFilter">
<KEYBINDING NAME="creationclassname">
<KEYVALUE>CIM_IndicationFilter</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="name">
<KEYVALUE>ACMESubscription12345</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="systemcreationclassname">
<KEYVALUE>CIM_UnitaryComputerSystem</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="systemname">
<KEYVALUE>server001.acme.com</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</IPARAMVALUE>
<IPARAMVALUE NAME="PropertyList">
<VALUE.ARRAY/>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
(2) InteropProvider: Response
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="5315" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="GetInstance">
<IRETURNVALUE>
<INSTANCE CLASSNAME="CIM_IndicationFilter">
<PROPERTY NAME="QueryLanguage" TYPE="string">
<VALUE>WQL</VALUE>
</PROPERTY>
<PROPERTY NAME="Query" TYPE="string">
<VALUE>SELECT Description, AlertType, PerceivedSeverity, ProbableCause, IndicationTime FROM CIM_AlertIndication WHERE PerceivedSeverity = 3</VALUE>
</PROPERTY>
<PROPERTY NAME="SourceNamespace" TYPE="string">
<VALUE>root/interop</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string">
<VALUE>ACMESubscription12345</VALUE>
</PROPERTY>
<PROPERTY NAME="CreationClassName" TYPE="string">
<VALUE>CIM_IndicationFilter</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemName" TYPE="string">
<VALUE>server001.acme.com</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemCreationClassName" TYPE="string">
<VALUE>CIM_UnitaryComputerSystem</VALUE>
</PROPERTY>
<PROPERTY NAME="Caption" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
</PROPERTY>
</INSTANCE>
</IRETURNVALUE>
</IMETHODRESPONSE>
</SIMPLERSP>
</MESSAGE>
</CIM>
(3) InteropServerProvider: Request
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4959" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="GetInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="interop"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="InstanceName">
<INSTANCENAME CLASSNAME="CIM_Namespace">
<KEYBINDING NAME="Name">
<KEYVALUE>root/interop</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</IPARAMVALUE>
<IPARAMVALUE NAME="PropertyList">
<VALUE.ARRAY/>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
(3) InteropServerProvider: Response
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4959" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="GetInstance">
<IRETURNVALUE>
<INSTANCE CLASSNAME="CIM_Namespace">
<PROPERTY NAME="DescriptionOfClassType" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ClassTypeVersion" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ClassType" TYPE="uint16">
</PROPERTY>
<PROPERTY NAME="DescriptionOfClassInfo" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ClassInfo" TYPE="uint16">
<VALUE>0</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string">
<VALUE>root/interop</VALUE>
</PROPERTY>
<PROPERTY NAME="CreationClassName" TYPE="string">
<VALUE>CIM_Namespace</VALUE>
</PROPERTY>
<PROPERTY NAME="ObjectManagerName" TYPE="string">
<VALUE>sfcb:NO-UUID-FILE-ubuntu-vm</VALUE>
</PROPERTY>
<PROPERTY NAME="ObjectManagerCreationClassName" TYPE="string">
<VALUE>CIM_ObjectManager</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemName" TYPE="string">
<VALUE>ubuntu-vm</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemCreationClassName" TYPE="string">
<VALUE>CIM_ComputerSystem</VALUE>
</PROPERTY>
<PROPERTY NAME="Caption" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
</PROPERTY>
</INSTANCE>
</IRETURNVALUE>
</IMETHODRESPONSE>
</SIMPLERSP>
</MESSAGE>
</CIM>
I would like to update patch, because I propose more fixes for InteropProvider and InteropServerProvider.
About InteropProvider;
InteropProvider calls getInstance() in brokerUpc.c. In this function, the empty array PropertyList is treated PropertyList=NULL, and it is not generate empty MsgSegment.
My proposal is that it generates empty MsgSegment for empty array PropertyList.
About InteropServerProvider;
There is no PropertyList filter setting in the InteropServerProvider.
I added SetPropertyFilter() function in GetInstance and EnumerateInstances.
Updated proposed fix
I would like to make more update as follows;
(a) Add proposed fix for EnumerateInstances method of the InteropProvier.
(b) Correct proposed fix for EnumerateInstances method of the InteropServerProvier.
4th proposed fix
Moving to RTC product backlog.
It's correct that "Empty Array 1" in the examples does not properly filter properties for Interop and InteropServer providers. This feature isn't in those 2 providers.
The "Empty Array 2" example is actually not a correct empty array. In DSP0200 in the VALUE.ARRAY section it states:
"If the value of an array entry is NULL, the VALUE.NULL subelement must be used to represent the array
entry. Otherwise, the VALUE subelement must be used."
So the VALUE or VALUE.NULL subelements must be provided for an empty array.
So this bug will be used to add the property filter support to the providers.
So this bug
Committed patch
pushed to git master