Applications (clients) need to "remove" / "clear" / "unset" / "deselect" the value(s) of an attribute. Throughout this document the term "remove" will be used identify this process. The conditions for "removing" a value will be from the client/framework perspective. Each Service/Operation will need to properly interpret the "remove" condition and perform (as needed) repository specific tasks. This process applies only to Attributes that are of type String.
It is assumed that an UPDATE Operation will ONLY contain the Attributes that need to be changed. The Input will NOT contain Attribute(s) (and values) that already exist and are not different from the Attribute(s) (and values) already in the Service repository. The UPDATE will ONLY contain "deltas", not all of the Attributes for the entry.
The solution involves enhancements to the Framework Tier and Service/Operation Tier. An Attribute will be "removed" from the Subject under these conditions:
If the above "conditions" are true, for an UPDATE, the Service/Operation will receive an Attribute with an empty value (non-null). The Service may be capable of "processing" this "remove" one of the following ways:
The Services need to be enhanced to support the "removing" of an Attribute. A Property called attribute.empty.remove will be used by the Connection / Context.
JNDI (OpenDS) does not allow an attribute to have an "empty" value. If the attribute has no value, it must be removed from the entry.