From 3ead78e019db4c216bff0cb6d5f964550c8b0f0c Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@apache.org>
Date: Thu, 14 Jul 2022 16:18:09 +0900
Subject: [PATCH] fix #2668 remove LaRequestUtil.getRequest()

---
 .../org/codelibs/fess/api/BaseApiManager.java |   6 +-
 .../codelibs/fess/api/BaseJsonApiManager.java |   2 +-
 .../app/web/admin/searchlist/ListForm.java    |   2 +-
 .../fess/app/web/base/SearchForm.java         |   9 +-
 .../codelibs/fess/helper/SearchLogHelper.java |  75 +++++-----
 .../codelibs/fess/helper/UserInfoHelper.java  |  59 ++++----
 .../org/codelibs/fess/helper/ViewHelper.java  |   7 +-
 .../codelibs/fess/taglib/FessFunctions.java   | 141 +++++++++---------
 .../org/codelibs/fess/util/WebApiUtil.java    |  14 +-
 9 files changed, 152 insertions(+), 163 deletions(-)

diff --git a/src/main/java/org/codelibs/fess/api/BaseApiManager.java b/src/main/java/org/codelibs/fess/api/BaseApiManager.java
index f46f34de6..fcb35dfff 100644
--- a/src/main/java/org/codelibs/fess/api/BaseApiManager.java
+++ b/src/main/java/org/codelibs/fess/api/BaseApiManager.java
@@ -96,11 +96,7 @@ public abstract class BaseApiManager implements WebApiManager {
         buf.append("; charset=");
         final String enc;
         if (encoding == null) {
-            if (LaRequestUtil.getRequest().getCharacterEncoding() == null) {
-                enc = Constants.UTF_8;
-            } else {
-                enc = LaRequestUtil.getRequest().getCharacterEncoding();
-            }
+            enc = LaRequestUtil.getOptionalRequest().map(req -> req.getCharacterEncoding()).orElse(Constants.UTF_8);
         } else {
             enc = encoding;
         }
diff --git a/src/main/java/org/codelibs/fess/api/BaseJsonApiManager.java b/src/main/java/org/codelibs/fess/api/BaseJsonApiManager.java
index ee94f49ef..0d82fe66d 100644
--- a/src/main/java/org/codelibs/fess/api/BaseJsonApiManager.java
+++ b/src/main/java/org/codelibs/fess/api/BaseJsonApiManager.java
@@ -79,7 +79,7 @@ public abstract class BaseJsonApiManager extends BaseApiManager {
     }
 
     protected void writeJsonResponse(final int status, final String body) {
-        final String callback = LaRequestUtil.getRequest().getParameter("callback");
+        final String callback = LaRequestUtil.getOptionalRequest().map(req -> req.getParameter("callback")).get();
         final boolean isJsonp = ComponentUtil.getFessConfig().isApiJsonpEnabled() && StringUtil.isNotBlank(callback);
 
         final StringBuilder buf = new StringBuilder(1000);
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
index b755240d1..3bb780dd3 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/ListForm.java
@@ -142,7 +142,7 @@ public class ListForm extends SearchRequestParams {
 
     @Override
     public Object getAttribute(final String name) {
-        return LaRequestUtil.getRequest().getAttribute(name);
+        return LaRequestUtil.getOptionalRequest().map(req -> req.getAttribute(name)).get();
     }
 
     @Override
diff --git a/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java b/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
index 81838d551..8f63fd675 100644
--- a/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/base/SearchForm.java
@@ -114,11 +114,8 @@ public class SearchForm extends SearchRequestParams {
 
     @Override
     public GeoInfo getGeoInfo() {
-        final GeoInfo geoInfo = createGeoInfo(LaRequestUtil.getRequest());
-        if (geoInfo != null) {
-            return geoInfo;
-        }
-        return ComponentUtil.getQueryHelper().getDefaultGeoInfo();
+        return LaRequestUtil.getOptionalRequest().map(req -> createGeoInfo(req))
+                .orElseGet(() -> ComponentUtil.getQueryHelper().getDefaultGeoInfo());
     }
 
     @Override
@@ -138,7 +135,7 @@ public class SearchForm extends SearchRequestParams {
 
     @Override
     public Object getAttribute(final String name) {
-        return LaRequestUtil.getRequest().getAttribute(name);
+        return LaRequestUtil.getOptionalRequest().map(req -> req.getAttribute(name)).get();
     }
 
     @Override
diff --git a/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java b/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
index a832ad4c0..50f663e10 100644
--- a/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/SearchLogHelper.java
@@ -32,7 +32,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
@@ -135,47 +134,40 @@ public class SearchLogHelper {
             searchLog.setUser(user.getUserId());
         });
 
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-        searchLog.setClientIp(StringUtils.abbreviate(ComponentUtil.getViewHelper().getClientIp(request), 100));
-        searchLog.setReferer(StringUtils.abbreviate(request.getHeader("referer"), 1000));
-        searchLog.setUserAgent(StringUtils.abbreviate(request.getHeader("user-agent"), 255));
-        final Object accessType = request.getAttribute(Constants.SEARCH_LOG_ACCESS_TYPE);
-        if (Constants.SEARCH_LOG_ACCESS_TYPE_JSON.equals(accessType)) {
-            searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_JSON);
-        } else if (Constants.SEARCH_LOG_ACCESS_TYPE_GSA.equals(accessType)) {
-            searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_GSA);
-        } else if (Constants.SEARCH_LOG_ACCESS_TYPE_OTHER.equals(accessType)) {
-            searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_OTHER);
-        } else if (Constants.SEARCH_LOG_ACCESS_TYPE_ADMIN.equals(accessType)) {
-            searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_ADMIN);
-        } else {
-            searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_WEB);
-        }
-        final Object languages = request.getAttribute(Constants.REQUEST_LANGUAGES);
-        if (languages != null) {
-            searchLog.setLanguages(StringUtils.join((String[]) languages, ","));
-        } else {
-            searchLog.setLanguages(StringUtil.EMPTY);
-        }
-        final String virtualHostKey = ComponentUtil.getVirtualHostHelper().getVirtualHostKey();
-        if (StringUtil.isNotBlank(virtualHostKey)) {
-            searchLog.setVirtualHost(virtualHostKey);
-        } else {
-            searchLog.setVirtualHost(StringUtil.EMPTY);
-        }
+        LaRequestUtil.getOptionalRequest().ifPresent(req -> {
+            searchLog.setClientIp(StringUtils.abbreviate(ComponentUtil.getViewHelper().getClientIp(req), 100));
+            searchLog.setReferer(StringUtils.abbreviate(req.getHeader("referer"), 1000));
+            searchLog.setUserAgent(StringUtils.abbreviate(req.getHeader("user-agent"), 255));
+            final Object accessType = req.getAttribute(Constants.SEARCH_LOG_ACCESS_TYPE);
+            if (Constants.SEARCH_LOG_ACCESS_TYPE_JSON.equals(accessType)) {
+                searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_JSON);
+            } else if (Constants.SEARCH_LOG_ACCESS_TYPE_GSA.equals(accessType)) {
+                searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_GSA);
+            } else if (Constants.SEARCH_LOG_ACCESS_TYPE_OTHER.equals(accessType)) {
+                searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_OTHER);
+            } else if (Constants.SEARCH_LOG_ACCESS_TYPE_ADMIN.equals(accessType)) {
+                searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_ADMIN);
+            } else {
+                searchLog.setAccessType(Constants.SEARCH_LOG_ACCESS_TYPE_WEB);
+            }
+            final Object languages = req.getAttribute(Constants.REQUEST_LANGUAGES);
+            if (languages != null) {
+                searchLog.setLanguages(StringUtils.join((String[]) languages, ","));
+            } else {
+                searchLog.setLanguages(StringUtil.EMPTY);
+            }
 
-        @SuppressWarnings("unchecked")
-        final Map<String, List<String>> fieldLogMap = (Map<String, List<String>>) request.getAttribute(Constants.FIELD_LOGS);
-        if (fieldLogMap != null) {
-            final int queryMaxLength = fessConfig.getQueryMaxLengthAsInteger();
-            for (final Map.Entry<String, List<String>> logEntry : fieldLogMap.entrySet()) {
-                for (final String value : logEntry.getValue()) {
-                    searchLog.addSearchFieldLogValue(logEntry.getKey(), StringUtils.abbreviate(value, queryMaxLength));
+            @SuppressWarnings("unchecked")
+            final Map<String, List<String>> fieldLogMap = (Map<String, List<String>>) req.getAttribute(Constants.FIELD_LOGS);
+            if (fieldLogMap != null) {
+                final int queryMaxLength = fessConfig.getQueryMaxLengthAsInteger();
+                for (final Map.Entry<String, List<String>> logEntry : fieldLogMap.entrySet()) {
+                    for (final String value : logEntry.getValue()) {
+                        searchLog.addSearchFieldLogValue(logEntry.getKey(), StringUtils.abbreviate(value, queryMaxLength));
+                    }
                 }
             }
-        }
 
-        LaRequestUtil.getOptionalRequest().ifPresent(req -> {
             for (final String s : fessConfig.getSearchlogRequestHeadersAsArray()) {
                 final String key = s.replace('-', '_').toLowerCase(Locale.ENGLISH);
                 Collections.list(req.getHeaders(s)).stream().forEach(v -> {
@@ -184,6 +176,13 @@ public class SearchLogHelper {
             }
         });
 
+        final String virtualHostKey = ComponentUtil.getVirtualHostHelper().getVirtualHostKey();
+        if (StringUtil.isNotBlank(virtualHostKey)) {
+            searchLog.setVirtualHost(virtualHostKey);
+        } else {
+            searchLog.setVirtualHost(StringUtil.EMPTY);
+        }
+
         addDocumentsInResponse(queryResponseList, searchLog);
 
         searchLogQueue.add(searchLog);
diff --git a/src/main/java/org/codelibs/fess/helper/UserInfoHelper.java b/src/main/java/org/codelibs/fess/helper/UserInfoHelper.java
index 5df7feb87..b355c9474 100644
--- a/src/main/java/org/codelibs/fess/helper/UserInfoHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/UserInfoHelper.java
@@ -53,34 +53,34 @@ public class UserInfoHelper {
     protected boolean httpOnly = true;
 
     public String getUserCode() {
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-
-        String userCode = (String) request.getAttribute(Constants.USER_CODE);
-        if (StringUtil.isNotBlank(userCode)) {
-            return userCode;
-        }
+        return LaRequestUtil.getOptionalRequest().map(request -> {
+            String userCode = (String) request.getAttribute(Constants.USER_CODE);
+            if (StringUtil.isNotBlank(userCode)) {
+                return userCode;
+            }
 
-        userCode = getUserCodeFromRequest(request);
-        if (StringUtil.isNotBlank(userCode)) {
-            return userCode;
-        }
+            userCode = getUserCodeFromRequest(request);
+            if (StringUtil.isNotBlank(userCode)) {
+                return userCode;
+            }
 
-        if (!request.isRequestedSessionIdValid()) {
-            return null;
-        }
+            if (!request.isRequestedSessionIdValid()) {
+                return null;
+            }
 
-        userCode = getUserCodeFromCookie(request);
-        if (StringUtil.isBlank(userCode)) {
-            userCode = getUserCodeFromUserBean(request);
+            userCode = getUserCodeFromCookie(request);
             if (StringUtil.isBlank(userCode)) {
-                userCode = getId();
+                userCode = getUserCodeFromUserBean(request);
+                if (StringUtil.isBlank(userCode)) {
+                    userCode = getId();
+                }
             }
-        }
 
-        if (StringUtil.isNotBlank(userCode)) {
-            updateUserSessionId(userCode);
-        }
-        return userCode;
+            if (StringUtil.isNotBlank(userCode)) {
+                updateUserSessionId(userCode);
+            }
+            return userCode;
+        }).get();
     }
 
     protected String getUserCodeFromUserBean(final HttpServletRequest request) {
@@ -135,8 +135,7 @@ public class UserInfoHelper {
     protected void updateUserSessionId(final String userCode) {
         ComponentUtil.getSearchLogHelper().getUserInfo(userCode);
 
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-        request.setAttribute(Constants.USER_CODE, userCode);
+        LaRequestUtil.getOptionalRequest().ifPresent(req -> req.setAttribute(Constants.USER_CODE, userCode));
 
         updateCookie(userCode, cookieMaxAge);
     }
@@ -171,8 +170,7 @@ public class UserInfoHelper {
     }
 
     public void storeQueryId(final String queryId, final List<Map<String, Object>> documentItems) {
-        final HttpSession session = LaRequestUtil.getRequest().getSession(false);
-        if (session != null) {
+        LaRequestUtil.getOptionalRequest().map(req -> req.getSession(false)).ifPresent(session -> {
             final FessConfig fessConfig = ComponentUtil.getFessConfig();
 
             final List<String> docIdList = new ArrayList<>();
@@ -187,19 +185,18 @@ public class UserInfoHelper {
                 final Map<String, String[]> resultDocIdsCache = getResultDocIdsCache(session);
                 resultDocIdsCache.put(queryId, docIdList.toArray(new String[docIdList.size()]));
             }
-        }
+        });
     }
 
     public String[] getResultDocIds(final String queryId) {
-        final HttpSession session = LaRequestUtil.getRequest().getSession(false);
-        if (session != null) {
+        return LaRequestUtil.getOptionalRequest().map(req -> req.getSession(false)).map(session -> {
             final Map<String, String[]> resultUrlCache = getResultDocIdsCache(session);
             final String[] urls = resultUrlCache.get(queryId);
             if (urls != null) {
                 return urls;
             }
-        }
-        return StringUtil.EMPTY_STRINGS;
+            return StringUtil.EMPTY_STRINGS;
+        }).orElse(StringUtil.EMPTY_STRINGS);
     }
 
     private Map<String, String[]> getResultDocIdsCache(final HttpSession session) {
diff --git a/src/main/java/org/codelibs/fess/helper/ViewHelper.java b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
index eb532a1e0..92ab16f9a 100644
--- a/src/main/java/org/codelibs/fess/helper/ViewHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
@@ -472,8 +472,7 @@ public class ViewHelper {
     }
 
     protected String appendPDFSearchWord(final Map<String, Object> document, final String url) {
-        final String queries = (String) LaRequestUtil.getRequest().getAttribute(Constants.REQUEST_QUERIES);
-        if (queries != null) {
+        return LaRequestUtil.getOptionalRequest().map(req -> (String) req.getAttribute(Constants.REQUEST_QUERIES)).map(queries -> {
             try {
                 final StringBuilder buf = new StringBuilder(url.length() + 100);
                 buf.append(url).append("#search=%22");
@@ -483,8 +482,8 @@ public class ViewHelper {
             } catch (final UnsupportedEncodingException e) {
                 logger.warn("Unsupported encoding.", e);
             }
-        }
-        return url;
+            return null;
+        }).filter(StringUtil::isNotBlank).orElse(url);
     }
 
     public String getPagePath(final String page) {
diff --git a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
index 2080b540f..eb609eff0 100644
--- a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
+++ b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
@@ -100,24 +100,25 @@ public class FessFunctions {
     }
 
     public static Boolean labelExists(final String value) {
-        @SuppressWarnings("unchecked")
-        final Map<String, String> labelValueMap = (Map<String, String>) LaRequestUtil.getRequest().getAttribute(Constants.LABEL_VALUE_MAP);
-        if (labelValueMap != null) {
-            return labelValueMap.get(value) != null;
-        }
-        return false;
+        return LaRequestUtil.getOptionalRequest().map(req -> {
+            @SuppressWarnings("unchecked")
+            final Map<String, String> labelValueMap = (Map<String, String>) req.getAttribute(Constants.LABEL_VALUE_MAP);
+            if (labelValueMap != null) {
+                return labelValueMap.get(value) != null;
+            }
+            return false;
+        }).orElse(false);
     }
 
     public static String label(final String value) {
-        @SuppressWarnings("unchecked")
-        final Map<String, String> labelValueMap = (Map<String, String>) LaRequestUtil.getRequest().getAttribute(Constants.LABEL_VALUE_MAP);
-        if (labelValueMap != null) {
-            final String name = labelValueMap.get(value);
-            if (name != null) {
-                return name;
+        return LaRequestUtil.getOptionalRequest().map(req -> {
+            @SuppressWarnings("unchecked")
+            final Map<String, String> labelValueMap = (Map<String, String>) req.getAttribute(Constants.LABEL_VALUE_MAP);
+            if (labelValueMap != null) {
+                return labelValueMap.get(value);
             }
-        }
-        return value;
+            return null;
+        }).orElse(value);
     }
 
     public static Date date(final Long value) {
@@ -223,20 +224,21 @@ public class FessFunctions {
     }
 
     public static String pagingQuery(final String query) {
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-        @SuppressWarnings("unchecked")
-        final List<String> pagingQueryList = (List<String>) request.getAttribute(Constants.PAGING_QUERY_LIST);
-        if (pagingQueryList != null) {
-            final String prefix;
-            if (query != null) {
-                prefix = "ex_q=" + query.split(":")[0] + "%3A";
-            } else {
-                prefix = null;
+        return LaRequestUtil.getOptionalRequest().map(req -> {
+            @SuppressWarnings("unchecked")
+            final List<String> pagingQueryList = (List<String>) req.getAttribute(Constants.PAGING_QUERY_LIST);
+            if (pagingQueryList != null) {
+                final String prefix;
+                if (query != null) {
+                    prefix = "ex_q=" + query.split(":")[0] + "%3A";
+                } else {
+                    prefix = null;
+                }
+                return pagingQueryList.stream().filter(s -> prefix == null || !s.startsWith(prefix))
+                        .collect(Collectors.joining("&", "&", StringUtil.EMPTY));
             }
-            return pagingQueryList.stream().filter(s -> prefix == null || !s.startsWith(prefix))
-                    .collect(Collectors.joining("&", "&", StringUtil.EMPTY));
-        }
-        return StringUtil.EMPTY;
+            return null;
+        }).orElse(StringUtil.EMPTY);
     }
 
     public static String facetQuery() {
@@ -261,56 +263,58 @@ public class FessFunctions {
     }
 
     private static String createQuery(final String key, final String prefix) {
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-        String query = (String) request.getAttribute(key);
-        if (query == null) {
-            final StringBuilder buf = new StringBuilder(100);
-            final Enumeration<String> names = request.getParameterNames();
-            while (names.hasMoreElements()) {
-                final String name = names.nextElement();
-                if (name.startsWith(prefix)) {
-                    final String[] values = request.getParameterValues(name);
-                    if (values != null) {
-                        for (final String value : values) {
-                            buf.append('&');
-                            buf.append(LdiURLUtil.encode(name, Constants.UTF_8));
-                            buf.append('=');
-                            buf.append(LdiURLUtil.encode(value, Constants.UTF_8));
+        return LaRequestUtil.getOptionalRequest().map(request -> {
+            String query = (String) request.getAttribute(key);
+            if (query == null) {
+                final StringBuilder buf = new StringBuilder(100);
+                final Enumeration<String> names = request.getParameterNames();
+                while (names.hasMoreElements()) {
+                    final String name = names.nextElement();
+                    if (name.startsWith(prefix)) {
+                        final String[] values = request.getParameterValues(name);
+                        if (values != null) {
+                            for (final String value : values) {
+                                buf.append('&');
+                                buf.append(LdiURLUtil.encode(name, Constants.UTF_8));
+                                buf.append('=');
+                                buf.append(LdiURLUtil.encode(value, Constants.UTF_8));
+                            }
                         }
                     }
                 }
+                query = buf.toString();
+                request.setAttribute(key, query);
             }
-            query = buf.toString();
-            request.setAttribute(key, query);
-        }
-        return query;
+            return query;
+        }).get();
     }
 
     private static String createForm(final String key, final String prefix) {
-        final HttpServletRequest request = LaRequestUtil.getRequest();
-        String query = (String) request.getAttribute(key);
-        if (query == null) {
-            final StringBuilder buf = new StringBuilder(100);
-            final Enumeration<String> names = request.getParameterNames();
-            while (names.hasMoreElements()) {
-                final String name = names.nextElement();
-                if (name.startsWith(prefix)) {
-                    final String[] values = request.getParameterValues(name);
-                    if (values != null) {
-                        for (final String value : values) {
-                            buf.append("<input type=\"hidden\" name=\"");
-                            buf.append(StringEscapeUtils.escapeHtml4(name));
-                            buf.append("\" value=\"");
-                            buf.append(StringEscapeUtils.escapeHtml4(value));
-                            buf.append("\"/>");
+        return LaRequestUtil.getOptionalRequest().map(request -> {
+            String query = (String) request.getAttribute(key);
+            if (query == null) {
+                final StringBuilder buf = new StringBuilder(100);
+                final Enumeration<String> names = request.getParameterNames();
+                while (names.hasMoreElements()) {
+                    final String name = names.nextElement();
+                    if (name.startsWith(prefix)) {
+                        final String[] values = request.getParameterValues(name);
+                        if (values != null) {
+                            for (final String value : values) {
+                                buf.append("<input type=\"hidden\" name=\"");
+                                buf.append(StringEscapeUtils.escapeHtml4(name));
+                                buf.append("\" value=\"");
+                                buf.append(StringEscapeUtils.escapeHtml4(value));
+                                buf.append("\"/>");
+                            }
                         }
                     }
                 }
+                query = buf.toString();
+                request.setAttribute(key, query);
             }
-            query = buf.toString();
-            request.setAttribute(key, query);
-        }
-        return query;
+            return query;
+        }).get();
     }
 
     public static String base64(final String value) {
@@ -334,11 +338,8 @@ public class FessFunctions {
             final String msg = "The argument 'input' should start with slash '/': " + input;
             throw new IllegalArgumentException(msg);
         }
-        final String contextPath = LaRequestUtil.getRequest().getContextPath();
         final StringBuilder sb = new StringBuilder();
-        if (contextPath.length() > 1) {
-            sb.append(contextPath);
-        }
+        LaRequestUtil.getOptionalRequest().map(req -> req.getContextPath()).filter(s -> s.length() > 1).ifPresent(s -> sb.append(s));
         sb.append(input);
         if (input.indexOf('?') == -1) {
             try {
diff --git a/src/main/java/org/codelibs/fess/util/WebApiUtil.java b/src/main/java/org/codelibs/fess/util/WebApiUtil.java
index 19e3017f2..484c25986 100644
--- a/src/main/java/org/codelibs/fess/util/WebApiUtil.java
+++ b/src/main/java/org/codelibs/fess/util/WebApiUtil.java
@@ -26,26 +26,26 @@ public final class WebApiUtil {
     }
 
     public static void setObject(final String name, final Object value) {
-        LaRequestUtil.getRequest().setAttribute(name, value);
+        LaRequestUtil.getOptionalRequest().ifPresent(req -> req.setAttribute(name, value));
     }
 
+    @SuppressWarnings("unchecked")
     public static <T> T getObject(final String name) {
-        return (T) LaRequestUtil.getRequest().getAttribute(name);
+        return LaRequestUtil.getOptionalRequest().map(req -> (T) req.getAttribute(name)).get();
     }
 
     public static void setError(final int statusCode, final String message) {
-        LaRequestUtil.getRequest().setAttribute(WEB_API_EXCEPTION, new WebApiException(statusCode, message));
+        LaRequestUtil.getOptionalRequest().ifPresent(req -> req.setAttribute(WEB_API_EXCEPTION, new WebApiException(statusCode, message)));
     }
 
     public static void setError(final int statusCode, final Exception e) {
-        LaRequestUtil.getRequest().setAttribute(WEB_API_EXCEPTION, new WebApiException(statusCode, e));
+        LaRequestUtil.getOptionalRequest().ifPresent(req -> req.setAttribute(WEB_API_EXCEPTION, new WebApiException(statusCode, e)));
     }
 
     public static void validate() {
-        final WebApiException e = (WebApiException) LaRequestUtil.getRequest().getAttribute(WEB_API_EXCEPTION);
-        if (e != null) {
+        LaRequestUtil.getOptionalRequest().map(req -> (WebApiException) req.getAttribute(WEB_API_EXCEPTION)).ifPresent(e -> {
             throw e;
-        }
+        });
     }
 
 }
-- 
GitLab