Bonjour,

Je souhaite utiliser ElasticSearch 5.1 pour dédoublonner des fichiers mp3.
J'ai une classe qui décrit ce qu'il y a dedans :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@JsonIgnoreProperties(ignoreUnknown=true)
public class Description
{
   /** Artiste. */
   @JsonProperty("_artiste")
   private String m_artiste;
 
   /** Titre. */
   @JsonProperty("_titre")
   private String m_titre;
 
   /** Fichier MP3. */
   @JsonProperty("_fichier")
   private File m_fichierMP3;
 
   /** Index de la description. */
   @JsonProperty("_id")
   private int m_index;
 
   /** Chemin d'accès complet original. */
   private Path m_pathMP3;
 
   /** Marque pour destruction. */
   private boolean marquerPourDestruction;
[...]
Voici ce que j'entreprends pour écrire mon entrée dans ElasticSearch 5.1.2 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.ws.rs.*;
import javax.ws.rs.client.*;
import javax.ws.rs.client.Invocation.*;
import javax.ws.rs.core.*;
 
import org.glassfish.jersey.client.*;
 
import com.fasterxml.jackson.jaxrs.json.*;
 
      Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
      WebTarget elasticsearch = client.target("http://localhost:9200");
 
      description.setIndex(++ index);
 
      elasticsearch.path("musique").request(MediaType.APPLICATION_JSON).put(Entity.json(description));
Il échoue sur ce message :
InboundJaxrsResponse{context=ClientResponse{method=PUT, uri=http://localhost:9200/musique, status=400, reason=Bad Request}}, entity : {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"unknown setting [index._artiste] please check that any required plugins are installed, or check the breaking changes documentation for removed settings"}],"type":"illegal_argument_exception","reason":"unknown setting [index._artiste] please check that any required plugins are installed, or check the breaking changes documentation for removed settings"},"status":400}


Si je remplace le put par un post, il répond :
InboundJaxrsResponse{context=ClientResponse{method=POST, uri=http://localhost:9200/musique, status=400, reason=Bad Request}}, entity : No handler found for uri [/musique] and method [POST]

Je débute, sur Elasticsearch. J'ai besoin de provoquer l'insertion de cette manière : REST, depuis Java, sans en passer par l'API Elasticsearch elle-même.
Mais je ne comprends pas bien les incidents qu'elle décrit. Les différents exemples que je trouve sur Google me font croire que je n'aurais pas dû rencontrer ces problèmes.

En question auxiliaire, j'ai du mal à comprendre REST en Java.
Les requêtes REST sont simples (plus simples que celles SOAP). Il me faut cependant ajouter fasterxml et Jersey à JAX-RS pour qu'il réussisse à sérialiser un objet Java en JSON pour faire des appels REST.
C'est parce que l'API JAX-RS, en fait, elle ne sait pas faire du REST ?
Ou bien, elle ne sait pas ce que c'est que la sérialisation d'un objet ?
Ou bien, elle ne sait pas ce que c'est que du JSON (parce que c'est prévu que Java le connaisse dans sa version 9 seulement, par exemple ?) ?

Pourquoi faut-il JAX-RS + deux autres API pour balancer un simple POJO à un service REST ? Parce qu'à la limite : pourquoi ne pas pas demander de chaîner dix API différentes pour y arriver, pendant qu'ils y sont ?

Merci !