Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
all
-
New
Description
The returned value from solrParams.get( key ) depends on the implementing class such that:
modifiableParams = new ModifiableSolrParams( req.getParams() ); assert modifiableParams.get("key").equals( req.getParams().get("key") );
fails for requests built from a SimpleRequestParser or StandardRequestParser where the parameter "key" was given, but empty ( e.g. localhost:8393/select/?key=¶1=val1&parm2=val2 ).
The reason is that oas.request.ServletSolrParams returns null for values with length() == 0,
but all other SolrParams implementations return the empty String.
This behaviour has also side effects on search components:
Most, if not all, standard search components check for something like
if (reg.getParams().getBool(myTriggerParameter, false) )
{ ...do what I am supposed to do... }In case of ServletSolrParams getBool() returns the desired and expected "false", all other Implementations throw a "bad request" Exception.
One may argue that suppling a parameter with an empty value indeed is a malformed request, ...
Nonetheless I think, the above mentioned equality check should hold true for any request and any SolrParams.
Because I cannot oversee the implications, I currently don't have a better suggestion to achieve this, than
to make ServleSolrParams also return the empty String, which is in my opinion counter-intuitive and does not the right thing for the getBool(), getInt() etc. cases.