A filter can be useful in multiple scenarios, for example when upgrading to newer Java
versions which use the Java Platform Module System (JPMS). A filter then allows to prevent making inaccessible members accessible, even if the used
Java version might still allow illegal access (but logs a warning), or if java command
line arguments are used to open the inaccessible packages to other parts of the application. This
interface defines some convenience filters for this task, such as BLOCK_INACCESSIBLE_JAVA.
A filter can also be useful to prevent mixing model classes of a project with other non-model classes; the filter could block all reflective access to non-model classes.
A reflection access filter is similar to an ExclusionStrategy with the major
difference that a filter will cause an exception to be thrown when access is disallowed while an
exclusion strategy just skips fields and classes.
GsonBuilder#addReflectionAccessFilter(ReflectionAccessFilter)
| Modifier and Type | Class and Description |
|---|---|
| public static enum | ReflectionAccessFilter.
Result of a filter check. |
| Modifier and Type | Field and Description |
|---|---|
| public static final ReflectionAccessFilter | BLOCK_ALL_ANDROID
Blocks all reflection access to members of standard Android classes. |
| public static final ReflectionAccessFilter | BLOCK_ALL_JAVA
Blocks all reflection access to members of standard Java classes. |
| public static final ReflectionAccessFilter | BLOCK_ALL_PLATFORM
Blocks all reflection access to members of classes belonging to programming language platforms, such as Java, Android, Kotlin or Scala. |
| public static final ReflectionAccessFilter | BLOCK_INACCESSIBLE_JAVA
Blocks all reflection access to members of standard Java classes which are not accessible by default. |
| Modifier and Type | Method and Description |
|---|---|
| public ReflectionAccessFilter. |
| BLOCK_ALL_ANDROID | back to summary |
|---|---|
| public static final ReflectionAccessFilter BLOCK_ALL_ANDROID Blocks all reflection access to members of standard Android classes. If this filter encounters a class other than a standard Android class it returns This filter is mainly intended to prevent depending on implementation details of the Android platform. Note that this filter might not cover all standard Android classes. Currently only classes
in an
| |
| BLOCK_ALL_JAVA | back to summary |
|---|---|
| public static final ReflectionAccessFilter BLOCK_ALL_JAVA Blocks all reflection access to members of standard Java classes. If this filter encounters a class other than a standard Java class it returns This filter is mainly intended to prevent depending on implementation details of the Java platform and to help applications prepare for upgrading to the Java Platform Module System. Note that this filter might not cover all standard Java classes. Currently only classes in a
| |
| BLOCK_ALL_PLATFORM | back to summary |
|---|---|
| public static final ReflectionAccessFilter BLOCK_ALL_PLATFORM Blocks all reflection access to members of classes belonging to programming language platforms, such as Java, Android, Kotlin or Scala. If this filter encounters a class other than a standard platform class it returns This filter is mainly intended to prevent depending on implementation details of the platform classes. Note that this filter might not cover all platform classes. Currently it combines the
filters
| |
| BLOCK_INACCESSIBLE_JAVA | back to summary |
|---|---|
| public static final ReflectionAccessFilter BLOCK_INACCESSIBLE_JAVA Blocks all reflection access to members of standard Java classes which are not accessible by
default. However, reflection access is still allowed for classes for which all fields are
accessible and which have an accessible no-args constructor (or for which an If this filter encounters a class other than a standard Java class it returns This filter is mainly intended to help enforcing the access checks of Java Platform Module System. It allows detecting illegal access, even if the used Java version would only log a warning, or is configured to open packages for reflection. However, this filter only works for Java 9 and higher, when using an older Java version its functionality will be limited. Note that this filter might not cover all standard Java classes. Currently only classes in a
| |
| check | back to summary |
|---|---|
| public ReflectionAccessFilter. Checks if reflection access should be allowed for a class.
| |
| Modifier and Type | Field and Description |
|---|---|
| public static final ReflectionAccessFilter. | ALLOW
Reflection access for the class is allowed. |
| public static final ReflectionAccessFilter. | BLOCK_ALL
Blocks all reflection access for the class. |
| public static final ReflectionAccessFilter. | BLOCK_INACCESSIBLE
Blocks reflection access if a member of the class is not accessible by default and would have to be made accessible. |
| public static final ReflectionAccessFilter. | INDECISIVE
The filter is indecisive whether reflection access should be allowed. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static ReflectionAccessFilter. | |
| public static ReflectionAccessFilter. |
| ALLOW | back to summary |
|---|---|
| public static final ReflectionAccessFilter. Reflection access for the class is allowed. Note that this does not affect the Java access checks in any way, it only permits Gson to try using reflection for a class. The Java runtime might still deny such access. | |
| BLOCK_ALL | back to summary |
|---|---|
| public static final ReflectionAccessFilter. Blocks all reflection access for the class. Other means for serializing and deserializing the
class, such as a | |
| BLOCK_INACCESSIBLE | back to summary |
|---|---|
| public static final ReflectionAccessFilter. Blocks reflection access if a member of the class is not accessible by default and would have
to be made accessible. This is unaffected by any Note that this only works for Java 9 and higher, for older Java versions its
functionality will be limited and it might behave like This result type is mainly intended to help enforce the access checks of the Java Platform Module System. It allows detecting illegal access, even if the used Java version would only log a warning, or is configured to open packages for reflection using command line arguments.
| |
| INDECISIVE | back to summary |
|---|---|
| public static final ReflectionAccessFilter. The filter is indecisive whether reflection access should be allowed. The next registered
filter will be consulted to get the result. If there is no next filter, this result acts like
| |
| FilterResult | back to summary |
|---|---|
| private FilterResult() | |
| valueOf | back to summary |
|---|---|
| public static ReflectionAccessFilter. | |
| values | back to summary |
|---|---|
| public static ReflectionAccessFilter. | |