[ https://issues.apache.org/jira/browse/SOLR-183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12478930 ]
J.J. Larrea commented on SOLR-183: ---------------------------------- Modest proposal: If one is going to come up with a programmer-facing mechanism for required parameters (using any of the abovementioned schemes), why not also make it configuration-facing as well. That is, in solrparams.xml: <requestHandler name="blah" class="solr.DisMaxRequestHandler"> <lst name="defaults"> <str name="version">2.1</str> <int name="rows">0</int> ... </lst> <lst name="requires"> <str name="q">A query must be specified using the q parameter</str> <str name="version">This handler depends on version being explicitly set</str> </lst> ... </requestHandler> RequestHandlerBase would add to the definition and initialization of defaults, extends, and invariants, a fourth SolrParams called requires. Then when the init is building the (invariants --> ((request --> defaults) + appends))) chain with DefaultSolrParams and AppendedSolrParams (delegated to method SolrPluginUtils.setDefaults), it could interpose a new class RequiredSolrParams which acts like DefaultSolrParams except it accepts the 'requires' SolrParams defined in the handler config, which in my proposal defines a param name/message pair. If a param not found in the target SolrParams is defined in 'requires', the exception is thrown. Otherwise the RequiredSolrParams behaves similarly to DefaultSolrParams (which it extends) by delegating the request up the chain, or if no chain is defined returning null. Depending on what the programmer wants, the RequiredSolrParams could be chained with just the request params: (invariants -> ((requires -> request) -> defaults) + appends) or could be chained with the entire chain as it exists: requires --> (invariants --> ((request --> defaults) + appends))) I've attached an illustrative implementation. I must apologize, while it compiles I have not yet tested it, I am under deadline and have spent too much time on this today already; I'll try to do so over the weekend, along with the RequestHandlerBase/SolrPluginUtils implementation. It accepts a requires SolrParams as described above, with the values interpreted as a Formatter string. It also has an "always required" mode with a method signature which accepts a fixed message format string. It also has a convenience method (temporarily commented out because of method signature clash) which shows how you can provide custom messages for some parameters but have a stock default message for others. I believe this object should be compatible with what Ryan posted, e.g. you could add implementations for getXXX(param, default) which override the "throw the exception" behavior it now has. Anyway, I am open to feedback. Useful? Excessive? Broken? Stupid? > add getRequiredParameter() to SolrParams > ---------------------------------------- > > Key: SOLR-183 > URL: https://issues.apache.org/jira/browse/SOLR-183 > Project: Solr > Issue Type: Wish > Reporter: Ryan McKinley > Priority: Trivial > Attachments: SOLR-183-required-param.patch, > SOLR-183-required-param.patch > > > I find myself including this with every patch, so i'll just separate it out. > This simply adds a utilty function to SolrParams that throws a 400 if the > parameter is missing: > /** returns the value of the param, or throws a 400 exception if missing */ > public String getRequiredParameter(String param) throws SolrException { > String val = get(param); > if( val == null ) { > throw new SolrException( 400, "Missing parameter: "+param ); > } > return val; > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.