[ 
https://issues.apache.org/jira/browse/SOLR-10413?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Cao Manh Dat updated SOLR-10413:
--------------------------------
    Attachment: SOLR-10413.patch

A patch for this ticket, I've rewritten json validator from scratch. The new 
json validator :
- can add more validations easily
- to solve this ticket problem, the patch changed specification, validator to 
accept multiple-type values

> v2 API: parsed JSON type should be coerced to expected type
> -----------------------------------------------------------
>
>                 Key: SOLR-10413
>                 URL: https://issues.apache.org/jira/browse/SOLR-10413
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: v2 API
>            Reporter: Steve Rowe
>            Priority: Minor
>         Attachments: SOLR-10413.patch
>
>
> v2 API request bodies are parsed as JSON and are checked via JSON schema for 
> the correct types.  But since the JSON parser used (noggit) accepts a relaxed 
> form of JSON, it is weirdly necessary to quote some things but not others.
> For example, after {{bin/solr start -e cloud -noprompt}}, {{curl 
> http://localhost:8983/v2/cluster -H 'Content-type: application/json' -d '\{ 
> set-property: \{ name: autoAddReplicas, val: false \} \}'}} returns:
> {noformat}
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
> <title>Error 400 
> {metadata={error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject,root-error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject},errorMessages=[{set-property={name=autoAddReplicas,
>  val=false}, errorMessages=[Expected type : string but found : falsein object 
> : false]}],msg=Error in command payload,code=400}</title>
> </head>
> <body><h2>HTTP ERROR 400</h2>
> <p>Problem accessing /solr/____v2/cluster. Reason:
> <pre>    
> {metadata={error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject,root-error-class=org.apache.solr.api.ApiBag$ExceptionWithErrObject},errorMessages=[{set-property={name=autoAddReplicas,
>  val=false}, errorMessages=[Expected type : string but found : falsein object 
> : false]}],msg=Error in command payload,code=400}</pre></p>
> </body>
> </html>
> {noformat}
> By contrast, if I quote the propery value, the request succeeds: {{curl 
> http://localhost:8983/v2/cluster -H 'Content-type: application/json' -d '\{ 
> set-property: \{ name: autoAddReplicas, val: "false" \} \}'}}
> This is annoying because the property is semantically boolean, even though 
> cluster properties' keys and values are always typed String.
> This error occurs because the API spec for the v2 Cluster API's 
> {{set-property}} command requires {{string}} typed values - from 
> {{solr/core/src/resources/apispec/cluster.Commands.json}}: 
> {noformat}
> {
>   "documentation": [...],
>   "description": [...],
>   "methods": [ "POST" ],
>   "url": { "paths": [ "/cluster" ] },
>   "commands": {
> [...]
>     "set-property": {
>       "type": "object",
>       "documentation": [...],
>       "description": [...],
>       "properties": {
>         "name": { "type": "string",  "description": [...] },
>         "val": { "type": "string", "description": [...] }
> [...]
> {noformat}
> I'm not sure how wide-spread the problem is, but at a minimum for this 
> particular API (setting a cluster property), Solr should accept both keys and 
> values of any (JSON) type and just {{toString()}} their values.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to