Comment manipuler les menus d'une application externe avec Java?

Fermé
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 - 4 juin 2017 à 11:56
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 6 juin 2017 à 13:32
Bonjour à tous,

Je suis à la recherche d'un moyen qui me permet d'accéder et de manipuler les menus et les sous menus d'une application externe à partir de Java (par exemple les menus "Fichier", "Edition"," Affichage", etc. de Microsoft Word). j'ai beau cherché sur google et sur les forums mais je n'ai rien trouvé. existe-il une solution pour ça ou non?

Merci pour votre aide.
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 juin 2017 à 13:09
Bonjour,

Quel serait le but ? Est-ce que tu as un exemple concret ?

Pour l'instant à part utiliser un Robot qui va cliquer à ta place ça parait très compliqué d’interagir avec un autre programme, par contre on peut éventuellement modifier un fichier, et dans ton exemple changer l'affichage, directement avec le programme Java, sans passer par le logiciel d'origine.
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4
Modifié le 4 juin 2017 à 13:48
Bonjour,

Mon but est d'automatiser un ensemble de tâches. J'ai pris Word comme exemple. Mais l'application que je vise réellement est: SoapUI. En fait, j'essaye de trouver s'il y a possibilité de créer un nouveau projet Soap dans SoapUI (en automatisant l'action de cliquer sur "File" puis sur "New SOAP Project") en faisant passer aussi automatiquement l'adresse du fichier WSDL dont on dispose au préalable.

J'espère que j'ai été assez claire!!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 juin 2017 à 13:52
Et quel est le but après ? Une fois que ton projet SoapUI est créé, qu'est-ce que tu vas en faire ? Si tu créés un projet SoapUI il faudra utiliser SoapUI après pour l'utiliser.!
Alors que tu pourrais consommer directement le SOAP en Java et je t'ai déjà montré comment dans les discussions précédentes...
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié le 4 juin 2017 à 15:16
Le but final est de pouvoir générer les paramètres d'entrés permettant d'invoquer le service en question.

A mon avis, avec SoapUI les choses se font d'une manière plus automatique. En effet, on crée le projet avec l'adresse du WSDL, on choisit une méthode, on clique sur la requête, le fichier Soap s'affiche, on introduit les valeurs d'entrés; il ne reste que de le faire passer en paramètre dans le programme Java.

Par contre, dans la deuxième solution, je pense qu'il faut bien connaitre le code des classes qui se génèrent avec la commande Maven pour pouvoir par la suite écrire le programme java en se basant sur ces classes et leurs méthodes . De plus, j'ai eu un petit souci avec la gestion des packages, chose que j'ai réglé en basculant vers l'IDE Eclipse et en faisant un copier/coller du package "net.webservicex" dans le même niveau que le package test. (je n'ai pas pu compiler et exécuter sur la console, malgré j'ai placé les deux packages au même niveau hiérarchique).

En réalité, mon objectif est d'invoquer le plus grand nombre de services web qui existent afin de générer une base de test contenant des informations liées aux consommateurs des différents services. Ces informations sont de type: qui a invoqué un service donné, combien de fois l'a-il invoquer, à quelle date,etc. la base de test générée nous servira pour effectuer des tests pour valider un projet réalisé dans le cadre des services web.

Au début j'ai tenté de trouver une base de test qui existe déjà. J'ai beau cherché mais je n'ai rien trouvé!! j'ai également essayer de trouver un outil qui permet de capter ces in formations mais rien !! Du coup, j'essaye de générer ma propre base.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018
4 juin 2017 à 15:26
Tout dépend ce que tu cherche à faire au final.

"avec SoapUI les choses se font d'une manière plus automatique"
Pourtant c'est tout le contraire que tu décris puisqu'il faut choisir la méthode, cliquer sur la requête, entrer les paramètres, lire le résultat... ça nécessite une action humaine.

L'avantage du code généré c'est qu'il gère déjà toute la partie communication avec le service Soap (comme le fait SoapUI) tu n'as donc pas à gérer toi même les URLConnection, OutputStream etc. qui sont très bas niveau et où à la moindre erreur tu ne sais plus ce qui se passe, donc c'est surtout une question de performance et de fiabilité, sans parler du gain de temps à les développer puisque que le code est généré.

Et non, pas besoin de connaître plus que ça le code généré puisqu'en fait il n'est que le reflet du WSDL, donc les requêtes à choisir, les paramètres à entrer... il te faudra le même niveau de connaissance qu'avec SoapUI.

Quant au problème avec mon exemple, ça marchait très bien chez moi...

Mais si je peux me permettre encore une question, quel est ton but vraiment au final ?
Parce que qu'on le fasse d'une manière ou d'une autre le choix de la techno n'est pas très important si c'est à faire une fois pour un service et qu'après t'es tranquille. Par contre si après tu as encore 150 WSDL différents à intégrer c'est encore différent...
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
4 juin 2017 à 15:56
Effectivement, le problème est lié à ta dernière phrase!!
En fait, j'ai rajouté un petit paragraphe dans mon message précédent mais je pense que tu ne l'a pas reçu!! dans ce paragraphe, je parle de mon but final qui s'annonce comme suit:

En réalité, mon objectif est d'invoquer le plus grand nombre de services web qui existent afin de générer une base de test contenant des informations liées aux consommateurs des différents services. Ces informations sont de type: qui a invoqué un service donné, combien de fois l'a-il invoquer, à quelle date,etc. la base de test générée nous servira pour effectuer des tests pour valider un projet réalisé dans le cadre des services web.

Au début j'ai tenté de trouver une base de test qui existe déjà. J'ai beau cherché mais je n'ai rien trouvé!! j'ai également essayer de trouver un outil qui permet de capter ces in formations mais rien !! Du coup, j'essaye de générer ma propre base.

j'espère étais clair.

merci pour tes réponses. j'ai vraiment appris pas mal de choses avec toi.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 juin 2017 à 20:29
Remarque : en fait wsgen n'est même pas utile pour créer un serveur, tu as déjà toutes les classes qu'il faut avec le wsimport.

Exemple avec GeoIP :

package test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Logger;

import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;

import net.webservicex.*;

@WebService(name = "GeoIPService")
public class Test implements GeoIPServiceSoap {

    private final GeoIPServiceSoap realService;

    public Test() throws MalformedURLException {
        URL url = new URL("http://www.webservicex.net/geoipservice.asmx?wsdl");
        QName qname = new QName("http://www.webservicex.net/", "GeoIPService");
        Service service = GeoIPService.create(url, qname);
        realService = service.getPort(GeoIPServiceSoap.class);
    }

    @Override
    public GeoIP getGeoIP(String ipAddress) {
        Logger.getGlobal().info("getGeoIP: " + ipAddress);
        return realService.getGeoIP(ipAddress);
    }

    @Override
    public GeoIP getGeoIPContext() {
        Logger.getGlobal().info("getGeoIPContext");
        return realService.getGeoIPContext();
    }

    public static void main(String[] args) throws Exception {
        Endpoint.publish("http://localhost:8080/GeoIPService", new Test());
    }

Tu peux tester http://localhost:8080/GeoIPService?wsdl avec SoapUI.
Ça renverra bien le bon résultat puisqu'on utilise le vrai service mais en plus ça te rajoute sur ton serveur des logs concernant les appels effectués.

juin 04, 2017 8:26:56 PM test.Test getGeoIPContext
INFOS: getGeoIPContext
juin 04, 2017 8:27:10 PM test.Test getGeoIP
INFOS: getGeoIP: 8.8.8.8
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4
Modifié le 5 juin 2017 à 11:44
Bonjour,

"...Je ne vois toujours pas comment tu vas pouvoir imposer "à grande échelle" aux utilisateurs de passer par ton service pour récupérer leurs informations."

Concernant ce point, je ne vais rien imposer!! Je me place seulement dans le cas où on pourra, peut être, dans le futur avoir ces informations à grande échelle (ça sera peut être un autre projet dans lequel on peut avoir peut être des droits particuliers pour récupérer ces informations) . Pour le moment, mon souci est de récolter des informations pour un ensemble restreint d'utilisateur dans le but de fournir une première et petite base de test.

En ce qui concerne le programme que tu m'a envoyé, j'ai essayé de l'exécuter en remplaçant l'ancien code de la classe "Test" par celui-ci (sous Eclipse), mais j'obtiens l'erreur suivante:

Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: Erreur d'exécution du serveur : java.net.BindException: Address already in use: bind
 at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(Unknown Source)
 at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(Unknown Source)
 at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(Unknown Source)
 at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(Unknown Source)
 at javax.xml.ws.Endpoint.publish(Unknown Source)
 at test.Test.main(Test.java:64)
Caused by: java.net.BindException: Address already in use: bind
 at sun.nio.ch.Net.bind0(Native Method)
 at sun.nio.ch.Net.bind(Unknown Source)
 at sun.nio.ch.Net.bind(Unknown Source)
 at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
 at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
 at sun.net.httpserver.ServerImpl.<init>(Unknown Source)
 at sun.net.httpserver.HttpServerImpl.<init>(Unknown Source)
 at sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(Unknown Source)
 at com.sun.net.httpserver.HttpServer.create(Unknown Source)
 ... 6 more

Je pense qu'il s'agit d'un problème au niveau de la méthode "main" !!!!!!!!!!!!!!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018
5 juin 2017 à 11:44
Tu as déjà un programme qui tourne sur le port 8080, essayes un autre port.

Endpoint.publish("http://localhost:8081/GeoIPService", new Test());
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
5 juin 2017 à 11:56
J'ai réessayé avec le port 8081. Toujours rien. Mais j'ai constaté que le programme qui tourne c'est ce programme lui-même parce que quand je lance l'exécution pour la première fois je n'ai rien (pas de résultats), et quand je relance pour la deuxième fois j'obtiens l'erreur en question. je n'avais pas remarqué ça au début. donc le port est utilisé par ce programme!!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018
5 juin 2017 à 11:59
"quand je lance l'exécution pour la première fois je n'ai rien (pas de résultats)"
C'est normal, il n'affiche rien tant qu'il n'a pas de requêtes à traiter.

Il faut que tu lances SoapUI pour faire des requêtes sur le WSDL en local et là tu verras apparaître les logs en question.
0
chercheur2017 Messages postés 57 Date d'inscription mardi 18 avril 2017 Statut Membre Dernière intervention 16 décembre 2018 4 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
5 juin 2017 à 12:12
Là je me perds encore!!

Mais par chance, SoapUI était déjà ouvert, et la requête existait déjà. Je l'ai fermé et je l'ai relancé mais pas de résultats!!!!!!!!!!!!!!!!
0