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 :

Mauvaise conversion JSON PHP > Java


Sujet :

Services Web Java

  1. #1
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut Mauvaise conversion JSON PHP > Java
    Bonjour,

    J'ai une application JEE qui met à disposition plusieurs webservices pour rendre disponible les données de ma BD à une application PHP.

    Pour les requêtes GET, aucun problème, je récupère mes données issues de l'application JEE et je peux travailler avec dans mon application PHP.

    Par contre, pour faire des requêtes POST ou PUT, le serveur Glassfish rejette ma requête depuis php (erreur : HTTP Status 415 - Unsupported Media Type).

    Voici l'action Ajouter de mon webservice personne :
    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
     
    @Path("/personne")
    @Produces({"application/xml"})
    @Stateless
    public class PersonneREST {
     
        @EJB
        private PersonneEJB personneEJB;
     
        @POST
        @Path("/ajouter")
        @Produces({"application/json"})
        @Consumes({"application/json"})
        public Response ajouterPersonne(JAXBElement<Personne> personneJAXB) {
            Personne p = personneJAXB.getValue();
            personneEJB.creer(p);
            Response reponse = Response.status(200).build();
            return reponse;
        }
    L'application Php est développée en CakePHP, j'utilise donc json_encode et l'adapter HttpSocket pour communiquer avec le webservice de l'application JEE.
    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
     
    $data = array(           
                'civilite' => 'Mr',
                'nom' => 'PAUL',
                'prenom' => 'Jean',
                'adresse' => 'dfsdfdg',
                'cp' => '45678',
                'ville' => 'Paris',
                'mail' => 'test@test.fr',
                'telephone' => '090909090',
                'identifiant' => 'jean',
                'mdp' => 'jean'
            );
     
            $dataJSON = json_encode($data);
            var_dump($dataJSON);
     
            $response = $HttpSocket->request(array(
                'method' => 'POST',
                'uri' => 'http://localhost:8080/project-war/resources/personne/ajouter',          
                'header' => array('content-type' => 'application/json'),
                'body' => $dataJSON
                    ));
     
            $this->set('wb', $response);
    Voici ce qu'affiche le var_dump($dataJSON)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string '{"civilite":"Mr","nom":"PAUL","prenom":"Jean","adresse":"dfsdfdg","cp":"45678","ville":"Paris","mail":"test@test.fr","telephone":"090909090","identifiant":"jean","mdp":"jean"}' (length=175)
    Lorsque j’exécute cette action, le serveur Glassfish me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HTTP Status 415 - Unsupported Media Type
    
    Type Status report
    
    Message : Unsupported Media Type
    
    Description : The server refused this request because the request entity is in a format not supported by the requested resource for the requested method (Unsupported Media Type).
    
    GlassFish Server Open Source Edition 3.1.2.2
    J'ai essayé en enlevant le @Produces({"application/json"}) et le @Consumes({"application/json"}) en utilisant un paramètre de type String qui est lui même retourné et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public String ajouterPersonne(String personne) {
            personne = personne + "{ Status : 200 }";
            return personne;
    }
    Je dois donc mal transformer le tableau Php en JSON. Ou il me manque une subtilité.

    Merci d'avance pour toute aide.

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Je pense que le marshalling avec JAXB ne se fait pas automatiquement avec Grizzly, qui est derrière Glassfish. Mais le site de Grizzly est down... Impossible de se renseigner.

    Utilise simplement un String classique. Tu peux conserver les annotations spécifiant que tu récupères / produis du JSON.

  3. #3
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonjour olivier.pitton,

    Merci pour ta réponse. Je vais voir avec un String tout en regardant ce qui ne fonctionne pas avec JAXB.

  4. #4
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Je le dis souvant mais essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class PersonneREST implement serializable{

  5. #5
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonjour rockley,

    Merci pour ta réponse. J'y avais déjà pensé et elle n'a malheureusement pas fonctionné

    EDIT :

    Et le dénouement est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $response = $HttpSocket->request(array(
                'method' => 'POST',
                'uri' => 'http://localhost:8080/project-war/resources/personne/ajouter/',          
                'header' => array('Content-Type' => 'application/json'),
                'body' => $dataJSON
                    ));
    Merci pour votre aide, je sais maintenant qu'il faut pas déconner avec la convention du Content-Type

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/12/2014, 10h00
  2. Conversion d'un bout de code PHP vers Java
    Par chatlumo dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 09/10/2012, 17h29
  3. Conversion tableau PHP -> JSON
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2012, 11h27
  4. Que choisir : PHP versus Java ?
    Par Sniper37 dans le forum Général Conception Web
    Réponses: 164
    Dernier message: 28/04/2009, 16h50
  5. Conversion appli php/MySQL -> php/MsSQL - Prenage de tête
    Par Joelindien dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 02/09/2008, 17h40

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