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 :

[Axis - NuSoap] Remplissage Bean


Sujet :

Services Web Java

  1. #1
    kij
    kij est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut [Axis - NuSoap] Remplissage Bean
    Bonjour,

    J'ai un web service PHP utilisant NuSoap qui fonctionne sur une URL et donc voici la définition:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <?php
    // load SOAP library
    require_once("libs/nusoap.php");
    require_once("libs/functions.php");
     
    // load library that holds implementations of functions we're making available to the web service
    // set namespace
    $ns="http://127.0.0.1:8989/real_mvp";
    // create SOAP server object
    $server = new soap_server();
    // setup WSDL file, a WSDL file can contain multiple services
    $server->configureWSDL('MvpSystem',$ns);
    $server->wsdl->schemaTargetNamespace=$ns;
     
    // register a web service method
    function search($query) {
     
    	$results = array();
    	$tempArray = array('id' => '3',
    		 		'name' => 'MVP1',
    		 		'hp' => 'dsf',
    		 		'level' => '50'
    			);
    	array_push($results, $tempArray);
    	$tempArray = array('id' => '7',
    		 		'name' => 'MVP2',
    		 		'hp' => 'adada',
    		 		'level' => '79'
    			);
    	array_push($results, $tempArray);
     
    	return $results;
    }
     
    $server->wsdl->addComplexType('Mvp',
    	'complexType',
    	'struct',
    	'all',
    	'',
    	array(
    		'id' => array('name' => 'id',
    		 	'type' => 'xsd:int'),
    		'name' => array('name' => 'name',
    		 	'type' => 'xsd:string'),
    		'hp' => array('name' => 'hp',
    		 	'type' => 'xsd:string'),
    		 'level' => array('name' => 'level', 'type' => 'xsd:int')
    	)
    );
     
     
    $server->wsdl->addComplexType('Mvps',
    				'complexType',
    				'array',
    				'',
    				'SOAP-ENC:Array',
    				array(),
    				array(
    					array('ref'=>'SOAP-ENC:arrayType',
    								'wsdl:arrayType'=>'tns:Mvp[]')
    				),
    				'tns:Mvp'
    			);
     
    $server->register('search',
    			array('query' => 'xsd:string'),
    			array('return' => 'tns:Mvps'),
    			$ns,
    			'$ns#search',
    			'rpc',
    			'encoded',
    			'Returns the data for every person'
    		);
     
     
     
    // service the methods 
    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
    $server->service($HTTP_RAW_POST_DATA);
     
    ?>
    A coté de ça, j'ai un client Java chargé de requêter ce web service.
    Voici le main :
    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
     
    public static void main (String[] args){
     
    		BasicConfigurator.resetConfiguration();
    		BasicConfigurator.configure();
     
    		String targetNameSpace = "http://127.0.0.1:8989/real_mvp";
    		String endpoint = targetNameSpace+"/server.php";
    		String myOpName = "search";
     
    		Service service = new Service();
    		try{
    			Call call = ( Call )service.createCall();
     
    			call.setTargetEndpointAddress(new java.net.URL(endpoint));
     
     
    			QName qn = new QName(targetNameSpace, "Mvp" );
    			call.registerTypeMapping(	Mvp.class,
    										qn,
    										new BeanSerializerFactory(Mvp.class,qn),
    										new BeanDeserializerFactory(Mvp.class,qn)
    									);
     
    			call.addParameter("query",XMLType.XSD_STRING, ParameterMode.IN);
    			call.setReturnType(XMLType.SOAP_ARRAY);
     
     
    			Mvp[] ret = (Mvp[]) call.invoke(myOpName, new Object[] { "test" } );
     
     
    			System.out.println("Result = "+ret.length);
    			Mvp cur = null;
    			for (int i = 0;  i < ret.length; i++){
    				cur = ret[i];
    				System.out.println("Mvp ["+cur.getId()+"] = "+cur.getName()+" has "+cur.getHp()+" HP.");
    				System.out.println(cur.getLevel());
    			}
     
    		}catch(RemoteException e){
    			System.out.println("Remote error : "+e.getMessage());
    		}catch(ServiceException e){
    			System.out.println("Service error : "+e.getMessage());
    		}catch(MalformedURLException e){
    			System.out.println("MalformedUrl error : "+e.getMessage());
    		}
     
    	}
    Après avoir interrogé le web service, je tente d'afficher les valeurs retournées.
    J'ai bien deux bean de type 'Mvp' qui sont créé, mais les données qui y sont mises ne sont pas bonnes. Voici les traces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Result = 2
    Mvp [3] = MVP2 has MVP2 HP.
    3
    Mvp [7] = MVP2 has MVP2 HP.
    7
    Le problème est clair : chaque propriété de mon objet Java 'Mvp' qui a le même type est rempli de la première valeur de ce type fournie par le web service.

    La valeur de l'ID est rempli à la fois dans la propriété 'id' et 'level' (au lieu de recevoir '79' ou '50' dans 'level')
    De même que la valeur de 'name' est rempli à la fois dans la propriété 'name' et 'hp'. (au lieu de recevoir 'adada' ou 'dsf' dans 'hp')

    Quelqun aurait-il une idée du pourquoi ?

    En vous remerciant par avance pour votre temps.

    Cordialement.

  2. #2
    kij
    kij est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Re,

    Finalement pour résoudre le problème, et c'est la solution à prendre à chaque fois je suppose, j'ai récupérer mon fichier wsdl depuis l'url du web service, puis générer automatiquement les classes Java Bean Skeleton sous Eclipse.

    Ensuite j'ai modifié mon Main de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    		Service service = new Service();
    		try{
    			MvpSystemBindingStub bindingStub = new MvpSystemBindingStub(new java.net.URL(endpoint),service);
    			bindingStub._createCall();
    			org.kijsoft.mvp.timer.skeletons.Mvp[] myTab = bindingStub.search("test");
    			System.out.println("Length = "+myTab.length);
     
    			for (int i = 0; i < myTab.length; i++){
    				System.out.println("Mvp ["+myTab[i].getId()+"] : "+myTab[i].getName()+ " has "+myTab[i].getHp()+" HP");
    			}
    }catch (... ){
    }
    J'ai bien mes bean qui sont remplis correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Length = 2
    Mvp [3] : MVP1 has dsf HP
    Mvp [7] : MVP2 has adada HP
    Sujet clot.

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

Discussions similaires

  1. [debutant] Passage/Remplissage de bean
    Par Dr@ke dans le forum JSF
    Réponses: 5
    Dernier message: 25/09/2007, 16h13
  2. [Axis] Modifications de beans Générés
    Par troisj dans le forum Services Web
    Réponses: 2
    Dernier message: 11/06/2007, 12h17
  3. remplissage automatique de jtable avec propriétés de beans
    Par zais_ethael dans le forum Composants
    Réponses: 3
    Dernier message: 04/10/2006, 21h01
  4. Transformer un bean généré par Axis
    Par kurkLord dans le forum Services Web
    Réponses: 2
    Dernier message: 17/02/2005, 10h31
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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