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

API standards et tierces Android Discussion :

[SOAP] Client Java se connecte à un serveur PHP


Sujet :

API standards et tierces Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut [SOAP] Client Java se connecte à un serveur PHP
    Bonjour à tous

    je vous explique mon problème. J'ai un serveur SOAP en PHP (avec une simple fonction Add) qui fonctionne très bien avec un client PHP.

    Maintenant, je veux créer un client Java avec ksoap2 pour une application android qui se connecte à ce même serveur.

    Problème, j'ai une erreur...

    Voici le code de mon serveur php:

    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
     
    class MyServer {
      function Add($x,$y) {
        return $x+$y;
      }
    }
    try {
        $server = new SoapServer('monFormat.wsdl',  array('trace' => 1,'encoding'	=> 'ISO-8859-1'));
        $server->setclass('MyServer');
        $server->setPersistence(SOAP_PERSISTENCE_REQUEST);
    } catch (Exception $e) {
        echo 'erreur'.$e;
    }
    // Si l'appel provient d'un Web-Service
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      try {
        $server -> handle();
      }catch (Exception $e){
        echo 'erreur'.$e;
      }
    }
    Pour info, mon client PHP:
    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
     
    // Nouveau Client SOAP
    try {
      $client = new SoapClient('monFormat.wsdl', array('trace' => 1));
      $x = "2";
      $y = "3";
      try{
        $oReturn =  $client -> __soapCall('Add', array('int1' =>$x, 'int2' =>$y));
      } catch (SoapFault $fault) {
        trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
      }
      var_dump($oReturn);
    } catch (SoapFault $fault) {
      echo 'erreur : '.$fault;
    }
    Maintenant mon client Java:

    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
     
    public class MyTest extends Activity {
     
      private static final String SOAP_ACTION = "http://exemple.com/Add";
      private static final String OPERATION_NAME = "Add";
      private static final String WSDL_TARGET_NAMESPACE = "http://exemple.com/";
      private static final String SOAP_ADDRESS = "http://monurl.fr/android/serveur.php";
     
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        setContentView(textView);
     
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
        request.addProperty("int1","2");
        request.addProperty("int2","3");
     
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
     
        try{
    	httpTransport.call(SOAP_ACTION, envelope);
    	SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
    	textView.setText(response.toString());
        }catch (Exception exception){
    	textView.setText(exception.toString());
        }
      }
    }
    Et enfin voici le code d'erreur...



    Si vous avez des suggestions, merci d'avance ^^

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut
    Bonjour à tous,

    j'ai trouvé la solution pour ceux que ça intéresse

    Je suis passé par la librairie nusoap pour écrire mon serveur PHP, et là ça marche.

    mon serveur php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include('./lib/nusoap.php');
     
    $serveur = new soap_server; // création serveur
    $serveur->register('add'); // j'ajoute la fonction
     
    function add($num1,$num2){
      return $num1+$num2;
    }
     
    $HTTP_RAW_POST_DATA = file_get_contents('php://input');
    $serveur->service($HTTP_RAW_POST_DATA); //envoi du résultat
    client php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?include('./lib/nusoap.php');
    $client = new nusoap_client('http://monurl/android/serveur.php'); // nouveau client
    $parametres = array('num1'=>'2','num2'=>'5'); // ajout des parametres?>
    <?=$client->call('add', $parametres); // appel de la fonction add du serveur?>
    client java:

    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
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
     
    public class MyTest extends Activity {
     
      private static final String SOAP_ACTION = "add";
      private static final String OPERATION_NAME = "add";
      private static final String WSDL_TARGET_NAMESPACE = "http://url.fr/android/";
      private static final String SOAP_ADDRESS = "http://url.fr/android/serveur.php";
     
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        setContentView(textView);
     
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
        request.addProperty("num1","5");
        request.addProperty("num2","2");
     
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
     
        try{
          httpTransport.call(SOAP_ACTION, envelope);
          String result = envelope.getResponse().toString();
          textView.setText(result);
        }catch (Exception exception){
          textView.setText(exception.toString()+" //");
        }
      }
    }

  3. #3
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut
    Salut,
    j'ai testé ton code avec serveur php et client Android , mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.net.SocketTimeoutException//
    Le client php semble fonctionner, bien que je ne suis pas sûr , en tout cas pas d'erreur.

    une idée du problème ? une piste pour m'aider à débugger ?

    merci

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut
    Salut,

    je viens de tester avec php 5.3 et j'ai une nouvelle erreur (le $HTTP_RAW_POST_DATA). Donc si tu es aussi en php 5.3, test comme ça.

    Du coup, voici le nouveau serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include('./lib/nusoap.php');
     
    $serveur = new soap_server;
    $serveur->register('add');
     
    function add($num1,$num2){
      return $num1+$num2;
    }
     
    $HTTP_RAW_POST_DATA = file_get_contents('php://input');
    $serveur->service($HTTP_RAW_POST_DATA);
    client php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?include('./lib/nusoap.php');
    $client = new nusoap_client('http://monurl/android/serveur.php');
    $parametres = array('num1'=>'2','num2'=>'5');?>
    <?=$client->call('add', $parametres);?>
    Tu as testé le client PHP ? Il te renvoi bien le résultat de la fonction add ?

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut
    Oui , PHP Version 5.3.4

    le client php fonctionne bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $client->call('add', $parametres);
    // renvoi bien le résultat  "7"
    J'ai testé le nouveau code du server, mais toujours la même erreur avec le client Android.

    Edit:

    ok, ca fonctionne, oubli de la permission Internet dans le manifest

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 21
    Par défaut
    Ah oui ^^

    c'est vrai que je ne l'ai pas rappelé

  7. #7
    Invité de passage
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut
    Bonjour à tous,

    merci beaucoup pour le travaille ça fonctionne très bien

    j'ai trouvé la solution pour ceux que ça intéresse par la version
    nusoap-0.9.5 et php 5.3


    le serveur php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    require('inc/nusoap.php');
     
    $serveur = new soap_server;
    $serveur->register('add');
     
    function add($num1,$num2){
      return $num1+$num2;
    }
    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
    $serveur->service($HTTP_RAW_POST_DATA);
    ?>
    pour le client java n'oublie pas d'ajouter la permission internet dans AndroidManifest.xml


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/11/2014, 17h40
  2. Client Java pour un Web Service PHP
    Par jof8dev dans le forum Services Web
    Réponses: 7
    Dernier message: 03/08/2012, 12h21
  3. [Web Service][SOAP] Client PHP et Serveur JAVA
    Par Asfaloth dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/05/2010, 11h19
  4. Réponses: 2
    Dernier message: 26/01/2008, 12h19
  5. [SOAP] : client en PHP, serveur en kylix + .so
    Par RezzA dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/01/2003, 16h53

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