9

Sto cercando di utilizzare l'API Java EWS v1.1.5 (http://archive.msdn.microsoft.com/ewsjavaapi) in un'applicazione Android e ho eseguito un numero di problemi. Ho scaricato il codice sorgente e ho seguito le istruzioni fornite per compilare l'API Java EWS in Eclipse. In queste istruzioni si è detto di scaricare e aggiungere le seguenti pre-requiste dipendenze fra i file jar:Problemi nell'utilizzo dell'API Java EWS su Android

  • commons-codec-1.4.jar
  • commons-HttpClient-3.1.jar
  • commons-logging- 1.1.1.jar
  • JCIFS-1.3.15.jar

io abbiamo fatto questo, e seguito le istruzioni di costruzione con prodotti i seguenti file jar:

  • EWSAPI-1.1.0.jar
  • EWSAPIWithJars-1.1.0

Successivamente, ho costruito una nuova applicazione Android, ha aggiunto le autorizzazioni appropriate per il manifesto, e poi ha aggiunto la seguente origine a la propria attività primaria OnCreate:

ExchangeService service = new ExchangeService(); 
ExchangeCredentials credentials = new WebCredentials("emailaddress", "password");  
service.setCredentials(credentials); 

try 
{ 
    service.autodiscoverUrl("emailaddress", this); 
} 
catch (Exception e) 
{  
    e.printStackTrace(); 
} 

primo luogo ho provato a fare funzionare questa applicazione con il file-EWSAPI 1.1.0.jar come una dipendenza. Quando ho fatto questo, ho ottenuto il seguente errore fatale:

Uncaught handler: thread main exiting due to uncaught exception java.lang.NoClassDefFoundError: org.apache.commons.httpclient.MultiThreadedHttpConnectionManager at microsoft.exchange.webservices.data.ExchangeServiceBase.(Unknown Source) at microsoft.exchange.webservices.data.ExchangeServiceBase.(Unknown Source) at microsoft.exchange.webservices.data.ExchangeService.(Unknown Source) at com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:40)

Da quello che ho studiato, sembra che si genera questo errore perché Android è dotato di Apache HttpClient 4.0, che non sembra a avere più la classe MultiThreadedHttpConnectionManager.

Se invece rimuovere l'EWSAPI-1.1.0.jar, e di utilizzare invece il file EWSAPIWithJARS-1.1.0.jar come dipendenza, ottengo il seguente errore:

VFY: unable to resolve static method 908: Ljavax/xml/stream/XMLOutputFactory; newInstance()Ljavax/xml/stream/XMLOutputFactory; VFY: dead code 0x0008-006a in L microsoft/exchange/webservices/data/EwsUtilities;.formatLogMessage (Ljava/lang/String;Ljava/lang/String;) Ljava/lang/String; VFY: unable to find class referenced in signature (Ljavax/xml/stream/XMLStreamWriter;)

E poi alla fine. ..

FATAL EXCEPTION: main java.lang.VerifyError: microsoft.exchange.webservices.data.AutodiscoverService at microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl(Unknown Source) at microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl(Unknown Source) at com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:41)

io parto dal presupposto perché ora sto compreso il vaso HttpClient 3.1 ed è in conflitto con la HttpClient 4.0 vaso incluso con le librerie Android.

La mia domanda è se c'è un modo per me di utilizzare l'API Java EWS in un progetto Android senza dover riscrivere le parti di esso che fanno riferimento a elementi specifici di HttpClient 3.1 che non sono più in 4.0.

+5

"Aggiornamento: lavoro inviato. Trovato uno migliore." –

+0

puoi dare il link dove trovi le istruzioni di compilazione per generare i file jar. quali sono i 2 file jar da generare. Per favore aiutatemi .. è urgente per me – png

risposta

0

Questa non è una risposta utile, ma ho anche faticato a guardare l'API EWS nelle ultime due settimane, senza successo. Il problema principale che ho riscontrato è che fa riferimento a molte API javax che non sono su Android. C'è un trucco che puoi trovare che spiega come "ri-classificare" questi, ma non ho ancora funzionato; inoltre, DnsClient fa riferimento ad alcuni spazi dei nomi che jarsearches restituisce solo per rt.jar, il runtime principale. E questo incluso in un'app per Android sarebbe semplicemente pazzesco!

Prima di trovare l'API stavo cercando di usare KSOAP per comunicare con EWS, ma di nuovo ho avuto problemi - devi essere in grado di fare NTLM e SSL e non ho trovato alcun modo di combinare tutti questi con KSOAP in qualsiasi modo semplice.

L'API EWS sembra la strada da percorrere (perché reinventare la ruota), ma farlo funzionare su Android sembra molto difficile (se non impossibile)

+0

Sì, ho seguito lo stesso percorso per cercare di fare riferimento alle API di javax, ma ho riscontrato molte difficoltà a seguire lo stesso articolo. Ho anche avuto problemi con NTLM. –

+0

Ho una versione NON Ksoap di NTLM e l'autenticazione di base che funziona con Exchange su Android e ho pubblicato un esempio qui: https://github.com/bradparks/Exchange_SOAP_example_using_NTLM_and_BASIC_authentication_from_java_for_desktop_and_android –

7

È possibile utilizzare EWS API di Microsoft per Android nel modo seguente passi,

  1. scaricare il codice sorgente disponibile nella URL, http://archive.msdn.microsoft.com/ewsjavaapi EWSJavaAPI_1.1.5.zip

  2. Apportare le modifiche sopra api a lavorare per JDK 1.4 in Eclipse come annotazioni di rimozione di override ecc

  3. Scarica il codice sorgente di javax. * Pacchetto disponibile in seguito URL, http://www.java2s.com/Code/JarDownload/jsr173/jsr173_1.0_src.jar.zip

  4. Scarica il codice sorgente di Stax api disponibile in URL di seguito, http://dist.codehaus.org/stax/distributions/stax-src-1.2.0.zip

  5. Conservare tutte le fonti nell'ambito del progetto singolo java in Eclipse

  6. Aprire l'esploratore progetto e selezionare il pacchetto che sono inizia con "javax" e rinominare alla vostra azienda nome esempio: com. Nota: Eclipse chiederà la modifica di tutti i contesti di denominazione, quindi fare clic su OK.

  7. Esporta tutte le origini java in un unico file jar.

  8. Allora è bello andare a usare il barattolo nell'applicazione Android senza alcun problema.

Ho utilizzato la stessa procedura spiegata in precedenza e ha funzionato perfettamente perfettamente nell'applicazione Android.

+0

Dopo diverse ore di ballo in giro per tutte queste cose sono finalmente riuscito a fare Questo! GRAZIE!!! –

+1

Sto provando lo stesso e non sta funzionando. Ho creato il file jar e l'ho aggiunto al progetto Android. Ma quando provo ad accedere a qualsiasi classe da questa libreria, sto ricevendo un'eccezione classdefnotfound. Per favore aiuto . – png

+4

se qualcuno lo ha fatto, perché non lo pubblica su un repository Github da qualche parte in modo che tutti possano trarne beneficio? –

0

Verificare la libreria this per la soluzione