You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Mansour Al Akeel (JIRA)" <ji...@apache.org> on 2016/03/23 13:31:25 UTC

[jira] [Comment Edited] (CAMEL-9736) SolrComponent gets the wrong Content Type

    [ https://issues.apache.org/jira/browse/CAMEL-9736?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15208334#comment-15208334 ] 

Mansour Al Akeel edited comment on CAMEL-9736 at 3/23/16 12:30 PM:
-------------------------------------------------------------------

Claus,
You are right. It can be done in either Exchange.CONTENT_TYPE or Exchange.FILE_CONTENT_TYPE
The reason I proposed it, is because there are other cases where it is working properly. The only issue I faced is when file is in the body. 
Therefore, it made sense "to me" to use FILE_CONTENT_TYPE for only that case ! 
What if the body is SolrInputDocument, List of Files, or List of SolrInputDocument ?
I guess setting the request content-type (Exchange.CONTENT_TYPE), would be great. 


 https://github.com/apache/camel/blob/master/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java#L102




was (Author: mansour):
Claus,
You are right. It can be done in either Exchange.CONTENT_TYPE or Exchange.FILE_CONTENT_TYPE
The reason I proposed it, is because there are other cases where it is working properly. The only issue I faced is when file is in the body. 
Therefore, it made sense "to me" to use FILE_CONTENT_TYPE for only that case ! 
What if the body is SolrInputDocument, List of Files, or List of SolrInputDocument ?
I guess setting the request content-type (Exchange.CONTENT_TYPE), would be great. 


 95     private void insert(Exchange exchange, SolrClient solrServer) throws Exception {
 96         Object body = exchange.getIn().getBody();
 97         boolean invalid = false;
 98         if (body instanceof WrappedFile) {
 99             body = ((WrappedFile<?>)body).getFile();
100         }
101 
102         if (body instanceof File) {
103             MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
104             String mimeType = mimeTypesMap.getContentType((File)body);
105             ContentStreamUpdateRequest updateRequest = new ContentStreamUpdateRequest(getRequestHandler());
106             updateRequest.addFile((File) body, mimeType);
107 
108             for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) {
109                 if (entry.getKey().startsWith(SolrConstants.PARAM)) {
110                     String paramName = entry.getKey().substring(SolrConstants.PARAM.length());
111                     updateRequest.setParam(paramName, entry.getValue().toString());
112                 }
113             }
114 
115             updateRequest.process(solrServer);
116 
117         } else if (body instanceof SolrInputDocument) {
118 
119             UpdateRequest updateRequest = new UpdateRequest(getRequestHandler());
120             updateRequest.add((SolrInputDocument) body);
121 
122             updateRequest.process(solrServer);
123 
124         } else if (body instanceof List<?>) {
125             List<?> list = (List<?>) body;
126 
127             if (list.size() > 0 && list.get(0) instanceof SolrInputDocument) {
128                 UpdateRequest updateRequest = new UpdateRequest(getRequestHandler());
129                 updateRequest.add((List<SolrInputDocument>) list);
130 
131                 updateRequest.process(solrServer);
132             } else {
133                 invalid = true;
134             }
135 
136         } else {
137 
138             boolean hasSolrHeaders = false;
139             for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) {
140                 if (entry.getKey().startsWith(SolrConstants.FIELD)) {
141                     hasSolrHeaders = true;
142                     break;
143                 }
144             }
145 
146             if (hasSolrHeaders) {
147 
148                 UpdateRequest updateRequest = new UpdateRequest(getRequestHandler());
149 
150                 SolrInputDocument doc = new SolrInputDocument();
151                 for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) {
152                     if (entry.getKey().startsWith(SolrConstants.FIELD)) {
153                         String fieldName = entry.getKey().substring(SolrConstants.FIELD.length());
154                         doc.setField(fieldName, entry.getValue());
155                     }
:


> SolrComponent gets the wrong Content Type
> -----------------------------------------
>
>                 Key: CAMEL-9736
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9736
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-solr
>    Affects Versions: 2.16.2
>         Environment: Linux
>            Reporter: Mansour Al Akeel
>            Assignee: Andrea Cosentino
>            Priority: Minor
>              Labels: content-type, indexing, solr
>             Fix For: 2.18.0, 2.17.1
>
>
> Currently, there is no way to specify the content type. It's extracted automatically from the File in the body of the Message. This results in error when indexing a document. Setting Exchange.CONTENT_TYPE or Exchange.FILE_CONTENT_TYPE does not help. 
> For example, neither of these would work, as the component ignores the header and reads the file type in SolrProducer:
>    if (body instanceof File) {
>             MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
>             String mimeType = mimeTypesMap.getContentType((File)body);
>             ContentStreamUpdateRequest updateRequest = new
> ContentStreamUpdateRequest(getRequestHandler());
>             updateRequest.addFile((File) body, mimeType);
> A simple solution could be to check if the Exchange.FILE_CONTENT_TYPE is set, before trying to extract if from mimeTypesMap. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)