[
https://issues.apache.org/jira/browse/CAMEL-26021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18130968#comment-18130968
]
Claus Ibsen commented on CAMEL-26021:
-------------------------------------
Fix in https://github.com/apache/camel/pull/28358
_Claude Code on behalf of davsclaus_
> camel-solr - the deleteByQuery default, a converter that turns anything into
> an empty Map, and bodies that are not sent
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26021
> URL: https://issues.apache.org/jira/browse/CAMEL-26021
> Project: Camel
> Issue Type: Bug
> Components: camel-solr
> Affects Versions: 4.18.0, 4.22.0, 4.23.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while checking the body types of the solr component for the catalog
> (CAMEL-24961).
> h4. 1. The catalog says deleteByQuery defaults to true, the code to false
> The catalog says {{deleteByQuery}} is true by default, but the field is
> false: {{@UriParam(defaultValue = "true") private boolean deleteByQuery =
> false;}} ({{SolrConfiguration}}, main 07d2e7a987bc, lines 57-58, since
> CAMEL-21479). So a DELETE reads the body as ids, while the docs and the
> tooling say it reads it as a query.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against {{camel infra run
> solr}}: a DELETE with the body {{id:docs-2}} deleted nothing, and with
> {{deleteByQuery=true}} it deleted docs-2.
> *Proposed change*: make the catalog say false, as the code and the
> {{CamelSolrDeleteByQuery}} header do.
> h4. 2. Any String or POJO converts to an empty Map when camel-solr is on the
> classpath
> {{SolrResponseConverter}} has a type converter from Object to Map
> ({{createSolrResponseMap}}, main 07d2e7a987bc, lines 38-41) that gives an
> empty Map for any value that is not a Solr NamedList. As a converter from
> Object it applies to every conversion to Map in the CamelContext. So with
> camel-solr on the classpath, a conversion that should fail gives {{{}}}
> instead, in routes that have nothing to do with Solr.
> {{createSolrPingResponse}} does the same for SolrPingResponse.
> Checked on 4.24.0-SNAPSHOT with {{camel run}}, in a route with no solr step:
> {{convertBodyTo: java.util.Map}} of the text "hello" and of a POJO both gave
> an empty {{java.util.HashMap}}.
> *Proposed change*: let these converters convert only a NamedList, and return
> null (no conversion) for anything else.
> h4. 3. No body searches for, or deletes, the text java.lang.Object@...
> With no body, the producer sets {{new Object()}} as the body so its
> converters run ({{SolrProducer}}, main 07d2e7a987bc, line 85). A SEARCH then
> queries the text "java.lang.Object@3dacb2a2" and finds nothing, and a DELETE
> deletes the id "java.lang.Object@..." and reports success.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against {{camel infra run
> solr}}: SEARCH with no body gave {{q=java.lang.Object@3dacb2a2}} and
> {{numFound=0}}; DELETE with no body gave status 0.
> *Proposed change*: fail with an error that says the body is missing, unless a
> header gives what the operation needs ({{CamelSolrQueryString}}, the
> {{CamelSolrField.}} headers).
> h4. 4. An INSERT of a body that is not a document reports success and stores
> nothing
> When the request has parameters, such as the commit that {{autoCommit=true}}
> adds or a {{CamelSolrParam.}} header, an INSERT of a body that is not a
> document is sent without it, as a request with only the parameters
> ({{SolrRequestConverter}}, main 07d2e7a987bc, lines 254-257, meant for a
> commit with no body). It reports success and stores nothing.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against {{camel infra run
> solr}}, with {{autoCommit=true}}: plain text, a byte array, a stream, a text
> file, a POJO without {{@Field}}, a number and no body all gave status 0, and
> none of them was stored.
> *Proposed change*: send the request with only the parameters only when there
> is no body, and fail with the {{InvalidPayloadException}} that the same body
> gets without parameters.
> h4. Also read in the code, not run
> * XML text that starts with a declaration, such as the output of {{marshal:
> jaxb}}, is wrapped in {{<add>}} after the declaration
> ({{SolrRequestConverter}}, lines 261-266), which is not well-formed XML.
> * A Map body with a null value, or a {{CamelSolrField.}} header with a null
> value, fails with a NullPointerException in {{Collectors.toMap}} (line 273).
> * The examples of the docs use {{solr://localhost:8983/solr}} without a
> collection, and fail with "CamelSolrCollection must be specified".
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)