IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Post service REST Java


Sujet :

Services Web Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 16
    Points : 19
    Points
    19
    Par défaut Post service REST Java
    Bonjour, je suis actuellement en train de travailler sur un logiciel de facturation, il y a une documentation qui explique que l'on peut mettre à jour une offre en PUT avec REST en Java,

    La documentation montre ceci :

    MediaType application/json

    Code JSON : 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
    {
      "updateFeatures" : {
        "priority" : 4,
        "channelKey" : "Demo channel",
        "feature" : [ {
          "@xsi.type" : "CreateFeature",
          "featureKey" : "DEMO_RT_INTERNET:PHONE",
          "value" : {
            "@xsi.type" : "FeatureValuePhoneNumber",
            "value" : "+ 43 316 8003 2001"
          }
        }, {
          "@xsi.type" : "DeleteFeature",
          "id" : 141526
        }, {
          "@xsi.type" : "UpdateFeature",
          "id" : 141526,
          "value" : {
            "@xsi.type" : "FeatureValueSelect",
            "value" : "200 MB"
          }
        } ]
      }
    }
    J'ai donc fait mon premier WebService en Put avec les services Rest en Java!
    Voici le code ;

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package essaiPostFile;
     
    import java.io.File;
     
    import org.apache.commons.codec.binary.Base64;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpVersion;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.ContentBody;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreProtocolPNames;
    import org.apache.http.util.EntityUtils;
     
     
    public class PostFile {
    	private static final String BASIC_AUTH = "BASIC";
     
     
    	public static void main(String[] args) throws Exception {
        HttpClient httpclient = new DefaultHttpClient();
        httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
     
        HttpPut httpput = new HttpPut("http://XX.XX.XX.XX:XXXX/rest/customers/1/offers/1/features");
     
        File file = new File("C:/Users/arnaud.mollica/Documents/Projet/templates/reports/src/main/resources/customized_invoice_template/updateFacture.xml");
        MultipartEntity mpEntity = new MultipartEntity();
        ContentBody cbFile = new FileBody(file, "application/xml");
        mpEntity.addPart("filename", cbFile);
     
     
        httpput.setEntity(mpEntity);
        System.out.println("executing request " + httpput.getRequestLine());
        HttpResponse response = httpclient.execute(httpput);
        HttpEntity resEntity = response.getEntity();
     
        System.out.println(response.getStatusLine());
        if (resEntity != null) {
          System.out.println(EntityUtils.toString(resEntity));
        }
        if (resEntity != null) {
          resEntity.consumeContent();
        }
     
        httpclient.getConnectionManager().shutdown();
     
      }
    }
    Je pense avoir compris qu'il faut créer un fichier updateFacture.xml (je ne suis cependant pas sûr de cela...)

    Le contenu de mon fichier XML est ce qui était marqué plus haut :

    L'affichage de la console est le suivant :
    executing request PUT http://XX.XX.XX.XX:XXXX/rest/custome...ers/1/features HTTP/1.1
    HTTP/1.1 415 Unsupported Media Type
    Il est probable que j'ai fait une erreur de compréhension pour bien utiliser PUT...

    Merci par avance pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Citation Envoyé par ordino95 Voir le message
    Je pense avoir compris qu'il faut créer un fichier updateFacture.xml (je ne suis cependant pas sûr de cela...)
    - Eh bien, euh... Comme tu l'as sûrement constaté, le code donné dans la documentation n'est pas du XML... Et le media-type requis n'est pas application/xml mais application/json.
    Du coup, non ce n'est sans doute pas une bonne idée de créer un fichier XML.

    - Tu nous as pas dit quel webservice c'est, alors on peut pas être tout à fait sûr...
    Mais dans les webservices REST, d'habitude, on n'envoie pas de Multipart pour faire des requêtes. Dans "multi" il y a l'idée de "plus de un." Elle est où la deuxième part ?
    À mon avis il te faut plutôt une StringEntity.

    - Si la requête que tu envoies est toujours la même, il est très malin de l'externaliser dans un fichier .json qui contient la requête. Ça oui.
    Mais si par le plus grand des hasards tu n'envoies pas toujours la même chose, c'est une autre histoire.
    Il vaut mieux construire le JSON en mémoire pour y mettre ce dont tu as besoin quand tu en as besoin. Pour ça, une bibliothèque JSON quelconque à récupérer sur Maven ou ailleurs t'aidera. Une fois l'objet JSON construit, il n'y a plus qu'à le convertir en String et à la passer au StringEntity.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Merci thelvin,
    J'ai mis application/json et ça a l'air de fonctionner (pour le moment je préfère faire avec un fichier par facilité, je testerai aussi de construire à partir d'une API^^) , les erreurs viennent maintenant de problèmes de configuration du logiciel qui doivent correspondre au fichier json

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Web Service REST sur serveur PHP avec un client JAVA
    Par john anderta dans le forum Services Web
    Réponses: 0
    Dernier message: 12/11/2012, 20h43
  2. Réponses: 0
    Dernier message: 22/08/2012, 13h26
  3. Appeler un service REST en Java
    Par Jacob86 dans le forum Services Web
    Réponses: 4
    Dernier message: 28/11/2011, 18h56
  4. Implémentation d'un service REST simple en Java
    Par 84mickael dans le forum REST
    Réponses: 5
    Dernier message: 31/10/2010, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo