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 Java Discussion :

Erreur dans API SMSLib


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut Erreur dans API SMSLib
    Bonjour

    Je voudrais créer une application qui envoie des sms à partir d'un modem internet. Au cours de mes recherches, je suis tombé sur l'api SMSLib qui apparemment est dédié à ce type d'application, suivi du code suivant permettant l'envoi de sms:

    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
    83
    84
    85
    86
    87
     
    // SendMessage.java - Sample application.
    //
    // This application shows you the basic procedure for sending messages.
    // You will find how to send synchronous and asynchronous messages.
    //
    // For asynchronous dispatch, the example application sets a callback
    // notification, to see what's happened with messages.
     
    package examples.modem;
     
    import org.smslib.IOutboundMessageNotification;
    import org.smslib.Library;
    import org.smslib.OutboundMessage;
    import org.smslib.Service;
    import org.smslib.modem.SerialModemGateway;
     
    public class SendMessage
    {
    	public void doIt() throws Exception
    	{
    		Service srv;
    		OutboundMessage msg;
    		OutboundNotification outboundNotification = new OutboundNotification();
    		System.out.println("Example: Send message from a serial gsm modem.");
    		System.out.println(Library.getLibraryDescription());
    		System.out.println("Version: " + Library.getLibraryVersion());
    		srv = new Service();
    		SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 57600, "Nokia", "6310i");
    		gateway.setInbound(true);
    		gateway.setOutbound(true);
    		gateway.setSimPin("0000");
    		srv.setOutboundNotification(outboundNotification);
    		srv.addGateway(gateway);
    		srv.startService();
    		System.out.println();
    		System.out.println("Modem Information:");
    		System.out.println("  Manufacturer: " + gateway.getManufacturer());
    		System.out.println("  Model: " + gateway.getModel());
    		System.out.println("  Serial No: " + gateway.getSerialNo());
    		System.out.println("  SIM IMSI: " + gateway.getImsi());
    		System.out.println("  Signal Level: " + gateway.getSignalLevel() + "%");
    		System.out.println("  Battery Level: " + gateway.getBatteryLevel() + "%");
    		System.out.println();
    		// Send a message synchronously.
    		msg = new OutboundMessage("+306948494037", "Hello from SMSLib!");
    		srv.sendMessage(msg);
    		System.out.println(msg);
    		// Or, send out a WAP SI message.
    		//OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("+306948494037",  new URL("https://mail.google.com/"), "Visit GMail now!");
    		//srv.sendMessage(wapMsg);
    		//System.out.println(wapMsg);
    		// You can also queue some asynchronous messages to see how the callbacks
    		// are called...
    		//msg = new OutboundMessage("+309999999999", "Wrong number!");
    		//msg.setPriority(OutboundMessage.Priorities.LOW);
    		//srv.queueMessage(msg, gateway.getGatewayId());
    		//msg = new OutboundMessage("+308888888888", "Wrong number!");
    		//msg.setPriority(OutboundMessage.Priorities.HIGH);
    		//srv.queueMessage(msg, gateway.getGatewayId());
    		System.out.println("Now Sleeping - Hit <enter> to terminate.");
    		System.in.read();
    		srv.stopService();
    	}
     
    	public class OutboundNotification implements IOutboundMessageNotification
    	{
    		public void process(String gatewayId, OutboundMessage msg)
    		{
    			System.out.println("Outbound handler called from Gateway: " + gatewayId);
    			System.out.println(msg);
    		}
    	}
     
    	public static void main(String args[])
    	{
    		SendMessage app = new SendMessage();
    		try
    		{
    			app.doIt();
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    }
    J'ai ajouté les librairies suivantes à mon projet:

    smsserver-3.5.4.jar, log4j-1.2-api-2.0-beta9.jar, comm.jar et slf4j-api-1.6.6.jar
    Et pourtant les méthodes:
    Service(), setOutboundNotification
    et la Class
    OutboundNotification
    sont soulignés en rouge.

    Et lorsque j'exécute quand même le code, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Exception in thread "main" java.lang.ExceptionInInitializerError
    Caused by: java.lang.RuntimeException: Uncompilable source code - envoisms.EnvoiSMS.OutboundNotification is not abstract and does not override abstract method process(org.smslib.AGateway,org.smslib.OutboundMessage) in org.smslib.IOutboundMessageNotification
    	at envoisms.EnvoiSMS.<clinit>(EnvoiSMS.java:77)
    Java Result: 1
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'erreur que tu obtiens à l'exécution, c'est une erreur de l'IDE qui te signale que ton code ne compile pas :

    Exception in thread "main" java.lang.ExceptionInInitializerError
    Caused by: java.lang.RuntimeException: Uncompilable source code - envoisms.EnvoiSMS.OutboundNotification is not abstract and does not override abstract method process(org.smslib.AGateway,org.smslib.OutboundMessage) in org.smslib.IOutboundMessageNotification
    at envoisms.EnvoiSMS.<clinit>(EnvoiSMS.java:77)
    Java Result: 1
    L'important c'est la qualification des erreurs signalées par les parties en rouge dans ton source (le fait qu'elles soient rouges indiquent juste qu'il y a une erreur, mais ce qui est important, c'est quelle erreur !). Et ces erreurs doivent être corrigées pour pouvoir compiler, avant même d'envisager de lancer le programme.

    A mon avis, l'exemple de code que tu utilises n'est pas bon (ou du moins, il ne doit pas être prévu pour la version de la lib que tu as téléchargée). Regardes la documentation sur le site et sa section quickstart qui est accès explicite (à première vue, il faut 3 ou 4 lignes de code pour envoyer un SMS, donc beaucoup moins que l'exemple que tu as trouvé) : on voit rapidement que Service ne s'instancie pas par new Service() mais qu'il s'agit d'un singleton qu'il faut récupérer par Service.getInstance() (dans la version 4 du moins).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre expérimenté
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Par défaut
    Je ne connais pas smslib, mais l'erreur semble indiquer que la classe 'envoisms.EnvoiSMS.OutboundNotification' n'implémente pas toutes les méthodes abstraite de org.smslib.AGateway et/ou org.smslib.OutboundMessage.

    Généralement les IDE offre la possibilité de générer une implémentation vide. Cela peut suffire pour compiler.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Salut

    En fait je sais bien que quand c'est souligné en rouge cela veut dire qu'il y'a une erreur. Mais le problème est que Netbeans ne me propose aucune solution.C'est pour ça que j'ai compilé pour voir quel genre d'erreur j'aurais.

    Ensuite j'ai visité le site de SMSLib mais je pas trouvé grand chose.
    Mais sur cette page: http://smslib.org/doc/installation/ ,tout en bas, ils disent ceci:


    If you are new to SMSLib, spend some time with the two examples ReadMessages and SendMessage (located in the src/java/examples/modem folder) to find out the basics of how to read / send messages via your phone.
    Le problème est que je ne sais pas quel fichier télécharger pour avoir les 2 exemples.

    Merci

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Tu n'as pas dut chercher beaucoup ...

    http://smslib.org/maven2/v3/org/smslib/smslib/3.5.4/

    Tu as un jar contenant les sources (faut le décompresser ou utiliser une autre méthode) et dedans y'a les sources "exemples".
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Ok j'ai pu me procurer le package entier permettant d'envoyer et recevoir des SMS et dedans se trouvent les Class Sendmessage et ReadMessage.

    Voici le code de SendMessage se trouvant dans : smslib-v3-master/src/java/examples/modem

    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
    83
    84
    85
    86
     
    // SendMessage.java - Sample application.
    //
    // This application shows you the basic procedure for sending messages.
    // You will find how to send synchronous and asynchronous messages.
    //
    // For asynchronous dispatch, the example application sets a callback
    // notification, to see what's happened with messages.
     
    package examples.modem;
     
    import org.smslib.AGateway;
    import org.smslib.IOutboundMessageNotification;
    import org.smslib.Library;
    import org.smslib.OutboundMessage;
    import org.smslib.Service;
    import org.smslib.modem.SerialModemGateway;
     
    public class SendMessage
    {
    	public void doIt() throws Exception
    	{
    		OutboundNotification outboundNotification = new OutboundNotification();
    		System.out.println("Example: Send message from a serial gsm modem.");
    		System.out.println(Library.getLibraryDescription());
    		System.out.println("Version: " + Library.getLibraryVersion());
    		SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM4", 115200, "Huawei", "");
    		gateway.setInbound(true);
    		gateway.setOutbound(true);
    		gateway.setSimPin("0000");
    		// Explicit SMSC address set is required for some modems.
    		// Below is for VODAFONE GREECE - be sure to set your own!
    		gateway.setSmscNumber("+306942190000");
    		Service.getInstance().setOutboundMessageNotification(outboundNotification);
    		Service.getInstance().addGateway(gateway);
    		Service.getInstance().startService();
    		System.out.println();
    		System.out.println("Modem Information:");
    		System.out.println("  Manufacturer: " + gateway.getManufacturer());
    		System.out.println("  Model: " + gateway.getModel());
    		System.out.println("  Serial No: " + gateway.getSerialNo());
    		System.out.println("  SIM IMSI: " + gateway.getImsi());
    		System.out.println("  Signal Level: " + gateway.getSignalLevel() + " dBm");
    		System.out.println("  Battery Level: " + gateway.getBatteryLevel() + "%");
    		System.out.println();
    		// Send a message synchronously.
    		OutboundMessage msg = new OutboundMessage("306974000000", "Hello from SMSLib!");
    		Service.getInstance().sendMessage(msg);
    		System.out.println(msg);
    		// Or, send out a WAP SI message.
    		//OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("306974000000",  new URL("http://www.smslib.org/"), "Visit SMSLib now!");
    		//Service.getInstance().sendMessage(wapMsg);
    		//System.out.println(wapMsg);
    		// You can also queue some asynchronous messages to see how the callbacks
    		// are called...
    		//msg = new OutboundMessage("309999999999", "Wrong number!");
    		//srv.queueMessage(msg, gateway.getGatewayId());
    		//msg = new OutboundMessage("308888888888", "Wrong number!");
    		//srv.queueMessage(msg, gateway.getGatewayId());
    		System.out.println("Now Sleeping - Hit <enter> to terminate.");
    		System.in.read();
    		Service.getInstance().stopService();
    	}
     
    	public class OutboundNotification implements IOutboundMessageNotification
    	{
    		public void process(AGateway gateway, OutboundMessage msg)
    		{
    			System.out.println("Outbound handler called from Gateway: " + gateway.getGatewayId());
    			System.out.println(msg);
    		}
    	}
     
    	public static void main(String args[])
    	{
    		SendMessage app = new SendMessage();
    		try
    		{
    			app.doIt();
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    }
    J'ai ajouté comme librairie:

    comm.jar, log4j-to-slf4j-2.0-beta9.jar et smsserver-3.5.4.jar
    Pourtant quand j'exécute j'ai le message d'erreur suivant:

    Example: Send message from a serial gsm modem.
    SMSLib: A Java API library for sending and receiving SMS via a GSM modem or other supported gateways.
    This software is distributed under the terms of the Apache v2.0 License.
    Web Site: http://smslib.org
    Version: 3.5.4
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority
    at org.smslib.Service.listSystemInformation(Service.java:113) at org.smslib.Service.listSystemInformation(Service.java:113)
    at org.smslib.Service.initializeService(Service.java:103)
    at org.smslib.Service.<init>(Service.java:95)
    at org.smslib.Service.<clinit>(Service.java:90)
    at envoisms.SendMessage.doIt(SendMessage.java:41)
    at envoisms.SendMessage.main(SendMessage.java:86)
    Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more
    at org.smslib.Service.listSystemInformation(Service.java:113)
    Java Result: 1
    Merci

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Avant de t'intéresser à log4j-to-slf4j, faudrait déjà mettre log4j tout court -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Message d'erreur dans API 2.0.0
    Par Randobos dans le forum IGN API Géoportail
    Réponses: 17
    Dernier message: 11/09/2012, 11h16
  2. Erreur dans l'API com.google.android.maps
    Par étudiante_info dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/08/2011, 18h33
  3. Réponses: 3
    Dernier message: 09/05/2006, 17h21
  4. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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