[ 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