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

Collection et Stream Java Discussion :

Equivalence du array() de PHP


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut Equivalence du array() de PHP
    Bonjour,

    Je cherche à établir une équivalence de ce code PHP en Java.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $proxy = new SoapClient('http://myhost/api/?wsdl');
    $sessionId = $proxy->login('test', 'testtest');
    $newProductData = array(
        'name'              => "Cartouche d'encre",
        'websites'          => array(1), // array(1,2,3,...)
        'short_description' => 'short description',
        'description'       => 'description',
        'price'             => 12.05
    );
     
    $proxy->call($sessionId, 'product.create', array('simple', '3', 'sku_of_product', $newProductData));
    J'ai généré mon Stub avec Axis2 à partir du WSDL (ADB Binding). Pas de problème de ce côté
    Mon problème vient essentiellement de la conversion des array.
    J'ai bien essayé d'avoir un Object[] contenant un Map (HashMap, LinkedHashMap) mais lorsque que je fais un call je lève l'exception suivante:
    org.apache.axis2.AxisFault: Unknow type can not serialize

    La seule façon de ne pas lever cette erreur étant de faire un .toString() du tableau. Mais dans ce cas, le serveur répond qu'il ne trouve pas/comprend pas les arguments.

    Une idée ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pourquoi faire un tableau de Map ?
    Tes arguments/types de retour doivent être sérializables pour qu'il puisse traduire en SOAP.
    Essaye d'envoyer un Map<String, Serializable>, c'est ce qui semble ressembler le plus à ce que tu as en php.
    Je veux aussi dire que Java n'est pas un langage de script et est typé, donc ton tableau newProductData n'est pas forcément complètement transcriptible aussi facilement tel quel.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Merci pour ta réponse George7

    Pourquoi faire un tableau de Map ?
    Tout simplement parce que j'ai un tableau fixe qui contient un tableau associatif.

    Le premier tableau je le transcris en Object[] et le deuxième qui est associatif, en Map. ca me parraissait bien en tout cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Map<Object> tab2 = new HashMap<Object>()
    tab2.put("name","test");
    tab2.put("test","name");
    Object[] tab1 = {"1","2",tab2};
    Je veux aussi dire que Java n'est pas un langage de script et est typé, donc ton tableau newProductData n'est pas forcément complètement transcriptible aussi facilement tel quel.
    Je sais bien, mais comme je n'arrive pas à utiliser l'API, j'essaye de convertir ce bout de code PHP que je sais fonctionelle.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Object n'est pas forcément Serializable, c'est pour ça qu'il faut donner un tableau de Serializable pour être sûr de pas mettre des choses interdites.
    Mais de toute façon quand tu génère les client avec Axis2 à partir du fichier WSDL, il crée des stubs qui permettent de faire un appel de méthode tout à fait normal sans se soucier de faire des appels SOAP, et où les types sont vérifés par le compilateur Java comme pour n'importe quelle méthode. Je ne comprends pas le problème, tu utilises quoi pour faire l'appel en Java ? on üpeut voir un bout de code un peu plus explicite ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    on peut voir un bout de code un peu plus explicite ?
    C'est possible:

    extrait du WSDL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <message name="call">
    <part name="sessionId" type="xsd:string"/>
    <part name="resourcePath" type="xsd:string"/>
    <part name="args" type="xsd:anyType"/>
    </message>
     
    <operation name="call">
    <documentation>Call api functionality</documentation>
    <input message="typens:call"/>
    <output message="typens:callResponse"/>
    </operation>
    extrait de mon code 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
     
    Call call = new Call();
    call.setSessionId(loginReturn);		
    call.setResourcePath("category.create");			
     
     
    Serializable[] arguments = new Serializable[2];
    arguments[0] = "2";			
     
    Map<Serializable, Serializable> infosCateg = new LinkedHashMap<Serializable, Serializable>();
    infosCateg.put("name", "test");
    infosCateg.put("hide_from_customer_group", "NONE");
    arguments[1] = (Serializable)infosCateg;
     
    call.setArgs((Serializable)arguments);
    CallResponse callResponse = stub.call(call);
    System.out.println(callResponse.toString());
     
    System.out.println("Test OK");
    Et toujours cette erreur:
    org.apache.axis2.AxisFault: Unknow type can not serialize

  6. #6
    Invité
    Invité(e)
    Par défaut
    Justement : si tu génère tout avec axis2 en lui donnant le fichier WSDL, tu auras plus besoin de faire appel à Call toit même. Il te générera plein de classes qui te permettront de faire un appel du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stubGenere.call(arg1, arg2);
    Regarde dans la documentation d'axis

Discussions similaires

  1. Equivalent Response.redirect en PHP ?
    Par Kotik dans le forum Langage
    Réponses: 2
    Dernier message: 06/04/2006, 11h34
  2. Equivalence requète asp en php
    Par xender dans le forum ASP
    Réponses: 13
    Dernier message: 08/12/2005, 08h29
  3. [XSLT]L'équivalent XSL de isset (php)
    Par xilay dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/11/2005, 10h03
  4. [C#] recherche equivalent du readfile() de PHP
    Par MaxiMax dans le forum ASP.NET
    Réponses: 5
    Dernier message: 01/07/2005, 16h41
  5. Quel est l'equivalent de Explode de php ?
    Par reg11 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 15h50

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