Archived
This forum has been archived. Please start a new discussion on GitHub.
How to load empty properties?
Ice v.3.1.0, C++.
I use Ice Properties facility to configure my own application. I was trying to use the feature of setting a property to an empty string in order to unset any previously loaded value. Internally Ice does it for files specified with --Ice.Config (Sec. 28.3)
It seems that either Properties::load() or Properties::getCommandLineOptions() strips the empty properties. For example, i have this config file:
I load it like this:
and get this output:
So now I cannot tell if Ice.Trace.Protocol was specified in the file. Of course, the result is the same if I use getProperty() on THIS properties set, but if I want to override some "global" config setting then I cannot do it.
Is this the expected behaviour? Would it make sense to preserve all specified properties?
Thanks, Alex
I use Ice Properties facility to configure my own application. I was trying to use the feature of setting a property to an empty string in order to unset any previously loaded value. Internally Ice does it for files specified with --Ice.Config (Sec. 28.3)
It seems that either Properties::load() or Properties::getCommandLineOptions() strips the empty properties. For example, i have this config file:
# Example config file for Ice Ice.MessageSizeMax = 2048 # Largest message size is 2MB Ice.Trace.Network=3 # Highest level of tracing for network Ice.Trace.Protocol= # Disable protocol tracing
I load it like this:
Ice::PropertiesPtr p = Ice::createProperties(); p->load( filename ); Ice::StringSeq propSeq = p->getCommandLineOptions(); cout<<"loaded "<<propSeq.size()<<" properties"<<endl; for ( unsigned int i=0; i<propSeq.size(); ++i ) { cout<<propSeq[i]<<endl; }
and get this output:
loaded 2 properties --Ice.MessageSizeMax=2048 --Ice.Trace.Network=3
So now I cannot tell if Ice.Trace.Protocol was specified in the file. Of course, the result is the same if I use getProperty() on THIS properties set, but if I want to override some "global" config setting then I cannot do it.
Is this the expected behaviour? Would it make sense to preserve all specified properties?
Thanks, Alex
0
Comments
-
Hi Alex,
That's the expected behavior. "Setting" a property to the empty string means unsetting this property if it is already set.
Usually, this means resetting the property to its default behavior. From the Ice manual:
"If not stated otherwise in the description of the individual properties, the default value for all properties is the empty string. If the property takes a numeric value, the empty string is interpreted as zero."
Cheers,
Bernard0