Class NotificationServlet (2.7.0)

public class NotificationServlet extends HttpServlet

Beta
Thread-safe Webhook Servlet to receive notifications using the jakarta.servlet namespace.

In order to use this servlet you should create a class inheriting from NotificationServlet and register the servlet in your web.xml.

It is a simple wrapper around WebhookUtils#processWebhookNotification, so if you you may alternatively call that method instead from your HttpServlet#doPost with no loss of functionality. Example usage:


 public class MyNotificationServlet extends NotificationServlet {

   private static final long serialVersionUID = 1L;

   public MyNotificationServlet() throws IOException {
     super(new SomeDataStoreFactory());
   }
 }
 

Sample web.xml setup:


 {@literal <}servlet{@literal>}
 {@literal <}servlet-name{@literal>}MyNotificationServlet{@literal <} ervlet-name{@literal="">}
 {@literal <}servlet-class{@literal>}
     com.mypackage.MyNotificationServlet
 {@literal <} ervlet-class{@literal="">}
 {@literal <} ervlet{@literal="">}
 {@literal <}servlet-mapping{@literal>}
 {@literal <}servlet-name{@literal>}MyNotificationServlet{@literal <} ervlet-name{@literal="">}
 {@literal <}url-pattern{@literal>}/notifications{@literal <} rl-pattern{@literal="">}
 {@literal <} ervlet-mapping{@literal="">}
 

WARNING: by default it uses MemoryDataStoreFactory#getDefaultInstance() which means it will NOT persist the notification channels when the servlet process dies, so it is a BAD CHOICE for a production application. But it is a convenient choice when testing locally, in which case you don't need to override it, and can simply reference it directly in your web.xml file. For example:


 {@literal <}servlet{@literal>}
 {@literal <}servlet-name{@literal>}NotificationServlet{@literal <} ervlet-name{@literal="">}
 {@literal <}servlet-class{@literal>}
     com.google.api.client.googleapis.extensions.servlet.notificationsNotificationServlet
 {@literal <} ervlet-class{@literal="">}
 {@literal <} ervlet{@literal="">}
 {@literal <}servlet-mapping{@literal>}
 {@literal <}servlet-name{@literal>}NotificationServlet{@literal <} ervlet-name{@literal="">}
 {@literal <}url-pattern{@literal>}/notifications{@literal <} rl-pattern{@literal="">}
 {@literal <} ervlet-mapping{@literal="">}
 

Inheritance

java.lang.Object > jakarta.servlet.GenericServlet > jakarta.servlet.http.HttpServlet > NotificationServlet

Constructors

NotificationServlet()

public NotificationServlet()

Constructor to be used for testing and demo purposes that uses MemoryDataStoreFactory#getDefaultInstance() which means it will NOT persist the notification channels when the servlet process dies, so it is a bad choice for a production application.

NotificationServlet(DataStore<StoredChannel> channelDataStore)

protected NotificationServlet(DataStore<StoredChannel> channelDataStore)

Constructor that allows a specific notification data store to be specified.

Parameter
Name Description
channelDataStore com.google.api.client.util.store.DataStore<StoredChannel>

notification channel data store

NotificationServlet(DataStoreFactory dataStoreFactory)

protected NotificationServlet(DataStoreFactory dataStoreFactory)

Constructor which uses StoredChannel#getDefaultDataStore(DataStoreFactory) on the given data store factory, which is the normal use case.

Parameter
Name Description
dataStoreFactory com.google.api.client.util.store.DataStoreFactory

data store factory

Methods

doPost(HttpServletRequest req, HttpServletResponse resp)

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
Parameters
Name Description
req jakarta.servlet.http.HttpServletRequest
resp jakarta.servlet.http.HttpServletResponse
Overrides
jakarta.servlet.http.HttpServlet.doPost(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)
Exceptions
Type Description
jakarta.servlet.ServletException
IOException