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.