فهرست منبع

remove superflous java serialization extends and implements

Jason Rivard 2 سال پیش
والد
کامیت
cb29e8ad2e
100فایلهای تغییر یافته به همراه254 افزوده شده و 400 حذف شده
  1. 5 0
      build/spotbugs-exclude.xml
  2. 1 1
      data-service/pom.xml
  3. 1 1
      lib-data/pom.xml
  4. 15 19
      lib-data/src/main/java/password/pwm/bean/EmailItemBean.java
  5. 1 2
      lib-data/src/main/java/password/pwm/bean/FormNonce.java
  6. 1 3
      lib-data/src/main/java/password/pwm/bean/PasswordStatus.java
  7. 1 3
      lib-data/src/main/java/password/pwm/bean/PhotoDataBean.java
  8. 4 11
      lib-data/src/main/java/password/pwm/bean/SmsItemBean.java
  9. 1 2
      lib-data/src/main/java/password/pwm/bean/TelemetryPublishBean.java
  10. 9 14
      lib-data/src/main/java/password/pwm/bean/VersionNumber.java
  11. 1 2
      lib-data/src/main/java/password/pwm/data/ImmutableByteArray.java
  12. 1 2
      lib-util/src/main/java/password/pwm/util/EventRateMeter.java
  13. 1 2
      lib-util/src/main/java/password/pwm/util/MovingAverage.java
  14. 1 2
      lib-util/src/main/java/password/pwm/util/ProgressInfoCalculator.java
  15. 2 3
      lib-util/src/main/java/password/pwm/util/java/TimeDuration.java
  16. 3 9
      pom.xml
  17. 3 4
      rest-test-service/src/main/java/password/pwm/resttest/RestTestRemoteResponsesServlet.java
  18. 11 8
      server/src/main/java/password/pwm/FileLocker.java
  19. 1 2
      server/src/main/java/password/pwm/VerificationMethodSystem.java
  20. 1 2
      server/src/main/java/password/pwm/bean/DomainID.java
  21. 1 3
      server/src/main/java/password/pwm/bean/LocalSessionStateBean.java
  22. 1 2
      server/src/main/java/password/pwm/bean/LoginInfoBean.java
  23. 1 2
      server/src/main/java/password/pwm/bean/PrivateKeyCertificate.java
  24. 1 2
      server/src/main/java/password/pwm/bean/ProfileID.java
  25. 1 2
      server/src/main/java/password/pwm/bean/ResponseInfoBean.java
  26. 1 2
      server/src/main/java/password/pwm/bean/SessionLabel.java
  27. 3 4
      server/src/main/java/password/pwm/bean/TokenDestinationItem.java
  28. 1 5
      server/src/main/java/password/pwm/bean/UserIdentity.java
  29. 1 2
      server/src/main/java/password/pwm/config/LDAPPermissionInfo.java
  30. 1 2
      server/src/main/java/password/pwm/config/PwmSettingTemplateSet.java
  31. 1 2
      server/src/main/java/password/pwm/config/option/IdentityVerificationMethod.java
  32. 1 2
      server/src/main/java/password/pwm/config/profile/ChallengeProfile.java
  33. 2 5
      server/src/main/java/password/pwm/config/profile/PwmPasswordPolicy.java
  34. 11 44
      server/src/main/java/password/pwm/config/stored/StoredConfigKey.java
  35. 20 22
      server/src/main/java/password/pwm/config/stored/StoredConfigZipJsonSerializer.java
  36. 1 2
      server/src/main/java/password/pwm/config/stored/ValueMetaData.java
  37. 4 5
      server/src/main/java/password/pwm/config/value/AbstractValue.java
  38. 1 2
      server/src/main/java/password/pwm/config/value/ActionValue.java
  39. 1 2
      server/src/main/java/password/pwm/config/value/BooleanValue.java
  40. 12 12
      server/src/main/java/password/pwm/config/value/EmailValue.java
  41. 7 12
      server/src/main/java/password/pwm/config/value/FileValue.java
  42. 1 4
      server/src/main/java/password/pwm/config/value/NamedSecretValue.java
  43. 1 4
      server/src/main/java/password/pwm/config/value/PasswordValue.java
  44. 2 3
      server/src/main/java/password/pwm/config/value/PrivateKeyValue.java
  45. 2 3
      server/src/main/java/password/pwm/config/value/RemoteWebServiceValue.java
  46. 2 3
      server/src/main/java/password/pwm/config/value/StoredValue.java
  47. 1 4
      server/src/main/java/password/pwm/config/value/StoredValueEncoder.java
  48. 2 3
      server/src/main/java/password/pwm/config/value/VerificationMethodValue.java
  49. 3 6
      server/src/main/java/password/pwm/config/value/X509CertificateValue.java
  50. 4 5
      server/src/main/java/password/pwm/config/value/data/ActionConfiguration.java
  51. 1 3
      server/src/main/java/password/pwm/config/value/data/ChallengeItemConfiguration.java
  52. 1 2
      server/src/main/java/password/pwm/config/value/data/CustomLinkConfiguration.java
  53. 1 2
      server/src/main/java/password/pwm/config/value/data/FormConfiguration.java
  54. 1 2
      server/src/main/java/password/pwm/config/value/data/NamedSecretData.java
  55. 1 3
      server/src/main/java/password/pwm/config/value/data/RemoteWebServiceConfiguration.java
  56. 1 2
      server/src/main/java/password/pwm/config/value/data/ShortcutItem.java
  57. 1 2
      server/src/main/java/password/pwm/config/value/data/UserPermission.java
  58. 1 2
      server/src/main/java/password/pwm/error/ErrorInformation.java
  59. 1 3
      server/src/main/java/password/pwm/health/HealthMonitorSettings.java
  60. 1 2
      server/src/main/java/password/pwm/health/HealthRecord.java
  61. 2 3
      server/src/main/java/password/pwm/health/HealthService.java
  62. 5 6
      server/src/main/java/password/pwm/health/LDAPHealthChecker.java
  63. 19 0
      server/src/main/java/password/pwm/http/HttpEventManager.java
  64. 1 2
      server/src/main/java/password/pwm/http/PwmRequest.java
  65. 2 3
      server/src/main/java/password/pwm/http/PwmResponse.java
  66. 1 8
      server/src/main/java/password/pwm/http/PwmSession.java
  67. 2 0
      server/src/main/java/password/pwm/http/PwmSessionFactory.java
  68. 1 2
      server/src/main/java/password/pwm/http/auth/HttpAuthRecord.java
  69. 0 2
      server/src/main/java/password/pwm/http/bean/ConfigManagerBean.java
  70. 1 2
      server/src/main/java/password/pwm/http/bean/DisplayElement.java
  71. 2 7
      server/src/main/java/password/pwm/http/bean/ForgottenPasswordBean.java
  72. 0 2
      server/src/main/java/password/pwm/http/bean/NewUserBean.java
  73. 1 2
      server/src/main/java/password/pwm/http/bean/PwmSessionBean.java
  74. 1 2
      server/src/main/java/password/pwm/http/bean/SetupResponsesBean.java
  75. 1 2
      server/src/main/java/password/pwm/http/bean/UserSessionDataCacheBean.java
  76. 2 3
      server/src/main/java/password/pwm/http/servlet/ClientApiServlet.java
  77. 3 4
      server/src/main/java/password/pwm/http/servlet/accountinfo/AccountInformationBean.java
  78. 4 6
      server/src/main/java/password/pwm/http/servlet/admin/AppDashboardData.java
  79. 13 6
      server/src/main/java/password/pwm/http/servlet/admin/SystemAdminServlet.java
  80. 0 2
      server/src/main/java/password/pwm/http/servlet/admin/domain/UserDebugDataBean.java
  81. 5 6
      server/src/main/java/password/pwm/http/servlet/admin/system/ConfigManagerLoginServlet.java
  82. 1 2
      server/src/main/java/password/pwm/http/servlet/admin/system/ConfigManagerWordlistServlet.java
  83. 1 2
      server/src/main/java/password/pwm/http/servlet/admin/system/SystemAdminCertificatesServlet.java
  84. 1 1
      server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java
  85. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServletUtils.java
  86. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/ReadSettingResponse.java
  87. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/SearchResultItem.java
  88. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/data/CategoryInfo.java
  89. 1 3
      server/src/main/java/password/pwm/http/servlet/configeditor/data/LocaleInfo.java
  90. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeItem.java
  91. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeSettings.java
  92. 1 3
      server/src/main/java/password/pwm/http/servlet/configeditor/data/SettingData.java
  93. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/data/SettingInfo.java
  94. 1 2
      server/src/main/java/password/pwm/http/servlet/configeditor/data/VarData.java
  95. 2 3
      server/src/main/java/password/pwm/http/servlet/configeditor/function/ActionCertViewerFunction.java
  96. 2 3
      server/src/main/java/password/pwm/http/servlet/configeditor/function/RemoteWebServiceCertViewerFunction.java
  97. 1 3
      server/src/main/java/password/pwm/http/servlet/configeditor/function/SettingUIFunction.java
  98. 2 3
      server/src/main/java/password/pwm/http/servlet/configeditor/function/UserMatchViewerFunction.java
  99. 2 3
      server/src/main/java/password/pwm/http/servlet/configeditor/function/X509CertViewerFunction.java
  100. 1 2
      server/src/main/java/password/pwm/http/servlet/configguide/ConfigGuideServlet.java

+ 5 - 0
build/spotbugs-exclude.xml

@@ -53,6 +53,10 @@
         <Method name="equals" />
         <Bug pattern="CC_CYCLOMATIC_COMPLEXITY" />
     </Match>
+    <Match>
+        <!-- overly aggressive suggestion -->
+        <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
+    </Match>
     <Match>
         <!-- triggered by lombok @Data autogen -->
         <Bug pattern="FCCD_FIND_CLASS_CIRCULAR_DEPENDENCY" />
@@ -76,6 +80,7 @@
         </Or>
         <!-- pretty much every line in jsp throws throwable :) -->
         <Bug pattern="THROWS_METHOD_THROWS_CLAUSE_THROWABLE" />
+
     </Match>
 
 </FindBugsFilter>

+ 1 - 1
data-service/pom.xml

@@ -43,7 +43,7 @@
                 <!-- This plugin will set properties values using dependency information -->
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.4.0</version>
+                <version>3.5.0</version>
                 <executions>
                     <execution>
                         <goals>

+ 1 - 1
lib-data/pom.xml

@@ -71,7 +71,7 @@
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
-            <version>2.10</version>
+            <version>2.10.1</version>
         </dependency>
     </dependencies>
 </project>

+ 15 - 19
lib-data/src/main/java/password/pwm/bean/EmailItemBean.java

@@ -20,32 +20,28 @@
 
 package password.pwm.bean;
 
-import lombok.AllArgsConstructor;
 import lombok.Builder;
-import lombok.Value;
 
-import java.io.Serializable;
-
-@Value
-@AllArgsConstructor
-@Builder( toBuilder = true )
-public class EmailItemBean implements Serializable
+@Builder
+public record EmailItemBean(
+        String to,
+        String from,
+        String subject,
+        String bodyPlain,
+        String bodyHtml
+)
 {
-    private final String to;
-    private final String from;
-    private final String subject;
-    private final String bodyPlain;
-    private final String bodyHtml;
-
     public EmailItemBean applyBodyReplacement( final CharSequence target, final CharSequence replacement )
     {
-        return this.toBuilder()
-                .bodyPlain( this.getBodyPlain().replace( target, replacement ) )
-                .bodyHtml( this.getBodyHtml().replace( target, replacement ) )
-                .build();
+        return new EmailItemBean(
+                this.to(),
+                this.from(),
+                this.subject(),
+                this.bodyPlain == null ? null : this.bodyPlain().replace( target, replacement ),
+                this.bodyHtml == null ? null : this.bodyHtml.replace( target, replacement ) );
     }
 
-    public String toDebugString( )
+    public String toDebugString()
     {
         return "from: " + from + ", to: " + to + ", subject: " + subject;
     }

+ 1 - 2
lib-data/src/main/java/password/pwm/bean/FormNonce.java

@@ -23,11 +23,10 @@ package password.pwm.bean;
 import com.google.gson.annotations.SerializedName;
 import lombok.Value;
 
-import java.io.Serializable;
 import java.time.Instant;
 
 @Value
-public class FormNonce implements Serializable
+public class FormNonce
 {
     @SerializedName( "g" )
     private final String sessionGUID;

+ 1 - 3
lib-data/src/main/java/password/pwm/bean/PasswordStatus.java

@@ -23,11 +23,9 @@ package password.pwm.bean;
 import lombok.Builder;
 import lombok.Value;
 
-import java.io.Serializable;
-
 @Value
 @Builder
-public class PasswordStatus implements Serializable
+public class PasswordStatus
 {
     private final boolean expired;
     private final boolean preExpired;

+ 1 - 3
lib-data/src/main/java/password/pwm/bean/PhotoDataBean.java

@@ -23,10 +23,8 @@ package password.pwm.bean;
 import lombok.Value;
 import password.pwm.data.ImmutableByteArray;
 
-import java.io.Serializable;
-
 @Value
-public class PhotoDataBean implements Serializable
+public class PhotoDataBean
 {
     private String mimeType;
     private ImmutableByteArray contents;

+ 4 - 11
server/src/main/java/password/pwm/bean/SmsItemBean.java → lib-data/src/main/java/password/pwm/bean/SmsItemBean.java

@@ -21,16 +21,9 @@
 package password.pwm.bean;
 
 
-import lombok.AllArgsConstructor;
-import lombok.Value;
-
-import java.io.Serializable;
-
-@Value
-@AllArgsConstructor
-public class SmsItemBean implements Serializable
+public record SmsItemBean(
+        String to,
+        String message
+)
 {
-    private final String to;
-    private final String message;
-    private final SessionLabel sessionLabel;
 }

+ 1 - 2
lib-data/src/main/java/password/pwm/bean/TelemetryPublishBean.java

@@ -23,14 +23,13 @@ package password.pwm.bean;
 import lombok.Builder;
 import lombok.Value;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 
 @Value
 @Builder
-public class TelemetryPublishBean implements Serializable
+public class TelemetryPublishBean
 {
     private final Instant timestamp;
     private final String id;

+ 9 - 14
lib-data/src/main/java/password/pwm/bean/VersionNumber.java

@@ -20,17 +20,16 @@
 
 package password.pwm.bean;
 
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Value;
-
 import java.util.Comparator;
 import java.util.Objects;
 import java.util.regex.Pattern;
 
-@Value
-@AllArgsConstructor( access = AccessLevel.PRIVATE )
-public class VersionNumber implements Comparable<VersionNumber>
+public record VersionNumber(
+        int major,
+        int minor,
+        int patch
+)
+        implements Comparable<VersionNumber>
 {
     private static final String VERSION_DELIMITER = ".";
     private static final String VERSION_PREFIX = "v";
@@ -41,13 +40,9 @@ public class VersionNumber implements Comparable<VersionNumber>
     public static final VersionNumber ZERO = VersionNumber.of( 0, 0, 0 );
 
     private static final Comparator<VersionNumber> COMPARATOR = Comparator
-            .comparingInt( VersionNumber::getMajor )
-            .thenComparingInt( VersionNumber::getMinor )
-            .thenComparingInt( VersionNumber::getPatch );
-
-    private final int major;
-    private final int minor;
-    private final int patch;
+            .comparingInt( VersionNumber::major )
+            .thenComparingInt( VersionNumber::minor )
+            .thenComparingInt( VersionNumber::patch );
 
     @Override
     public int compareTo( final VersionNumber o )

+ 1 - 2
lib-data/src/main/java/password/pwm/data/ImmutableByteArray.java

@@ -22,10 +22,9 @@ package password.pwm.data;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.io.Serializable;
 import java.util.Arrays;
 
-public class ImmutableByteArray implements Serializable
+public class ImmutableByteArray
 {
     private final byte[] bytes;
 

+ 1 - 2
lib-util/src/main/java/password/pwm/util/EventRateMeter.java

@@ -22,7 +22,6 @@ package password.pwm.util;
 
 import password.pwm.util.java.PwmNumberFormat;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.util.Locale;
@@ -30,7 +29,7 @@ import java.util.Objects;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-public class EventRateMeter implements Serializable
+public class EventRateMeter
 {
     private final long maxDuration;
     private final Lock lock = new ReentrantLock();

+ 1 - 2
lib-util/src/main/java/password/pwm/util/MovingAverage.java

@@ -20,7 +20,6 @@
 
 package password.pwm.util;
 
-import java.io.Serializable;
 import java.text.NumberFormat;
 import java.time.Duration;
 import java.time.temporal.ChronoUnit;
@@ -49,7 +48,7 @@ import java.util.concurrent.locks.ReentrantLock;
  * sample itself; it merely computes the new average when updated with
  * a sample by an external mechanism.</p>
  **/
-public class MovingAverage implements Serializable
+public class MovingAverage
 {
     private static final int FORMATTED_FRACTION_DIGITS = 3;
 

+ 1 - 2
lib-util/src/main/java/password/pwm/util/ProgressInfoCalculator.java

@@ -22,13 +22,12 @@ package password.pwm.util;
 
 import password.pwm.util.java.TimeDuration;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.text.NumberFormat;
 import java.time.Instant;
 
-public class ProgressInfoCalculator implements Serializable
+public class ProgressInfoCalculator
 {
     private final Instant startTime;
     private final Instant nowTime;

+ 2 - 3
lib-util/src/main/java/password/pwm/util/java/TimeDuration.java

@@ -22,7 +22,6 @@ package password.pwm.util.java;
 
 import lombok.Value;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.Instant;
@@ -41,7 +40,7 @@ import java.util.function.BooleanSupplier;
  *
  * @author Jason D. Rivard
  */
-public class TimeDuration implements Comparable<TimeDuration>, Serializable
+public class TimeDuration implements Comparable<TimeDuration>
 {
     public enum Unit
     {
@@ -389,7 +388,7 @@ public class TimeDuration implements Comparable<TimeDuration>, Serializable
     }
 
     @Value
-    public static class FractionalTimeDetail implements Serializable
+    public static class FractionalTimeDetail
     {
         private final long milliseconds;
         private final long seconds;

+ 3 - 9
pom.xml

@@ -364,7 +364,7 @@
             <plugin>
                 <groupId>org.owasp</groupId>
                 <artifactId>dependency-check-maven</artifactId>
-                <version>7.4.3</version>
+                <version>7.4.4</version>
                 <executions>
                     <execution>
                         <goals>
@@ -409,7 +409,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
-                <version>3.4.0</version>
+                <version>3.5.0</version>
             </plugin>
 
         </plugins>
@@ -476,7 +476,7 @@
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter</artifactId>
-            <version>5.9.1</version>
+            <version>5.9.2</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -491,12 +491,6 @@
             <version>4.11.0</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <version>3.23.1</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>com.github.tomakehurst</groupId>
             <artifactId>wiremock-jre8</artifactId>

+ 3 - 4
rest-test-service/src/main/java/password/pwm/resttest/RestTestRemoteResponsesServlet.java

@@ -31,7 +31,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -79,7 +78,7 @@ public class RestTestRemoteResponsesServlet extends HttpServlet
     }
 
     @Value
-    public static class RequestData implements Serializable
+    public static class RequestData
     {
         private final String responseSessionID;
         private final Map<String, String> userResponses;
@@ -87,7 +86,7 @@ public class RestTestRemoteResponsesServlet extends HttpServlet
 
     @Value
     @Builder
-    public static class ResponseData implements Serializable
+    public static class ResponseData
     {
         private final String displayInstructions;
         private final String verificationState;
@@ -97,7 +96,7 @@ public class RestTestRemoteResponsesServlet extends HttpServlet
     }
 
     @Value
-    public static class Prompt implements Serializable
+    public static class Prompt
     {
         private final String displayPrompt;
         private final String identifier;

+ 11 - 8
server/src/main/java/password/pwm/FileLocker.java

@@ -24,6 +24,7 @@ import password.pwm.config.AppConfig;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
+import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
@@ -35,6 +36,7 @@ import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.nio.file.Path;
 import java.time.Instant;
+import java.util.Objects;
 import java.util.Properties;
 
 class FileLocker
@@ -49,7 +51,7 @@ class FileLocker
     {
         this.pwmEnvironment = pwmEnvironment;
         final String lockfileName = pwmEnvironment.getConfig().readAppProperty( AppProperty.APPLICATION_FILELOCK_FILENAME );
-        lockfile = pwmEnvironment.getApplicationPath().resolve( lockfileName );
+        lockfile = Objects.requireNonNull( pwmEnvironment.getApplicationPath().resolve( lockfileName ) );
     }
 
     private boolean lockingAllowed( )
@@ -66,24 +68,25 @@ class FileLocker
     {
         if ( lockingAllowed() && !isLocked() )
         {
+            final String lockFileDebugName = lockfile.toString();
             try
             {
                 final RandomAccessFile file = new RandomAccessFile( lockfile.toFile(), "rw" );
-                final FileChannel f = file.getChannel();
-                lock = f.tryLock();
+                final FileChannel fileChannel = file.getChannel();
+                lock = fileChannel.tryLock();
                 if ( lock != null )
                 {
-                    LOGGER.debug( () -> "obtained file lock on file " + lockfile + " lock is valid=" + lock.isValid() );
+                    LOGGER.debug( () -> "obtained file lock on file " + lockFileDebugName + " lock is valid=" + lock.isValid() );
                     writeLockFileContents( file );
                 }
                 else
                 {
-                    LOGGER.debug( () -> "unable to obtain file lock on file " + lockfile );
+                    LOGGER.debug( () -> "unable to obtain file lock on file " + lockFileDebugName );
                 }
             }
             catch ( final Exception e )
             {
-                LOGGER.error( () -> "unable to obtain file lock on file " + lockfile + " due to error: " + e.getMessage() );
+                LOGGER.error( () -> "unable to obtain file lock on file " + lockFileDebugName + " due to error: " + e.getMessage() );
             }
         }
     }
@@ -94,8 +97,8 @@ class FileLocker
         {
             final Properties props = new Properties();
             props.put( "timestamp", StringUtil.toIsoDate( Instant.now() ) );
-            props.put( "applicationPath", pwmEnvironment.getApplicationPath() == null ? "n/a" : pwmEnvironment.getApplicationPath() );
-            props.put( "configurationFile", pwmEnvironment.getConfigurationFile() == null ? "n/a" : pwmEnvironment.getConfigurationFile() );
+            props.put( "applicationPath", LocaleHelper.orNotApplicable( pwmEnvironment.getApplicationPath() ) );
+            props.put( "configurationFile", LocaleHelper.orNotApplicable( pwmEnvironment.getConfigurationFile() ) );
             final String comment = PwmConstants.PWM_APP_NAME + " file lock";
             final StringWriter stringWriter = new StringWriter();
             props.store( stringWriter, comment );

+ 1 - 2
server/src/main/java/password/pwm/VerificationMethodSystem.java

@@ -25,7 +25,6 @@ import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.user.UserInfo;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -46,7 +45,7 @@ public interface VerificationMethodSystem
         String getIdentifier( );
     }
 
-    class UserPromptBean implements Serializable, UserPrompt
+    class UserPromptBean implements UserPrompt
     {
         private String displayPrompt;
         private String identifier;

+ 1 - 2
server/src/main/java/password/pwm/bean/DomainID.java

@@ -24,7 +24,6 @@ import password.pwm.PwmConstants;
 import password.pwm.config.PwmSettingScope;
 import password.pwm.util.java.PwmUtil;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -32,7 +31,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.regex.Pattern;
 
-public final class DomainID implements Comparable<DomainID>, Serializable
+public final class DomainID implements Comparable<DomainID>
 {
     private static final Pattern REGEX_TEST = Pattern.compile( "^([a-z][a-z0-9]{2,10})$" );
     private static final List<String> DOMAIN_RESERVED_WORDS = List.of( "system", "private", "public", "pwm", "sspr", "domain", "profile", "password" );

+ 1 - 3
server/src/main/java/password/pwm/bean/LocalSessionStateBean.java

@@ -25,7 +25,6 @@ import password.pwm.user.UserInfoBean;
 import password.pwm.util.MovingAverage;
 import password.pwm.util.java.TimeDuration;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.Locale;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -41,9 +40,8 @@ import java.util.concurrent.atomic.AtomicInteger;
  */
 
 @Data
-public class LocalSessionStateBean implements Serializable
+public class LocalSessionStateBean
 {
-
     private String srcAddress;
     private String srcHostname;
     private String forwardURL;

+ 1 - 2
server/src/main/java/password/pwm/bean/LoginInfoBean.java

@@ -30,7 +30,6 @@ import password.pwm.util.BasicAuthInfo;
 import password.pwm.util.PasswordData;
 import password.pwm.util.json.JsonFactory;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.EnumSet;
 import java.util.Set;
@@ -42,7 +41,7 @@ import java.util.Set;
  * <p>Short serialized names are used to shrink the effective size of the login cookie.</p>
  */
 @Data
-public class LoginInfoBean implements Serializable
+public class LoginInfoBean
 {
     public enum LoginFlag
     {

+ 1 - 2
server/src/main/java/password/pwm/bean/PrivateKeyCertificate.java

@@ -26,7 +26,6 @@ import password.pwm.util.java.StringUtil;
 import password.pwm.util.secure.X509Utils;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.security.KeyFactory;
 import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
@@ -36,7 +35,7 @@ import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.List;
 
 @Value
-public class PrivateKeyCertificate implements Serializable
+public class PrivateKeyCertificate
 {
     private final List<String> b64certificates;
     private final String privateKey;

+ 1 - 2
server/src/main/java/password/pwm/bean/ProfileID.java

@@ -25,7 +25,6 @@ import password.pwm.PwmConstants;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.StringUtil;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -34,7 +33,7 @@ import java.util.Optional;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 
-public final class ProfileID implements Serializable, Comparable<ProfileID>
+public final class ProfileID implements Comparable<ProfileID>
 {
     private static final Pattern REGEX_TEST = Pattern.compile( "^([a-zA-Z][a-zA-Z0-9-]{2,15})$" );
 

+ 1 - 2
server/src/main/java/password/pwm/bean/ResponseInfoBean.java

@@ -24,12 +24,11 @@ import com.novell.ldapchai.cr.Answer;
 import com.novell.ldapchai.cr.Challenge;
 import password.pwm.config.option.DataStorageMethod;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.Locale;
 import java.util.Map;
 
-public class ResponseInfoBean implements Serializable
+public class ResponseInfoBean
 {
     private final Map<Challenge, String> crMap;
     private final Map<Challenge, String> helpdeskCrMap;

+ 1 - 2
server/src/main/java/password/pwm/bean/SessionLabel.java

@@ -38,7 +38,6 @@ import password.pwm.util.logging.PwmLogEvent;
 import password.pwm.util.logging.PwmLogger;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.Serializable;
 import java.util.Objects;
 
 @Value
@@ -46,7 +45,7 @@ import java.util.Objects;
 /**
  * Increasingly miss-named data class that represents request/operation actor and origin data.
  */
-public class SessionLabel implements Serializable
+public class SessionLabel
 {
     private static final PwmLogger LOGGER = PwmLogger.forClass( SessionLabel.class );
 

+ 3 - 4
server/src/main/java/password/pwm/bean/TokenDestinationItem.java

@@ -31,13 +31,12 @@ import password.pwm.config.option.MessageSendMethod;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.i18n.Display;
 import password.pwm.i18n.PwmDisplayBundle;
-import password.pwm.user.UserInfo;
+import password.pwm.svc.secure.DomainSecureService;
 import password.pwm.svc.token.TokenDestinationDisplayMasker;
+import password.pwm.user.UserInfo;
 import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.java.StringUtil;
-import password.pwm.svc.secure.DomainSecureService;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -49,7 +48,7 @@ import java.util.Optional;
 
 @Value
 @Builder
-public class TokenDestinationItem implements Serializable
+public class TokenDestinationItem
 {
     private static final Map<PwmSetting, TokenDestinationItem.Type> SETTING_TO_DEST_TYPE_MAP = Map.of(
         PwmSetting.EMAIL_USER_MAIL_ATTRIBUTE, TokenDestinationItem.Type.email,

+ 1 - 5
server/src/main/java/password/pwm/bean/UserIdentity.java

@@ -21,7 +21,6 @@
 package password.pwm.bean;
 
 import com.novell.ldapchai.ChaiUser;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.jetbrains.annotations.NotNull;
 import password.pwm.PwmApplication;
 import password.pwm.PwmDomain;
@@ -35,16 +34,13 @@ import password.pwm.util.java.JavaHelper;
 import password.pwm.util.json.JsonFactory;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.util.Comparator;
 import java.util.Objects;
 import java.util.StringTokenizer;
 
-@SuppressFBWarnings( "SE_TRANSIENT_FIELD_NOT_RESTORED" )
-public class UserIdentity implements Serializable, Comparable<UserIdentity>
+public class UserIdentity implements Comparable<UserIdentity>
 {
     private static final PwmLogger LOGGER = PwmLogger.forClass( UserIdentity.class );
-    private static final long serialVersionUID = 1L;
 
     private static final String DELIM_SEPARATOR = "|";
 

+ 1 - 2
server/src/main/java/password/pwm/config/LDAPPermissionInfo.java

@@ -24,10 +24,9 @@ import password.pwm.i18n.Config;
 import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.macro.MacroRequest;
 
-import java.io.Serializable;
 import java.util.Locale;
 
-public class LDAPPermissionInfo implements Serializable
+public class LDAPPermissionInfo
 {
     private final Access access;
     private final Actor actor;

+ 1 - 2
server/src/main/java/password/pwm/config/PwmSettingTemplateSet.java

@@ -24,13 +24,12 @@ import lombok.Value;
 import password.pwm.util.java.CollectionUtil;
 import password.pwm.util.java.EnumUtil;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 @Value
-public class PwmSettingTemplateSet implements Serializable
+public class PwmSettingTemplateSet
 {
     private final Set<PwmSettingTemplate> templates;
 

+ 1 - 2
server/src/main/java/password/pwm/config/option/IdentityVerificationMethod.java

@@ -23,10 +23,9 @@ package password.pwm.config.option;
 import password.pwm.config.SettingReader;
 import password.pwm.i18n.Display;
 
-import java.io.Serializable;
 import java.util.Locale;
 
-public enum IdentityVerificationMethod implements Serializable, ConfigurationOption
+public enum IdentityVerificationMethod implements ConfigurationOption
 {
     PREVIOUS_AUTH( false, Display.Field_VerificationMethodPreviousAuth, Display.Description_VerificationMethodPreviousAuth ),
     ATTRIBUTES( true, Display.Field_VerificationMethodAttributes, Display.Description_VerificationMethodAttributes ),

+ 1 - 2
server/src/main/java/password/pwm/config/profile/ChallengeProfile.java

@@ -38,14 +38,13 @@ import password.pwm.error.PwmError;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.Optional;
 
-public class ChallengeProfile implements Profile, Serializable
+public class ChallengeProfile implements Profile
 {
     private static final PwmLogger LOGGER = PwmLogger.forClass( ChallengeProfile.class );
 

+ 2 - 5
server/src/main/java/password/pwm/config/profile/PwmPasswordPolicy.java

@@ -42,7 +42,6 @@ import password.pwm.util.json.JsonFactory;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.password.PasswordRuleReaderHelper;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -61,10 +60,8 @@ import java.util.stream.Collectors;
 /**
  * @author Jason D. Rivard
  */
-public class PwmPasswordPolicy implements Profile, Serializable
+public class PwmPasswordPolicy implements Profile
 {
-    private static final long serialVersionUID = 1L;
-
     private static final PwmLogger LOGGER = PwmLogger.forClass( PwmPasswordPolicy.class );
 
     private static final PwmPasswordPolicy DEFAULT_POLICY = makeDefaultPolicy();
@@ -397,7 +394,7 @@ public class PwmPasswordPolicy implements Profile, Serializable
 
     @Value
     @Builder
-    public static class PolicyMetaData implements Serializable
+    public static class PolicyMetaData
     {
         private final DomainID domainID;
 

+ 11 - 44
server/src/main/java/password/pwm/config/stored/StoredConfigKey.java

@@ -32,7 +32,6 @@ import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.java.PwmUtil;
 import password.pwm.util.java.StringUtil;
 
-import java.io.Serializable;
 import java.util.Comparator;
 import java.util.Locale;
 import java.util.Objects;
@@ -40,7 +39,13 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-public final class StoredConfigKey implements Serializable, Comparable<StoredConfigKey>
+public record StoredConfigKey(
+        RecordType recordType,
+        DomainID domainID,
+        String recordID,
+        String profileID
+)
+        implements Comparable<StoredConfigKey>
 {
     private static final Comparator<StoredConfigKey> COMPARATOR = makeComparator();
 
@@ -63,25 +68,11 @@ public final class StoredConfigKey implements Serializable, Comparable<StoredCon
         }
     }
 
-    private final RecordType recordType;
-    private final DomainID domainID;
-    private final String recordID;
-    private final String profileID;
-
-    private static final long serialVersionUID = 1L;
-
-    private StoredConfigKey(
-            final RecordType recordType,
-            final DomainID domainID,
-            final String recordID,
-            final String profileID
-    )
+    public StoredConfigKey
     {
-        this.recordType = Objects.requireNonNull( recordType, "recordType can not be null" );
-        this.recordID = Objects.requireNonNull( recordID, "recordID can not be null" );
-        this.domainID = Objects.requireNonNull( domainID, "domainID can not be null" );
-
-        this.profileID = profileID;
+        Objects.requireNonNull( recordType );
+        Objects.requireNonNull( recordID );
+        Objects.requireNonNull( domainID );
     }
 
     public RecordType getRecordType()
@@ -266,30 +257,6 @@ public final class StoredConfigKey implements Serializable, Comparable<StoredCon
         return COMPARATOR.compare( this, o );
     }
 
-    @Override
-    public boolean equals( final Object o )
-    {
-        if ( this == o )
-        {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-        final StoredConfigKey that = ( StoredConfigKey ) o;
-        return Objects.equals( recordType, that.recordType )
-                && Objects.equals( domainID, that.domainID )
-                && Objects.equals( recordID, that.recordID )
-                && Objects.equals( profileID, that.profileID );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return Objects.hash( recordType, domainID, recordID, profileID );
-    }
-
     @Override
     public String toString()
     {

+ 20 - 22
server/src/main/java/password/pwm/config/stored/StoredConfigZipJsonSerializer.java

@@ -25,13 +25,13 @@ import password.pwm.PwmConstants;
 import password.pwm.config.PwmSettingSyntax;
 import password.pwm.config.value.FileValue;
 import password.pwm.config.value.StoredValue;
+import password.pwm.data.ImmutableByteArray;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
-import password.pwm.data.ImmutableByteArray;
 import password.pwm.util.java.CollectionUtil;
 import password.pwm.util.java.JavaHelper;
-import password.pwm.util.json.JsonProvider;
 import password.pwm.util.json.JsonFactory;
+import password.pwm.util.json.JsonProvider;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmHashAlgorithm;
 import password.pwm.util.secure.SecureEngine;
@@ -40,7 +40,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -69,7 +68,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
         final IntermediateRepresentation intermediateRepresentation = readIntermediateRep( inputStream );
 
         final Map<StoredConfigKey, StoredValue> storedValueMap = new HashMap<>();
-        for ( final SerializedValue serializedValue : intermediateRepresentation.getSerializedValues() )
+        for ( final SerializedValue serializedValue : intermediateRepresentation.serializedValues() )
         {
             try
             {
@@ -95,7 +94,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
                     {
                         final String hash = entry.getKey();
                         final FileValue.FileInformation fileInformation = entry.getValue();
-                        final ImmutableByteArray realContent = intermediateRepresentation.getExRefs().get( hash );
+                        final ImmutableByteArray realContent = intermediateRepresentation.exRefs().get( hash );
                         final FileValue.FileContent realFileContent = FileValue.FileContent.fromBytes( realContent );
                         unstrippedMap.put( fileInformation, realFileContent );
                     }
@@ -125,8 +124,8 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
         final StoredConfigData storedConfigData = StoredConfigData.builder()
                 .storedValues( storedValueMap )
                 .metaDatas( valueMetaDataMap )
-                .createTime( intermediateRepresentation.getMetaData().getCreateTime() )
-                .modifyTime( intermediateRepresentation.getMetaData().getModifyTime() )
+                .createTime( intermediateRepresentation.metaData().getCreateTime() )
+                .modifyTime( intermediateRepresentation.metaData().getModifyTime() )
                 .build();
 
         return new StoredConfigurationImpl( storedConfigData );
@@ -192,7 +191,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
             zipOutputStream.putNextEntry( new ZipEntry( SETTINGS_FILENAME ) );
             JavaHelper.copy(
                     JsonFactory.get().serializeCollection(
-                            intermediateRepresentation.getSerializedValues(),
+                            intermediateRepresentation.serializedValues(),
                             JsonProvider.Flag.PrettyPrint ),
                     zipOutputStream,
                     PwmConstants.DEFAULT_CHARSET );
@@ -202,7 +201,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
             zipOutputStream.putNextEntry( new ZipEntry( META_VALUES_FILENAME ) );
             JavaHelper.copy(
                     JsonFactory.get().serializeCollection(
-                            intermediateRepresentation.getSerializedMetaValues(),
+                            intermediateRepresentation.serializedMetaValues(),
                             JsonProvider.Flag.PrettyPrint ),
                     zipOutputStream,
                     PwmConstants.DEFAULT_CHARSET );
@@ -219,7 +218,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
                     PwmConstants.DEFAULT_CHARSET );
         }
 
-        for ( final Map.Entry<String, ImmutableByteArray> entry : intermediateRepresentation.getExRefs().entrySet() )
+        for ( final Map.Entry<String, ImmutableByteArray> entry : intermediateRepresentation.exRefs().entrySet() )
         {
             zipOutputStream.putNextEntry( new ZipEntry( entry.getKey() ) );
             zipOutputStream.write( entry.getValue().copyOf() );
@@ -268,7 +267,7 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
                     value = storedValue.get();
                     syntax = key.getSyntax();
                 }
-                final String jsonValue = JsonFactory.get().serialize( ( Serializable ) value.toNativeObject() );
+                final String jsonValue = JsonFactory.get().serialize( value.toNativeObject() );
                 final SerializedValue storedComponent = new SerializedValue( key, syntax, jsonValue );
                 serializedValues.add( storedComponent );
             }
@@ -294,18 +293,17 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
         return SecureEngine.hash( fileContent.getContents().newByteArrayInputStream(), PwmHashAlgorithm.SHA256 );
     }
 
-
-    @Value
-    private static class IntermediateRepresentation
+    private record IntermediateRepresentation(
+            List<SerializedValue> serializedValues,
+            List<SerializedMetaValue> serializedMetaValues,
+            Map<String, ImmutableByteArray> exRefs,
+            MetaData metaData
+    )
     {
-        private List<SerializedValue> serializedValues;
-        private List<SerializedMetaValue> serializedMetaValues;
-        private Map<String, ImmutableByteArray> exRefs;
-        private MetaData metaData;
     }
 
     @Value
-    private static class SerializedValue implements Serializable
+    private static class SerializedValue
     {
         private StoredConfigKey key;
         private PwmSettingSyntax syntax;
@@ -313,20 +311,20 @@ public class StoredConfigZipJsonSerializer implements StoredConfigSerializer
     }
 
     @Value
-    private static class SerializedFileValue implements Serializable
+    private static class SerializedFileValue
     {
         private Map<String, FileValue.FileInformation> fileInformation;
     }
 
     @Value
-    private static class SerializedMetaValue implements Serializable
+    private static class SerializedMetaValue
     {
         private StoredConfigKey key;
         private ValueMetaData valueMetaData;
     }
 
     @Value
-    private static class MetaData implements Serializable
+    private static class MetaData
     {
         private String createTime;
         private Instant modifyTime;

+ 1 - 2
server/src/main/java/password/pwm/config/stored/ValueMetaData.java

@@ -24,12 +24,11 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.bean.UserIdentity;
 
-import java.io.Serializable;
 import java.time.Instant;
 
 @Value
 @Builder( toBuilder = true )
-public class ValueMetaData implements Serializable
+public class ValueMetaData
 {
     private Instant modifyDate;
     private UserIdentity userIdentity;

+ 4 - 5
server/src/main/java/password/pwm/config/value/AbstractValue.java

@@ -26,8 +26,8 @@ import org.jrivard.xmlchai.XmlElement;
 import password.pwm.PwmConstants;
 import password.pwm.config.stored.StoredConfigXmlConstants;
 import password.pwm.config.stored.XmlOutputProcessData;
-import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.data.ImmutableByteArray;
+import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.LazySupplier;
 import password.pwm.util.java.StringUtil;
@@ -38,7 +38,6 @@ import password.pwm.util.secure.PwmSecurityKey;
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.Serializable;
 import java.security.DigestOutputStream;
 import java.util.List;
 import java.util.Locale;
@@ -69,13 +68,13 @@ public abstract class AbstractValue implements StoredValue
     @Override
     public String toDebugString( final Locale locale )
     {
-        return JsonFactory.get().serialize( ( Serializable ) this.toNativeObject(), JsonProvider.Flag.PrettyPrint );
+        return JsonFactory.get().serialize( this.toNativeObject(), JsonProvider.Flag.PrettyPrint );
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
-        return ( Serializable ) this.toNativeObject();
+        return this.toNativeObject();
     }
 
     @Override

+ 1 - 2
server/src/main/java/password/pwm/config/value/ActionValue.java

@@ -38,7 +38,6 @@ import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -277,7 +276,7 @@ public class ActionValue extends AbstractValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
         final ArrayList<ActionConfiguration> output = new ArrayList<>( values.size() );
         for ( final ActionConfiguration actionConfiguration : values )

+ 1 - 2
server/src/main/java/password/pwm/config/value/BooleanValue.java

@@ -30,7 +30,6 @@ import password.pwm.i18n.Display;
 import password.pwm.util.json.JsonFactory;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -113,7 +112,7 @@ public class BooleanValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
         return value;
     }

+ 12 - 12
server/src/main/java/password/pwm/config/value/EmailValue.java

@@ -137,30 +137,30 @@ public class EmailValue extends AbstractValue implements StoredValue
             final EmailItemBean emailItemBean = entry.getValue();
             final Supplier<String> localeMsg = () -> loopLocale.length() > 0 ? " for locale " + loopLocale : "";
 
-            if ( emailItemBean.getSubject() == null || emailItemBean.getSubject().length() < 1 )
+            if ( StringUtil.isEmpty( emailItemBean.subject() ) )
             {
                 return Collections.singletonList( "subject field is required " + localeMsg.get() );
             }
 
-            if ( emailItemBean.getFrom() == null || emailItemBean.getFrom().length() < 1 )
+            if ( StringUtil.isEmpty( emailItemBean.from() ) )
             {
                 return Collections.singletonList( "from field is required" + localeMsg.get() );
             }
 
-            if ( StringUtil.isEmpty( emailItemBean.getBodyPlain() ) )
+            if ( StringUtil.isEmpty( emailItemBean.bodyPlain() ) )
             {
                 return Collections.singletonList( "plain body field is required" + localeMsg.get() );
             }
-            else if ( emailItemBean.getBodyPlain().length() > maxBodyChars )
+            else if ( emailItemBean.bodyPlain().length() > maxBodyChars )
             {
                 return Collections.singletonList( "plain body field is too large" + localeMsg.get()
-                        + ", chars=" + emailItemBean.getBodyPlain().length() + ", max=" + maxBodyChars );
+                        + ", chars=" + emailItemBean.bodyPlain().length() + ", max=" + maxBodyChars );
             }
 
-            if ( emailItemBean.getBodyHtml() != null && emailItemBean.getBodyHtml().length() > maxBodyChars )
+            if ( emailItemBean.bodyHtml() != null && emailItemBean.bodyHtml().length() > maxBodyChars )
             {
                 return Collections.singletonList( "html body field is too large" + localeMsg.get()
-                        + ", chars=" + emailItemBean.getBodyHtml().length() + ", max=" + maxBodyChars );
+                        + ", chars=" + emailItemBean.bodyHtml().length() + ", max=" + maxBodyChars );
             }
         }
 
@@ -180,11 +180,11 @@ public class EmailValue extends AbstractValue implements StoredValue
             final String localeKey = entry.getKey();
             final EmailItemBean emailItemBean = entry.getValue();
             sb.append( "EmailItem " ).append( LocaleHelper.debugLabel( LocaleHelper.parseLocaleString( localeKey ) ) ).append( ": \n" );
-            sb.append( "  To:" ).append( emailItemBean.getTo() ).append( '\n' );
-            sb.append( "From:" ).append( emailItemBean.getFrom() ).append( '\n' );
-            sb.append( "Subj:" ).append( emailItemBean.getSubject() ).append( '\n' );
-            sb.append( "Body:" ).append( emailItemBean.getBodyPlain() ).append( '\n' );
-            sb.append( "Html:" ).append( emailItemBean.getBodyHtml() ).append( '\n' );
+            sb.append( "  To:" ).append( emailItemBean.to() ).append( '\n' );
+            sb.append( "From:" ).append( emailItemBean.from() ).append( '\n' );
+            sb.append( "Subj:" ).append( emailItemBean.subject() ).append( '\n' );
+            sb.append( "Body:" ).append( emailItemBean.bodyPlain() ).append( '\n' );
+            sb.append( "Html:" ).append( emailItemBean.bodyHtml() ).append( '\n' );
         }
         return sb.toString();
     }

+ 7 - 12
server/src/main/java/password/pwm/config/value/FileValue.java

@@ -29,8 +29,8 @@ import password.pwm.PwmConstants;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.stored.StoredConfigXmlConstants;
 import password.pwm.config.stored.XmlOutputProcessData;
-import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.data.ImmutableByteArray;
+import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.util.java.LazySupplier;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.json.JsonFactory;
@@ -41,7 +41,6 @@ import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.SecureEngine;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -61,19 +60,15 @@ public class FileValue extends AbstractValue implements StoredValue
     private final Map<FileInformation, FileContent> values;
 
     @Value
-    public static class FileInformation implements Serializable
+    public static class FileInformation
     {
-        private static final long serialVersionUID = 1L;
-
         private final String filename;
         private final String filetype;
     }
 
     @EqualsAndHashCode
-    public static class FileContent implements Serializable
+    public static class FileContent
     {
-        private static final long serialVersionUID = 1L;
-
         private final String b64EncodedContents;
         private final transient Supplier<ImmutableByteArray> byteContents;
 
@@ -232,13 +227,13 @@ public class FileValue extends AbstractValue implements StoredValue
     )
     {
         final List<Map<String, Object>> output = asMetaData();
-        return JsonFactory.get().serialize( ( Serializable ) output, JsonProvider.Flag.PrettyPrint );
+        return JsonFactory.get().serialize( output, JsonProvider.Flag.PrettyPrint );
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
-        return ( Serializable ) asMetaData();
+        return asMetaData();
     }
 
     List<Map<String, Object>> asMetaData( )
@@ -295,7 +290,7 @@ public class FileValue extends AbstractValue implements StoredValue
 
     @Value
     @Builder
-    public static class FileInfo implements Serializable
+    public static class FileInfo
     {
         private String name;
         private String type;

+ 1 - 4
server/src/main/java/password/pwm/config/value/NamedSecretValue.java

@@ -40,7 +40,6 @@ import password.pwm.util.secure.PwmBlockAlgorithm;
 import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.SecureEngine;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -51,8 +50,6 @@ import java.util.Optional;
 
 public class NamedSecretValue implements StoredValue
 {
-    private static final long serialVersionUID = 1L;
-
     private final transient LazySupplier<String> valueHashSupplier = LazySupplier.create( () -> AbstractValue.valueHashComputer( NamedSecretValue.this ) );
 
     private static final String ELEMENT_NAME = "name";
@@ -227,7 +224,7 @@ public class NamedSecretValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
         if ( values == null )
         {

+ 1 - 4
server/src/main/java/password/pwm/config/value/PasswordValue.java

@@ -37,7 +37,6 @@ import password.pwm.util.java.LazySupplier;
 import password.pwm.util.json.JsonFactory;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -45,8 +44,6 @@ import java.util.Optional;
 
 public class PasswordValue implements StoredValue
 {
-    private static final long serialVersionUID = 1L;
-
     private final transient LazySupplier<String> valueHashSupplier = LazySupplier.create( () -> AbstractValue.valueHashComputer( PasswordValue.this ) );
 
     private final PasswordData value;
@@ -192,7 +189,7 @@ public class PasswordValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
         return PwmConstants.LOG_REMOVED_VALUE_REPLACEMENT;
     }

+ 2 - 3
server/src/main/java/password/pwm/config/value/PrivateKeyValue.java

@@ -35,7 +35,6 @@ import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.X509CertInfo;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.security.KeyFactory;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
@@ -241,8 +240,8 @@ public class PrivateKeyValue extends AbstractValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
-        return ( Serializable ) toInfoMap( false );
+        return toInfoMap( false );
     }
 }

+ 2 - 3
server/src/main/java/password/pwm/config/value/RemoteWebServiceValue.java

@@ -34,7 +34,6 @@ import password.pwm.util.json.JsonFactory;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -176,9 +175,9 @@ public class RemoteWebServiceValue extends AbstractValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
-        return ( Serializable ) makeDebugJsonObject( locale );
+        return makeDebugJsonObject( locale );
     }
 
     private List<RemoteWebServiceConfiguration> makeDebugJsonObject( final Locale locale )

+ 2 - 3
server/src/main/java/password/pwm/config/value/StoredValue.java

@@ -26,11 +26,10 @@ import password.pwm.config.stored.XmlOutputProcessData;
 import password.pwm.error.PwmException;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Locale;
 
-public interface StoredValue extends Serializable
+public interface StoredValue
 {
     List<XmlElement> toXmlValues( String valueElementName, XmlOutputProcessData xmlOutputProcessData );
 
@@ -38,7 +37,7 @@ public interface StoredValue extends Serializable
 
     List<String> validateValue( PwmSetting pwm );
 
-    Serializable toDebugJsonObject( Locale locale );
+    Object toDebugJsonObject( Locale locale );
 
     String toDebugString( Locale locale );
 

+ 1 - 4
server/src/main/java/password/pwm/config/value/StoredValueEncoder.java

@@ -20,7 +20,6 @@
 
 package password.pwm.config.value;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import lombok.Value;
 import password.pwm.PwmConstants;
 import password.pwm.error.ErrorInformation;
@@ -34,7 +33,6 @@ import password.pwm.util.secure.PwmRandom;
 import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.SecureEngine;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Optional;
 
@@ -53,7 +51,6 @@ public abstract class StoredValueEncoder
 
         private final List<String> prefixes;
 
-        @SuppressFBWarnings( "SE_BAD_FIELD" )
         private final SecureOutputEngine secureOutputEngine;
 
         Mode( final SecureOutputEngine secureOutputEngine, final String... prefixes )
@@ -260,7 +257,7 @@ public abstract class StoredValueEncoder
     }
 
     @Value
-    private static class StoredPwData implements Serializable
+    private static class StoredPwData
     {
         private String salt;
         private String value;

+ 2 - 3
server/src/main/java/password/pwm/config/value/VerificationMethodValue.java

@@ -34,7 +34,6 @@ import password.pwm.util.json.JsonFactory;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -55,7 +54,7 @@ public class VerificationMethodValue extends AbstractValue implements StoredValu
         optional,
     }
 
-    public static class VerificationMethodSettings implements Serializable
+    public static class VerificationMethodSettings
     {
         private final Map<IdentityVerificationMethod, VerificationMethodSetting> methodSettings;
         private final int minOptionalRequired;
@@ -87,7 +86,7 @@ public class VerificationMethodValue extends AbstractValue implements StoredValu
     }
 
     @Value
-    public static class VerificationMethodSetting implements Serializable
+    public static class VerificationMethodSetting
     {
         private EnabledState enabledState;
     }

+ 3 - 6
server/src/main/java/password/pwm/config/value/X509CertificateValue.java

@@ -34,7 +34,6 @@ import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.X509CertInfo;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -47,8 +46,6 @@ import java.util.stream.Collectors;
 
 public class X509CertificateValue extends AbstractValue implements StoredValue
 {
-    private static final long serialVersionUID = 1L;
-
     private static final PwmLogger LOGGER = PwmLogger.forClass( X509CertificateValue.class );
 
     // native object;
@@ -152,9 +149,9 @@ public class X509CertificateValue extends AbstractValue implements StoredValue
     }
 
     @Override
-    public Serializable toDebugJsonObject( final Locale locale )
+    public Object toDebugJsonObject( final Locale locale )
     {
-        return ( Serializable ) toInfoMap( false );
+        return toInfoMap( false );
     }
 
     public List<Map<String, String>> toInfoMap( final boolean includeDetail )
@@ -166,7 +163,7 @@ public class X509CertificateValue extends AbstractValue implements StoredValue
 
         return certs.get().stream()
                 .map( cert -> X509CertInfo.makeDebugInfoMap( cert, X509Utils.DebugInfoFlag.IncludeCertificateDetail ) )
-                .collect( Collectors.toUnmodifiableList() );
+                .toList();
 
     }
 

+ 4 - 5
server/src/main/java/password/pwm/config/value/data/ActionConfiguration.java

@@ -27,7 +27,6 @@ import password.pwm.error.PwmError;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.java.StringUtil;
 
-import java.io.Serializable;
 import java.security.cert.X509Certificate;
 import java.util.Collections;
 import java.util.List;
@@ -35,7 +34,7 @@ import java.util.Map;
 
 @Value
 @Builder( toBuilder = true )
-public class ActionConfiguration implements Serializable
+public class ActionConfiguration
 {
     private String name;
     private String description;
@@ -58,7 +57,7 @@ public class ActionConfiguration implements Serializable
 
     @Value
     @Builder( toBuilder = true )
-    public static class WebAction implements Serializable
+    public static class WebAction
     {
         @Builder.Default
         private ActionConfiguration.WebMethod method = ActionConfiguration.WebMethod.get;
@@ -87,7 +86,7 @@ public class ActionConfiguration implements Serializable
 
     @Value
     @Builder
-    public static class LdapAction implements Serializable
+    public static class LdapAction
     {
         @Builder.Default
         private ActionConfiguration.LdapMethod ldapMethod = ActionConfiguration.LdapMethod.replace;
@@ -126,7 +125,7 @@ public class ActionConfiguration implements Serializable
 
     @Value
     @Builder( toBuilder = true )
-    public static class ActionConfigurationOldVersion1 implements Serializable
+    public static class ActionConfigurationOldVersion1
     {
         public enum Type
         {

+ 1 - 3
server/src/main/java/password/pwm/config/value/data/ChallengeItemConfiguration.java

@@ -23,11 +23,9 @@ package password.pwm.config.value.data;
 import lombok.Builder;
 import lombok.Value;
 
-import java.io.Serializable;
-
 @Value
 @Builder
-public class ChallengeItemConfiguration implements Serializable
+public class ChallengeItemConfiguration
 {
     private String text;
     private int minLength;

+ 1 - 2
server/src/main/java/password/pwm/config/value/data/CustomLinkConfiguration.java

@@ -25,7 +25,6 @@ import lombok.Value;
 import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.json.JsonFactory;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.Locale;
 import java.util.Map;
@@ -35,7 +34,7 @@ import java.util.Map;
  */
 @Value
 @EqualsAndHashCode( callSuper = false )
-public class CustomLinkConfiguration implements Serializable
+public class CustomLinkConfiguration
 {
     public enum Type
     {

+ 1 - 2
server/src/main/java/password/pwm/config/value/data/FormConfiguration.java

@@ -34,7 +34,6 @@ import password.pwm.i18n.Display;
 import password.pwm.util.i18n.LocaleHelper;
 import password.pwm.util.java.StringUtil;
 
-import java.io.Serializable;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -50,7 +49,7 @@ import java.util.regex.PatternSyntaxException;
 
 @Value
 @Builder( toBuilder = true )
-public class FormConfiguration implements Serializable
+public class FormConfiguration
 {
     public enum Type
     {

+ 1 - 2
server/src/main/java/password/pwm/config/value/data/NamedSecretData.java

@@ -23,11 +23,10 @@ package password.pwm.config.value.data;
 import lombok.Value;
 import password.pwm.util.PasswordData;
 
-import java.io.Serializable;
 import java.util.List;
 
 @Value
-public class NamedSecretData implements Serializable
+public class NamedSecretData
 {
     private PasswordData password;
     private List<String> usage;

+ 1 - 3
server/src/main/java/password/pwm/config/value/data/RemoteWebServiceConfiguration.java

@@ -23,16 +23,14 @@ package password.pwm.config.value.data;
 import lombok.Builder;
 import lombok.Value;
 
-import java.io.Serializable;
 import java.security.cert.X509Certificate;
 import java.util.List;
 import java.util.Map;
 
 @Value
 @Builder( toBuilder = true )
-public class RemoteWebServiceConfiguration implements Serializable
+public class RemoteWebServiceConfiguration
 {
-
     public enum WebMethod
     {
         delete,

+ 1 - 2
server/src/main/java/password/pwm/config/value/data/ShortcutItem.java

@@ -24,11 +24,10 @@ import lombok.Value;
 import password.pwm.bean.SessionLabel;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.net.URI;
 
 @Value
-public class ShortcutItem implements Serializable
+public class ShortcutItem
 {
     private static final PwmLogger LOGGER = PwmLogger.forClass( ShortcutItem.class );
 

+ 1 - 2
server/src/main/java/password/pwm/config/value/data/UserPermission.java

@@ -27,7 +27,6 @@ import password.pwm.bean.ProfileID;
 import password.pwm.ldap.permission.UserPermissionType;
 import password.pwm.util.java.StringUtil;
 
-import java.io.Serializable;
 import java.util.Comparator;
 
 @Value
@@ -35,7 +34,7 @@ import java.util.Comparator;
 /**
  * Represents a user permission configuration value.
  */
-public class UserPermission implements Serializable, Comparable<UserPermission>
+public class UserPermission implements Comparable<UserPermission>
 {
     @Builder.Default
     private UserPermissionType type = UserPermissionType.ldapQuery;

+ 1 - 2
server/src/main/java/password/pwm/error/ErrorInformation.java

@@ -23,7 +23,6 @@ package password.pwm.error;
 import password.pwm.config.SettingReader;
 import password.pwm.http.PwmSession;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.Arrays;
 import java.util.Locale;
@@ -33,7 +32,7 @@ import java.util.Locale;
  * (in the form of an {@link PwmError}), additional detailed error information for logging, and string substitutions
  * to use when presenting error messages to users.
  */
-public class ErrorInformation implements Serializable
+public class ErrorInformation
 {
     private final PwmError error;
     private final String detailedErrorMsg;

+ 1 - 3
server/src/main/java/password/pwm/health/HealthMonitorSettings.java

@@ -26,11 +26,9 @@ import password.pwm.AppProperty;
 import password.pwm.config.AppConfig;
 import password.pwm.util.java.TimeDuration;
 
-import java.io.Serializable;
-
 @Value
 @Builder
-class HealthMonitorSettings implements Serializable
+class HealthMonitorSettings
 {
     private boolean healthCheckEnabled;
     private TimeDuration nominalCheckInterval;

+ 1 - 2
server/src/main/java/password/pwm/health/HealthRecord.java

@@ -28,7 +28,6 @@ import password.pwm.config.SettingReader;
 import password.pwm.ws.server.rest.bean.PublicHealthData;
 import password.pwm.ws.server.rest.bean.PublicHealthRecord;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.Arrays;
 import java.util.Collections;
@@ -38,7 +37,7 @@ import java.util.Locale;
 import java.util.Objects;
 
 @EqualsAndHashCode
-public class HealthRecord implements Serializable, Comparable<HealthRecord>
+public class HealthRecord implements Comparable<HealthRecord>
 {
     private final HealthStatus status;
 

+ 2 - 3
server/src/main/java/password/pwm/health/HealthService.java

@@ -35,7 +35,6 @@ import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogManager;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -63,7 +62,7 @@ public class HealthService extends AbstractPwmService implements PwmService
 
     private HealthMonitorSettings settings;
 
-    private final Map<HealthMonitorFlag, Serializable> healthProperties = new ConcurrentHashMap<>();
+    private final Map<HealthMonitorFlag, Object> healthProperties = new ConcurrentHashMap<>();
     private final AtomicInteger healthCheckCount = new AtomicInteger( 0 );
 
     private final StatisticCounterBundle<CounterStatKey> counterStats = new StatisticCounterBundle<>( CounterStatKey.class );
@@ -259,7 +258,7 @@ public class HealthService extends AbstractPwmService implements PwmService
                 .build();
     }
 
-    Map<HealthMonitorFlag, Serializable> getHealthProperties( )
+    Map<HealthMonitorFlag, Object> getHealthProperties( )
     {
         return healthProperties;
     }

+ 5 - 6
server/src/main/java/password/pwm/health/LDAPHealthChecker.java

@@ -53,14 +53,14 @@ import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.ldap.LdapOperationsHelper;
-import password.pwm.user.UserInfo;
 import password.pwm.ldap.UserInfoFactory;
 import password.pwm.ldap.search.SearchConfiguration;
+import password.pwm.user.UserInfo;
 import password.pwm.util.PasswordData;
 import password.pwm.util.java.CollectionUtil;
 import password.pwm.util.java.JavaHelper;
-import password.pwm.util.java.PwmUtil;
 import password.pwm.util.java.PwmTimeUtil;
+import password.pwm.util.java.PwmUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
@@ -69,7 +69,6 @@ import password.pwm.util.password.PasswordUtility;
 import password.pwm.util.password.RandomPasswordGenerator;
 import password.pwm.ws.server.rest.bean.PublicHealthData;
 
-import java.io.Serializable;
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.URI;
@@ -723,7 +722,7 @@ public class LDAPHealthChecker implements HealthSupplier
 
     private List<HealthRecord> checkVendorSameness( final SessionLabel sessionLabel, final PwmDomain pwmDomain )
     {
-        final Map<HealthService.HealthMonitorFlag, Serializable> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
+        final Map<HealthService.HealthMonitorFlag, Object> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
         final List<HealthRecord> cachedRecords = ( List<HealthRecord> ) healthProperties.get( HealthService.HealthMonitorFlag.LdapVendorSameCheck );
         if ( cachedRecords != null )
         {
@@ -800,7 +799,7 @@ public class LDAPHealthChecker implements HealthSupplier
 
         if ( pwmDomain.getPwmApplication().getHealthMonitor() != null )
         {
-            final Map<HealthService.HealthMonitorFlag, Serializable> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
+            final Map<HealthService.HealthMonitorFlag, Object> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
             final List<HealthRecord> cachedRecords = ( List<HealthRecord> ) healthProperties.get( HealthService.HealthMonitorFlag.AdPasswordPolicyApiCheck );
             if ( cachedRecords != null )
             {
@@ -856,7 +855,7 @@ public class LDAPHealthChecker implements HealthSupplier
 
         if ( !errorReachingServer && pwmDomain.getPwmApplication().getHealthMonitor() != null )
         {
-            final Map<HealthService.HealthMonitorFlag, Serializable> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
+            final Map<HealthService.HealthMonitorFlag, Object> healthProperties = pwmDomain.getPwmApplication().getHealthMonitor().getHealthProperties();
             healthProperties.put( HealthService.HealthMonitorFlag.AdPasswordPolicyApiCheck, healthRecords );
         }
 

+ 19 - 0
server/src/main/java/password/pwm/http/HttpEventManager.java

@@ -40,6 +40,7 @@ import javax.servlet.http.HttpSessionActivationListener;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 import java.time.Instant;
+import java.util.Enumeration;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.logging.Level;
@@ -114,6 +115,8 @@ public class HttpEventManager implements
                 LOGGER.warn( () -> "error during httpSessionDestroyed: " + e.getMessage() );
             }
         }
+
+        clearSessionAttributes( httpSession );
     }
 
 
@@ -164,11 +167,13 @@ public class HttpEventManager implements
     @Override
     public void sessionWillPassivate( final HttpSessionEvent event )
     {
+        clearSessionAttributes( event.getSession() );
     }
 
     @Override
     public void sessionDidActivate( final HttpSessionEvent event )
     {
+        clearSessionAttributes( event.getSession() );
     }
 
     private static String makeSessionDestroyedDebugMsg( final PwmSession pwmSession )
@@ -199,5 +204,19 @@ public class HttpEventManager implements
     {
         ServletRequestListener.super.requestInitialized( sre );
     }
+
+    private static void clearSessionAttributes( final HttpSession httpSession )
+    {
+        if ( httpSession == null )
+        {
+            return;
+        }
+
+        for ( final Enumeration<String> stringEnumeration = httpSession.getAttributeNames(); stringEnumeration.hasMoreElements(); )
+        {
+            final String attributeName = stringEnumeration.nextElement();
+            httpSession.removeAttribute( attributeName );
+        }
+    }
 }
 

+ 1 - 2
server/src/main/java/password/pwm/http/PwmRequest.java

@@ -71,7 +71,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.EnumSet;
@@ -500,7 +499,7 @@ public class PwmRequest extends PwmHttpRequestWrapper
                 : new LinkedHashMap<>( formDataMap );
 
         this.setAttribute( PwmRequestAttribute.FormConfiguration, new ArrayList<>( formConfiguration ) );
-        this.setAttribute( PwmRequestAttribute.FormData, ( Serializable ) formDataMapValue );
+        this.setAttribute( PwmRequestAttribute.FormData, formDataMapValue );
         this.setAttribute( PwmRequestAttribute.FormReadOnly, readOnly );
         this.setAttribute( PwmRequestAttribute.FormShowPasswordFields, showPasswordFields );
     }

+ 2 - 3
server/src/main/java/password/pwm/http/PwmResponse.java

@@ -45,7 +45,6 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -241,13 +240,13 @@ public class PwmResponse extends PwmHttpResponseWrapper
     }
 
 
-    public void writeEncryptedCookie( final String cookieName, final Serializable cookieValue, final PwmCookiePath path )
+    public void writeEncryptedCookie( final String cookieName, final Object cookieValue, final PwmCookiePath path )
             throws PwmUnrecoverableException
     {
         writeEncryptedCookie( cookieName, cookieValue, -1, path );
     }
 
-    public void writeEncryptedCookie( final String cookieName, final Serializable cookieValue, final int seconds, final PwmCookiePath path )
+    public void writeEncryptedCookie( final String cookieName, final Object cookieValue, final int seconds, final PwmCookiePath path )
             throws PwmUnrecoverableException
     {
         final String encryptedValue = pwmRequest.encryptObjectToString( cookieValue );

+ 1 - 8
server/src/main/java/password/pwm/http/PwmSession.java

@@ -20,7 +20,6 @@
 
 package password.pwm.http;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import lombok.EqualsAndHashCode;
 import password.pwm.AppProperty;
 import password.pwm.PwmApplication;
@@ -52,7 +51,6 @@ import password.pwm.util.macro.MacroRequest;
 import password.pwm.util.secure.PwmRandom;
 import password.pwm.util.secure.PwmSecurityKey;
 
-import java.io.Serializable;
 import java.lang.ref.SoftReference;
 import java.time.Instant;
 import java.util.Date;
@@ -67,19 +65,14 @@ import java.util.concurrent.locks.ReentrantLock;
  * @author Jason D. Rivard
  */
 @EqualsAndHashCode
-public class PwmSession implements Serializable
+public class PwmSession
 {
-    private static final long serialVersionUID = 1L;
-
     private static final PwmLogger LOGGER = PwmLogger.forClass( PwmSession.class );
 
-    @SuppressFBWarnings( "SE_TRANSIENT_FIELD_NOT_RESTORED" )
     private final transient LocalSessionStateBean sessionStateBean = new LocalSessionStateBean();
 
-    @SuppressFBWarnings( "SE_TRANSIENT_FIELD_NOT_RESTORED" )
     private final transient UserSessionDataCacheBean userSessionDataCacheBean = new UserSessionDataCacheBean();
 
-    @SuppressFBWarnings( "SE_TRANSIENT_FIELD_NOT_RESTORED" )
     private transient volatile SoftReference<ReportProcess> reportProcess = new SoftReference<>( null );
 
     private final DomainID domainID;

+ 2 - 0
server/src/main/java/password/pwm/http/PwmSessionFactory.java

@@ -20,6 +20,7 @@
 
 package password.pwm.http;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import password.pwm.PwmConstants;
 import password.pwm.PwmDomain;
 import password.pwm.bean.DomainID;
@@ -48,6 +49,7 @@ public class PwmSessionFactory
         return pwmSession;
     }
 
+    @SuppressFBWarnings( "J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION" )
     public static void sessionMerge(
             final PwmRequest pwmRequest,
             final PwmDomain pwmDomain,

+ 1 - 2
server/src/main/java/password/pwm/http/auth/HttpAuthRecord.java

@@ -22,11 +22,10 @@ package password.pwm.http.auth;
 
 import lombok.Value;
 
-import java.io.Serializable;
 import java.time.Instant;
 
 @Value
-public class HttpAuthRecord implements Serializable
+public class HttpAuthRecord
 {
     private Instant date;
     private String guid;

+ 0 - 2
server/src/main/java/password/pwm/http/bean/ConfigManagerBean.java

@@ -32,8 +32,6 @@ import java.util.Set;
 @EqualsAndHashCode( callSuper = false )
 public class ConfigManagerBean extends PwmSessionBean
 {
-    private static final long serialVersionUID = 1L;
-
     private transient StoredConfiguration storedConfiguration;
     private boolean passwordVerified;
     private boolean configUnlockedWarningShown;

+ 1 - 2
server/src/main/java/password/pwm/http/bean/DisplayElement.java

@@ -22,11 +22,10 @@ package password.pwm.http.bean;
 
 import lombok.Value;
 
-import java.io.Serializable;
 import java.util.List;
 
 @Value
-public class DisplayElement implements Serializable
+public class DisplayElement
 {
     private final String key;
     private final Type type;

+ 2 - 7
server/src/main/java/password/pwm/http/bean/ForgottenPasswordBean.java

@@ -35,7 +35,6 @@ import password.pwm.config.option.RecoveryAction;
 import password.pwm.config.option.SessionBeanMode;
 import password.pwm.config.value.data.FormConfiguration;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -50,8 +49,6 @@ import java.util.Set;
 @EqualsAndHashCode( callSuper = false )
 public class ForgottenPasswordBean extends PwmSessionBean
 {
-    private static final long serialVersionUID = 1L;
-
     @SerializedName( "pr" )
     private ProfileID profile;
 
@@ -86,10 +83,8 @@ public class ForgottenPasswordBean extends PwmSessionBean
     private Map<String, String> userSearchValues;
 
     @Data
-    public static class Progress implements Serializable
+    public static class Progress
     {
-        private static final long serialVersionUID = 1L;
-
         @SerializedName( "s" )
         private boolean tokenSent;
 
@@ -119,7 +114,7 @@ public class ForgottenPasswordBean extends PwmSessionBean
 
     @Value
     @AllArgsConstructor
-    public static class RecoveryFlags implements Serializable
+    public static class RecoveryFlags
     {
         @SerializedName( "a" )
         private final boolean allowWhenLdapIntruderLocked;

+ 0 - 2
server/src/main/java/password/pwm/http/bean/NewUserBean.java

@@ -42,8 +42,6 @@ import java.util.Set;
 @EqualsAndHashCode( callSuper = false )
 public class NewUserBean extends PwmSessionBean
 {
-    private static final long serialVersionUID = 1L;
-
     @SerializedName( "p" )
     private ProfileID profileID;
 

+ 1 - 2
server/src/main/java/password/pwm/http/bean/PwmSessionBean.java

@@ -25,14 +25,13 @@ import lombok.Setter;
 import password.pwm.config.option.SessionBeanMode;
 import password.pwm.error.ErrorInformation;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.List;
 import java.util.Set;
 
 @Getter
 @Setter
-public abstract class PwmSessionBean implements Serializable
+public abstract class PwmSessionBean
 {
     public enum BeanType
     {

+ 1 - 2
server/src/main/java/password/pwm/http/bean/SetupResponsesBean.java

@@ -26,7 +26,6 @@ import lombok.EqualsAndHashCode;
 import password.pwm.config.option.SessionBeanMode;
 import password.pwm.http.servlet.setupresponses.ResponseMode;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -53,7 +52,7 @@ public class SetupResponsesBean extends PwmSessionBean
 
     @Data
     @EqualsAndHashCode( callSuper = false )
-    public static class SetupData implements Serializable
+    public static class SetupData
     {
         private Map<String, Challenge> indexedChallenges = Collections.emptyMap();
         private boolean simpleMode;

+ 1 - 2
server/src/main/java/password/pwm/http/bean/UserSessionDataCacheBean.java

@@ -22,12 +22,11 @@ package password.pwm.http.bean;
 
 import password.pwm.Permission;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.Map;
 
-public class UserSessionDataCacheBean implements Serializable
+public class UserSessionDataCacheBean
 {
     private final Map<Permission, Permission.PermissionStatus> permissions = new EnumMap<>( Permission.class );
 

+ 2 - 3
server/src/main/java/password/pwm/http/servlet/ClientApiServlet.java

@@ -68,7 +68,6 @@ import password.pwm.ws.server.rest.bean.PublicHealthData;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -101,14 +100,14 @@ public class ClientApiServlet extends ControlledPwmServlet
     }
 
     @Data
-    public static class AppData implements Serializable
+    public static class AppData
     {
         @SuppressWarnings( "checkstyle:MemberName" )
         public Map<String, Object> PWM_GLOBAL;
     }
 
     @Data
-    public static class PingResponse implements Serializable
+    public static class PingResponse
     {
         private Instant time;
         private String runtimeNonce;

+ 3 - 4
server/src/main/java/password/pwm/http/servlet/accountinfo/AccountInformationBean.java

@@ -33,16 +33,15 @@ import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.bean.DisplayElement;
 import password.pwm.http.tag.PasswordRequirementsTag;
-import password.pwm.user.UserInfo;
 import password.pwm.ldap.ViewableUserInfoDisplayReader;
 import password.pwm.svc.event.UserAuditRecord;
+import password.pwm.user.UserInfo;
 import password.pwm.util.form.FormUtility;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.macro.MacroRequest;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -52,12 +51,12 @@ import java.util.Map;
 
 @Value
 @Builder
-public class AccountInformationBean implements Serializable
+public class AccountInformationBean
 {
     private static final PwmLogger LOGGER = PwmLogger.forClass( AccountInformationBean.class );
 
     @Value
-    public static class ActivityRecord implements Serializable
+    public static class ActivityRecord
     {
         private Instant timestamp;
         private String label;

+ 4 - 6
server/src/main/java/password/pwm/http/servlet/admin/AppDashboardData.java

@@ -54,7 +54,6 @@ import password.pwm.util.localdb.LocalDBException;
 import password.pwm.util.logging.LocalDBLogger;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.lang.management.ManagementFactory;
 import java.lang.management.ThreadInfo;
 import java.time.Instant;
@@ -73,9 +72,8 @@ import java.util.TreeMap;
 
 @Value
 @Builder
-public class AppDashboardData implements Serializable
+public class AppDashboardData
 {
-
     private static final PwmLogger LOGGER = PwmLogger.forClass( AppDashboardData.class );
 
     private static final List<PwmAboutProperty> INTERESTED_ABOUT_PROPERTIES = Arrays.asList(
@@ -96,7 +94,7 @@ public class AppDashboardData implements Serializable
 
 
     @Value
-    public static class ServiceData implements Serializable, Comparable<ServiceData>
+    public static class ServiceData implements Comparable<ServiceData>
     {
         private static final Comparator<ServiceData> COMPARATOR = Comparator.comparing(
                 ServiceData::getDomainID,
@@ -124,7 +122,7 @@ public class AppDashboardData implements Serializable
     }
 
     @Value
-    public static class ThreadData implements Serializable
+    public static class ThreadData
     {
         private String id;
         private String name;
@@ -133,7 +131,7 @@ public class AppDashboardData implements Serializable
     }
 
     @Value
-    public static class NodeData implements Serializable
+    public static class NodeData
     {
         private String instanceID;
         private String uptime;

+ 13 - 6
server/src/main/java/password/pwm/http/servlet/admin/SystemAdminServlet.java

@@ -21,7 +21,6 @@
 package password.pwm.http.servlet.admin;
 
 import com.novell.ldapchai.exception.ChaiUnavailableException;
-import lombok.Value;
 import password.pwm.AppProperty;
 import password.pwm.Permission;
 import password.pwm.PwmConstants;
@@ -53,6 +52,7 @@ import password.pwm.svc.intruder.PublicIntruderRecord;
 import password.pwm.svc.pwnotify.PwNotifyService;
 import password.pwm.svc.pwnotify.PwNotifyStoredJobState;
 import password.pwm.util.i18n.LocaleHelper;
+import password.pwm.util.java.CollectionUtil;
 import password.pwm.util.java.EnumUtil;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.PwmTimeUtil;
@@ -72,7 +72,6 @@ import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
-import java.io.Serializable;
 import java.io.Writer;
 import java.lang.management.ManagementFactory;
 import java.lang.management.ThreadInfo;
@@ -690,10 +689,18 @@ public class SystemAdminServlet extends ControlledPwmServlet
         return ProcessStatus.Halt;
     }
 
-    @Value
-    public static class PwNotifyStatusBean implements Serializable
+    public record PwNotifyStatusBean(
+            List<DisplayElement> statusData,
+            boolean enableStartButton
+    )
     {
-        private List<DisplayElement> statusData;
-        private boolean enableStartButton;
+        public PwNotifyStatusBean(
+                final List<DisplayElement> statusData,
+                final boolean enableStartButton
+        )
+        {
+            this.statusData = CollectionUtil.stripNulls( statusData );
+            this.enableStartButton = enableStartButton;
+        }
     }
 }

+ 0 - 2
server/src/main/java/password/pwm/http/servlet/admin/domain/UserDebugDataBean.java

@@ -36,8 +36,6 @@ import java.util.Map;
 @Builder
 public class UserDebugDataBean
 {
-    private static final long serialVersionUID = 1L;
-
     private transient UserInfo userInfo;
 
     private final PublicUserInfoBean publicUserInfoBean;

+ 5 - 6
server/src/main/java/password/pwm/http/servlet/admin/system/ConfigManagerLoginServlet.java

@@ -29,8 +29,8 @@ import password.pwm.PwmApplicationMode;
 import password.pwm.PwmConstants;
 import password.pwm.PwmDomain;
 import password.pwm.bean.UserIdentity;
-import password.pwm.config.stored.ConfigurationProperty;
 import password.pwm.config.stored.ConfigurationFileManager;
+import password.pwm.config.stored.ConfigurationProperty;
 import password.pwm.config.stored.StoredConfiguration;
 import password.pwm.config.stored.StoredConfigurationUtil;
 import password.pwm.error.ErrorInformation;
@@ -51,8 +51,8 @@ import password.pwm.svc.intruder.IntruderRecordType;
 import password.pwm.svc.intruder.IntruderServiceClient;
 import password.pwm.util.java.EnumUtil;
 import password.pwm.util.java.JavaHelper;
-import password.pwm.util.java.PwmUtil;
 import password.pwm.util.java.PwmTimeUtil;
+import password.pwm.util.java.PwmUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
@@ -62,7 +62,6 @@ import password.pwm.util.secure.SecureEngine;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
-import java.io.Serializable;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -213,7 +212,7 @@ public class ConfigManagerLoginServlet extends AbstractPwmServlet
     }
 
     @Value
-    public static class ConfigLoginHistory implements Serializable
+    public static class ConfigLoginHistory
     {
         private List<ConfigLoginEvent> successEvents = new ArrayList<>();
         private List<ConfigLoginEvent> failedEvents = new ArrayList<>();
@@ -243,7 +242,7 @@ public class ConfigManagerLoginServlet extends AbstractPwmServlet
     }
 
     @Value
-    public static class ConfigLoginEvent implements Serializable
+    public static class ConfigLoginEvent
     {
         private final String userIdentity;
         private final Instant date;
@@ -381,7 +380,7 @@ public class ConfigManagerLoginServlet extends AbstractPwmServlet
 
 
     @Value
-    private static class PersistentLoginInfo implements Serializable
+    private static class PersistentLoginInfo
     {
         @SerializedName( "i" )
         private Instant issueTimestamp;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/admin/system/ConfigManagerWordlistServlet.java

@@ -51,7 +51,6 @@ import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -310,7 +309,7 @@ public class ConfigManagerWordlistServlet extends AbstractPwmServlet
 
     @Value
     @Builder
-    public static class WordlistDataBean implements Serializable
+    public static class WordlistDataBean
     {
         private List<DisplayElement> presentableData;
         private boolean allowUpload;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/admin/system/SystemAdminCertificatesServlet.java

@@ -47,7 +47,6 @@ import password.pwm.ws.server.RestResultBean;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
-import java.io.Serializable;
 import java.security.cert.X509Certificate;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -188,7 +187,7 @@ public class SystemAdminCertificatesServlet extends AbstractPwmServlet
 
     @Value
     @Builder
-    public static class CertificateDebugDataItem implements Serializable
+    public static class CertificateDebugDataItem
     {
         private String menuLocation;
         private String subject;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java

@@ -615,7 +615,7 @@ public class ConfigEditorServlet extends ControlledPwmServlet
         else
         {
             final Map<String, String> testParams = pwmRequest.readBodyAsJsonStringMap();
-            final SmsItemBean testSmsItem = new SmsItemBean( testParams.get( "to" ), testParams.get( "message" ), pwmRequest.getLabel() );
+            final SmsItemBean testSmsItem = new SmsItemBean( testParams.get( "to" ), testParams.get( "message" ) );
             try
             {
                 final PwmHttpClientResponse responseBody = SmsQueueService.sendDirectMessage(

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServletUtils.java

@@ -59,7 +59,6 @@ import password.pwm.ws.server.RestResultBean;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -371,7 +370,7 @@ public class ConfigEditorServletUtils
             final SettingUIFunction function = ( SettingUIFunction ) implementingClass.getDeclaredConstructor().newInstance();
             final StoredConfigurationModifier modifier = StoredConfigurationModifier.newModifier( configManagerBean.getStoredConfiguration() );
 
-            final Serializable result = timeoutExecutor( pwmRequest,
+            final Object result = timeoutExecutor( pwmRequest,
                     () -> function.provideFunction( pwmRequest, modifier, key, extraData ) );
 
             configManagerBean.setStoredConfiguration( modifier.newStoredConfiguration() );

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/ReadSettingResponse.java

@@ -24,13 +24,12 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.bean.UserIdentity;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.Map;
 
 @Value
 @Builder
-public class ReadSettingResponse implements Serializable
+public class ReadSettingResponse
 {
     private final boolean isDefault;
     private final String key;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/SearchResultItem.java

@@ -27,11 +27,10 @@ import password.pwm.config.stored.StoredConfigKey;
 import password.pwm.config.stored.StoredConfiguration;
 import password.pwm.config.stored.StoredConfigurationUtil;
 
-import java.io.Serializable;
 import java.util.Locale;
 
 @Value
-class SearchResultItem implements Serializable
+class SearchResultItem
 {
     private final String category;
     private final String value;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/data/CategoryInfo.java

@@ -24,12 +24,11 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.config.PwmSettingCategory;
 
-import java.io.Serializable;
 import java.util.Locale;
 
 @Value
 @Builder
-public class CategoryInfo implements Serializable
+public class CategoryInfo
 {
     private int level;
     private String key;

+ 1 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/data/LocaleInfo.java

@@ -24,11 +24,9 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.i18n.PwmLocaleBundle;
 
-import java.io.Serializable;
-
 @Value
 @Builder
-public class LocaleInfo implements Serializable
+public class LocaleInfo
 {
     public String description;
     public String key;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeItem.java

@@ -23,12 +23,11 @@ package password.pwm.http.servlet.configeditor.data;
 import lombok.Builder;
 import lombok.Value;
 
-import java.io.Serializable;
 import java.util.List;
 
 @Value
 @Builder( toBuilder = true )
-public class NavTreeItem implements Serializable
+public class NavTreeItem
 {
     private final String id;
     private final String name;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/data/NavTreeSettings.java

@@ -31,13 +31,12 @@ import password.pwm.http.servlet.configeditor.DomainManageMode;
 import password.pwm.http.servlet.configeditor.DomainStateReader;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.util.Locale;
 import java.util.Map;
 
 @Value
 @Builder
-public class NavTreeSettings implements Serializable
+public class NavTreeSettings
 {
     private final boolean modifiedSettingsOnly;
 

+ 1 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/data/SettingData.java

@@ -24,12 +24,11 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.config.PwmSettingTemplateSet;
 
-import java.io.Serializable;
 import java.util.Map;
 
 @Value
 @Builder
-public class SettingData implements Serializable
+public class SettingData
 {
     private final Map<String, SettingInfo> settings;
     private final Map<String, CategoryInfo> categories;
@@ -37,5 +36,4 @@ public class SettingData implements Serializable
     private final Object ldapProfileIds;
     private final PwmSettingTemplateSet currentTemplate;
     private final VarData var;
-
 }

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/data/SettingInfo.java

@@ -30,7 +30,6 @@ import password.pwm.config.PwmSettingSyntax;
 import password.pwm.config.PwmSettingTemplateSet;
 import password.pwm.util.java.CollectionUtil;
 
-import java.io.Serializable;
 import java.util.Collections;
 import java.util.Locale;
 import java.util.Map;
@@ -38,7 +37,7 @@ import java.util.Set;
 
 @Value
 @Builder
-public class SettingInfo implements Serializable
+public class SettingInfo
 {
     private String key;
     private String label;

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configeditor/data/VarData.java

@@ -24,12 +24,11 @@ import lombok.Builder;
 import lombok.Value;
 import password.pwm.config.PwmSettingTemplateSet;
 
-import java.io.Serializable;
 import java.util.List;
 
 @Value
 @Builder
-public class VarData implements Serializable
+public class VarData
 {
     private final List<String> ldapProfileIds;
     private final List<String> domainIds;

+ 2 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/function/ActionCertViewerFunction.java

@@ -29,7 +29,6 @@ import password.pwm.util.json.JsonFactory;
 import password.pwm.util.secure.X509CertInfo;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -37,7 +36,7 @@ import java.util.stream.Collectors;
 public class ActionCertViewerFunction implements SettingUIFunction
 {
     @Override
-    public Serializable provideFunction(
+    public Object provideFunction(
             final PwmRequest pwmRequest,
             final StoredConfigurationModifier modifier,
             final StoredConfigKey key,
@@ -49,7 +48,7 @@ public class ActionCertViewerFunction implements SettingUIFunction
         final int webActionIter = Integer.parseInt( parsedExtraData.get( "webActionIter" ).toString() );
 
         final List<Map<String, String>> certificateInfos = makeCertDebugMap( key, modifier, iteration, webActionIter );
-        return ( Serializable ) certificateInfos;
+        return List.copyOf( certificateInfos );
     }
 
     /**

+ 2 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/function/RemoteWebServiceCertViewerFunction.java

@@ -29,7 +29,6 @@ import password.pwm.util.json.JsonFactory;
 import password.pwm.util.secure.X509CertInfo;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -37,7 +36,7 @@ import java.util.stream.Collectors;
 public class RemoteWebServiceCertViewerFunction implements SettingUIFunction
 {
     @Override
-    public Serializable provideFunction(
+    public Object provideFunction(
             final PwmRequest pwmRequest,
             final StoredConfigurationModifier modifier,
             final StoredConfigKey key,
@@ -48,7 +47,7 @@ public class RemoteWebServiceCertViewerFunction implements SettingUIFunction
         final int iteration = Integer.parseInt( parsedExtraData.get( "iteration" ).toString() );
 
         final List<Map<String, String>> certificateInfos = makeCertDebugMap( key, modifier, iteration );
-        return ( Serializable ) certificateInfos;
+        return List.copyOf( certificateInfos );
     }
 
     /**

+ 1 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/function/SettingUIFunction.java

@@ -26,14 +26,12 @@ import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.http.PwmRequest;
 
-import java.io.Serializable;
-
 /**
  * SettingUIFunction implementations can be invoked in the Configuration Editor UI and provide arbitrary, setting-specific functions.
  */
 public interface SettingUIFunction
 {
-    Serializable provideFunction(
+    Object provideFunction(
             PwmRequest pwmRequest,
             StoredConfigurationModifier modifier,
             StoredConfigKey key,

+ 2 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/function/UserMatchViewerFunction.java

@@ -53,7 +53,6 @@ import password.pwm.util.java.PwmTimeUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
 
-import java.io.Serializable;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -67,7 +66,7 @@ public class UserMatchViewerFunction implements SettingUIFunction
     private static final PwmLogger LOGGER = PwmLogger.forClass( UserMatchViewerFunction.class );
 
     @Override
-    public Serializable provideFunction(
+    public Object provideFunction(
             final PwmRequest pwmRequest,
             final StoredConfigurationModifier storedConfiguration,
             final StoredConfigKey key,
@@ -203,7 +202,7 @@ public class UserMatchViewerFunction implements SettingUIFunction
 
     @Value
     @Builder
-    public static class UserMatchViewerResults implements Serializable
+    public static class UserMatchViewerResults
     {
         private Collection<UserIdentity> users;
         private boolean sizeExceeded;

+ 2 - 3
server/src/main/java/password/pwm/http/servlet/configeditor/function/X509CertViewerFunction.java

@@ -28,7 +28,6 @@ import password.pwm.http.PwmRequest;
 import password.pwm.util.secure.X509CertInfo;
 import password.pwm.util.secure.X509Utils;
 
-import java.io.Serializable;
 import java.security.cert.X509Certificate;
 import java.util.List;
 import java.util.Map;
@@ -37,7 +36,7 @@ import java.util.stream.Collectors;
 public class X509CertViewerFunction implements SettingUIFunction
 {
     @Override
-    public Serializable provideFunction(
+    public Object provideFunction(
             final PwmRequest pwmRequest,
             final StoredConfigurationModifier modifier,
             final StoredConfigKey key,
@@ -45,7 +44,7 @@ public class X509CertViewerFunction implements SettingUIFunction
     )
     {
         final List<Map<String, String>> certificateInfos = makeCertDebugMap( key, modifier );
-        return ( Serializable ) certificateInfos;
+        return certificateInfos;
     }
 
     /**

+ 1 - 2
server/src/main/java/password/pwm/http/servlet/configguide/ConfigGuideServlet.java

@@ -83,7 +83,6 @@ import password.pwm.ws.server.rest.bean.PublicHealthRecord;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
-import java.io.Serializable;
 import java.net.URI;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -547,7 +546,7 @@ public class ConfigGuideServlet extends ControlledPwmServlet
 
             if ( pwmSetting == PwmSetting.CHALLENGE_RANDOM_CHALLENGES )
             {
-                configGuideBean.getFormData().put( ConfigGuideFormField.CHALLENGE_RESPONSE_DATA, JsonFactory.get().serialize( (Serializable) storedValue.toNativeObject() ) );
+                configGuideBean.getFormData().put( ConfigGuideFormField.CHALLENGE_RESPONSE_DATA, JsonFactory.get().serialize( storedValue.toNativeObject() ) );
             }
         }
         catch ( final Exception e )

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است