The pass in SystemMessageInfo.getRequest() got null at some condition. I wonder why design inconsitent api like this.
If I want to localize system message for individual user, I must to solve the locale from request. For example use spring CookieLocaleResolver.
@Override
public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) {
CustomizedSystemMessages messages = new CustomizedSystemMessages();
VaadinRequest vr = VaadinService.getCurrentRequest();
Locale locale = LocaleSelector.getLocaleSupported(RequestContextUtils.getLocale((SpringVaadinServletRequest)vr));
// Locale locale;
// if (systemMessagesInfo.getRequest() == null) {
// locale = Locale.US;
// } else {
// locale = LocaleSelector.getLocaleSupported(RequestContextUtils.getLocale((SpringVaadinServletRequest)systemMessagesInfo.getRequest()));
// }
messages.setAuthenticationErrorCaption(messageSource.getMessage("systemmessage.authenticationErrorCaption", null, locale));