prock
prock

Reputation: 11

Why streaming subscription is not working in Java EWS API?

Does Microsoft support Java EWS API now-a-days? This doubt came up because I started seeing "The Archive Gallery has been retired" on their site.

What I am trying to do is to get the new mails from Microsoft outlook server by creating a Java EWS API client with streaming subscription.

My java code throws a NullPointerException on line conn.addSubscription(subscription); (code mentioned below).

Thanks in advance.

public class StreamSub implements INotificationEventDelegate, ISubscriptionErrorDelegate{
public static ExchangeService service;
public StreamSub() throws Exception {
    service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    ExchangeCredentials credential = new WebCredentials("myemail","my password");
    service.setCredentials(credential);
    service.autodiscoverUrl("myemail");
    this.rep();
}
public void rep() throws Exception
{
    WellKnownFolderName sd = WellKnownFolderName.Calendar;
    FolderId folderid = new FolderId(sd);
    List<FolderId> folder = new ArrayList<FolderId>();
    folder.add(folderid);
    StreamingSubscription subscription = service.subscribeToStreamingNotifications(folder, EventType.Created, EventType.Deleted, EventType.Modified, EventType.Status);
    StreamingSubscriptionConnection conn = new StreamingSubscriptionConnection(service,30);
            conn.addSubscription(subscription);
            conn.addOnNotificationEvent(this);
            conn.addOnDisconnect(this);
    conn.open();
    //EmailMessage msg = new EmailMessage(service);
    //msg.setSubject("test");
    //msg.getToRecipients().add("my e-mail");
    //msg.send();
    //Thread.sleep(20000);
    conn.close();
    System.out.println("close");
}

The above code prints a stack trace:

java.lang.NullPointerException
at microsoft.exchange.webservices.data.Strings.(Strings.java:223)
at microsoft.exchange.webservices.data.SubscribeRequest.validate(SubscribeRequest.java:50)
at microsoft.exchange.webservices.data.SubscribeToStreamingNotificationsRequest.validate(SubscribeToStreamingNotificationsRequest.java:32)
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:822)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.subscribeToStreamingNotifications(ExchangeService.java:2438)
at StreamSub.rep(StreamSub.java:21)
at StreamSub.(StreamSub.java:13)
at GUIS$3.actionPerformed(GUIS.java:81)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
microsoft.exchange.webservices.data.ServiceValidationException
at microsoft.exchange.webservices.data.SubscribeRequest.validate(SubscribeRequest.java:49)
at microsoft.exchange.webservices.data.SubscribeToStreamingNotificationsRequest.validate(SubscribeToStreamingNotificationsRequest.java:32)
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:822)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.subscribeToStreamingNotifications(ExchangeService.java:2438)
at StreamSub.rep(StreamSub.java:21)
at StreamSub.(StreamSub.java:13)
at GUIS$3.actionPerformed(GUIS.java:81)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Upvotes: 0

Views: 1409

Answers (1)

user1017413
user1017413

Reputation: 2183

You need to load the Strings.properties file (should be in the base directory of the downloaded API) for starters. Without that, it can't find error messages and throws the exception you see. Kind of ironic that it throws an error while processing an error. Put it in a resources folder (or wherever you like, really) and load it up in the Strings.java class. There's actually a bunch of commented-out code doing just that. Load it up and you should at least be able to get the actual error that's breaking your streaming subscription. Alternatively, attach a trace listener and print the XML of the response so you can dig through that and find the error message.

Ah, you've changed things a bit. Microsoft hasn't updated EWS Java 1.2 for about a year and a half. The project itself has moved to a new page, so it's still available:

http://code.msdn.microsoft.com/Exchange-EWS-Java-API-12-1a5a1143

They briefly had it under an Apache 2.0 license, but apparently that was in error and they reverted to the old license. I don't think Microsoft has ever "supported" EWS Java. The license for 1.2 explicitly says that it's an "as is" product and that they do not support it.

I dearly hope MS makes it available under an open source license or at least fixes a number of bugs, gives it a proper repository, etc. I'll have a bucket full of bugfixes to commit if they do. Until that happens (if at all), assume that it is still not supported. The only support for it is Technet, SO, etc, and yourself.

Upvotes: 1

Related Questions