2012-11-28 2 views
2

J'avais besoin d'écrire un JavaAgent dans une base de données Lotus Notes 6.5 pour accéder à un service web. J'ai utilisé l'API Axis Apache à cette fin. J'ai créé un agent Java et ajouté les fichiers jar d'axe dans l'agent en utilisant le bouton Modifier le projet.JavaAgent dans Lotus Notes 6.5 utilisant l'API api donne Exception "Aucune implémentation définie pour org.apache.commons.logging.LogFactory"

Ci-dessous le code de l'agent:

import lotus.domino.*; 
import javax.xml.*; 
import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 
import javax.xml.namespace.QName; 
import java.net.URL; 

public class JavaAgent extends AgentBase { 

    public void NotesMain() { 

     try { 


      Session session = getSession(); 
      AgentContext agentContext = session.getAgentContext(); 

      String endpoint = "http://ws.apache.org:5049/axis/services/echo"; 
      Service service = new Service(); 
      Call  call = (Call) service.createCall(); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint)); 

      call.setOperationName(new QName("http://soapinterop.org/", "echoString")); 
      String ret = (String) call.invoke(new Object[] { "Hello!" }); 
      System.out.println("Sent 'Hello!', got '" + ret + "'"); 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Et ci-dessous est l'exception levée:

java.lang.ExceptionInInitializerError: org.apache.commons.discovery.DiscoveryException: No implementation defined for org.apache.commons.logging.LogFactory 

    at org.apache.commons.discovery.tools.SPInterface.newInstance(SPInterface.java:197) 

    at org.apache.commons.discovery.tools.DiscoverClass.newInstance(DiscoverClass.java:579) 

    at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:418) 

    at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:378) 

    at org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:84) 

    at java.security.AccessController.doPrivileged(Native Method) 

    at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:80) 

    at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:72) 

    at org.apache.axis.configuration.EngineConfigurationFactoryFinder.<clinit>(EngineConfigurationFactoryFinder.java:94) 

    at org.apache.axis.client.Service.<init>(Service.java:111) 

    at JavaAgent.NotesMain(JavaAgent.java:17) 

    at lotus.domino.AgentBase.runNotes(Unknown Source) 

    at lotus.domino.NotesThread.run(NotesThread.java:218) 

Je thried de suivre quelques liens sur Internet comme, mais je n'a pas pu obtenir exactement ce qu'il demandait de faire. par exemple: http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/40d033fba3897f4d85256cd30034026a?OpenDocument

Toute aide sera formidable. Tout ce que je voulais faire, c'est écrire un agent pour que je puisse accéder à un service web, disons le service web de conversion de température sur w3schools. http://www.w3schools.com/webservices/tempconvert.asmx?op=FahrenheitToCelsius

Répondre

2

Je googlé avec votre message d'erreur et c'est le premier coup:

http://croarkin.blogspot.fi/2010/08/commons-logging-headaches-with-axis.html

Il suggère d'utiliser un fichier commons-logging.properties avec:

org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger 
org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl 

ou de mettre ceci à votre code:

@BeforeClass 
public static void beforeClass() { 
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.Log4JLogger"); 
System.setProperty("org.apache.commons.logging.LogFactory", "org.apache.commons.logging.impl.LogFactoryImpl"); 
} 

Probablement vous avez déjà essayé cela parce que c'est le premier coup avec google mais juste au cas où ...

Questions connexes