This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit 595f2273e69b50e511b341c99da68374854b161f
Author: James Bognar <[email protected]>
AuthorDate: Tue May 12 10:20:26 2026 -0400

    refactor: move MarshallingInterceptor to commons.bean.BeanInterceptor 
(Phase 5a of bean-layer split)
    
    The bean-interceptor type is a bean-modeling concern (intercepts bean
    getter/setter calls, no marshalling-specific dependencies), so it belongs
    in the commons.bean package alongside @BeanType, @BeanProp, @BeanIgnore,
    @BeanConfig, BasicPropertyNamer, etc.
    
    Reverts the 9.5 BeanInterceptor -> MarshallingInterceptor rename and
    moves the class from juneau-marshall (org.apache.juneau.swap) into
    juneau-commons (org.apache.juneau.commons.bean) in one step. ~50 files
    updated to reference the new location; @Marshalled.interceptor() now
    takes Class<? extends BeanInterceptor<?>>.
    
    The remainder of Phase 5 -- moving BeanMap, BeanMeta, BeanPropertyMeta,
    BeanMapEntry, BeanPropertyValue, BeanPropertyConsumer,
    BeanProxyInvocationHandler, and BeanMetaFiltered to commons.bean --
    requires untangling ClassMeta / MarshallingContext / ObjectSwap /
    BeanRegistry dependencies (~140 cross-references across ~4170 lines) and
    is tracked in TODO-5 with a concrete strategy.
    
    Co-authored-by: Cursor <[email protected]>
---
 .../juneau/commons/bean/BeanInterceptor.java}      |  20 +--
 .../java/org/apache/juneau/jena/RdfParser.java     |   2 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |   2 +-
 .../java/org/apache/juneau/MarshalledFilter.java   |  18 +--
 .../java/org/apache/juneau/MarshallingContext.java |   6 +-
 .../org/apache/juneau/MarshallingContextable.java  |   6 +-
 .../apache/juneau/MarshallingTraverseContext.java  |   2 +-
 .../org/apache/juneau/annotation/Marshalled.java   |   7 +-
 .../juneau/annotation/MarshalledAnnotation.java    |   9 +-
 .../main/java/org/apache/juneau/csv/CsvParser.java |   2 +-
 .../java/org/apache/juneau/csv/CsvSerializer.java  |   2 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |   2 +-
 .../java/org/apache/juneau/html/HtmlParser.java    |   2 +-
 .../juneau/html/HtmlSchemaDocSerializer.java       |   2 +-
 .../apache/juneau/html/HtmlSchemaSerializer.java   |   2 +-
 .../org/apache/juneau/html/HtmlSerializer.java     |   2 +-
 .../juneau/html/HtmlStrippedDocSerializer.java     |   2 +-
 .../java/org/apache/juneau/json/JsonParser.java    |   2 +-
 .../apache/juneau/json/JsonSchemaSerializer.java   |   2 +-
 .../org/apache/juneau/json/JsonSerializer.java     |   2 +-
 .../java/org/apache/juneau/json5/Json5Parser.java  |   2 +-
 .../org/apache/juneau/json5/Json5Serializer.java   |   2 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   2 +-
 .../org/apache/juneau/markdown/MarkdownParser.java |   2 +-
 .../apache/juneau/markdown/MarkdownSerializer.java |   2 +-
 .../org/apache/juneau/msgpack/MsgPackParser.java   |   2 +-
 .../apache/juneau/msgpack/MsgPackSerializer.java   |   2 +-
 .../java/org/apache/juneau/oapi/OpenApiParser.java |   2 +-
 .../org/apache/juneau/oapi/OpenApiSerializer.java  |   2 +-
 .../apache/juneau/parser/InputStreamParser.java    |   2 +-
 .../main/java/org/apache/juneau/parser/Parser.java |   2 +-
 .../org/apache/juneau/parser/ReaderParser.java     |   2 +-
 .../apache/juneau/plaintext/PlainTextParser.java   |   2 +-
 .../juneau/plaintext/PlainTextSerializer.java      |   2 +-
 .../juneau/serializer/OutputStreamSerializer.java  |   2 +-
 .../org/apache/juneau/serializer/Serializer.java   |   2 +-
 .../apache/juneau/serializer/WriterSerializer.java |   2 +-
 .../org/apache/juneau/soap/SoapXmlSerializer.java  |   2 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |   2 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |   2 +-
 .../juneau/urlencoding/UrlEncodingParser.java      |   2 +-
 .../juneau/urlencoding/UrlEncodingSerializer.java  |   2 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   2 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |   2 +-
 .../java/org/apache/juneau/yaml/YamlParser.java    |   2 +-
 .../org/apache/juneau/yaml/YamlSerializer.java     |   2 +-
 .../org/apache/juneau/rest/client/RestClient.java  |   2 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |   2 +-
 .../annotation/MarshalledAnnotation_Test.java      |   2 +-
 .../org/apache/juneau/jena/RdfParser_Test.java     |   2 +-
 .../org/apache/juneau/jena/RdfSerializer_Test.java |   2 +-
 .../RestClient_Config_MarshallingContext_Test.java |   2 +-
 todo/TODO-5-bean-runtime-types-to-commons.md       | 178 +++++++++++++++++++++
 todo/TODO.md                                       |   2 +
 54 files changed, 260 insertions(+), 78 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MarshallingInterceptor.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanInterceptor.java
similarity index 85%
rename from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MarshallingInterceptor.java
rename to 
juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanInterceptor.java
index c88f831624..9d037aacb3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MarshallingInterceptor.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanInterceptor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.juneau.swap;
+package org.apache.juneau.commons.bean;
 
 /**
  * Bean interceptor.
@@ -25,7 +25,7 @@ package org.apache.juneau.swap;
  * <h5 class='section'>Example:</h5>
  * <p class='bjava'>
  *     <jc>// Interceptor that strips out sensitive information on Address 
beans.</jc>
- *     <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
MarshallingInterceptor&lt;Address&gt; {
+ *     <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
BeanInterceptor&lt;Address&gt; {
  *
  *             <ja>@Override</ja>
  *             <jk>public</jk> Object readProperty(Address <jv>bean</jv>, 
String <jv>name</jv>, Object <jv>value</jv>) {
@@ -46,8 +46,8 @@ package org.apache.juneau.swap;
  * <p>
  * Bean interceptors are registered in the following way:
  * <ul class='javatree'>
- *     <li class='ja'>{@link org.apache.juneau.annotation.Bean#interceptor() 
@Marshalled(interceptor)}
- *     <li class='jm'>{@link 
org.apache.juneau.MarshallingContext.Builder#beanInterceptor(Class,Class)}
+ *     <li class='ja'>{@link 
org.apache.juneau.annotation.Marshalled#interceptor() @Marshalled(interceptor)}
+ *     <li class='jm'>{@code 
MarshallingContext.Builder#beanInterceptor(Class,Class)}
  * </ul>
  *
  * <h5 class='section'>Example:</h5>
@@ -66,15 +66,15 @@ package org.apache.juneau.swap;
  *
  * @param <T> The bean type.
  */
-public class MarshallingInterceptor<T> {
+public class BeanInterceptor<T> {
 
        /** Non-existent bean interceptor. */
-       public static final class Void extends MarshallingInterceptor<Object> {}
+       public static final class Void extends BeanInterceptor<Object> {}
 
        /**
         * Default reusable property filter instance.
         */
-       public static final MarshallingInterceptor<Object> DEFAULT = new 
MarshallingInterceptor<>();
+       public static final BeanInterceptor<Object> DEFAULT = new 
BeanInterceptor<>();
 
        /**
         * Property read interceptor.
@@ -85,7 +85,7 @@ public class MarshallingInterceptor<T> {
         * <h5 class='section'>Example:</h5>
         * <p class='bjava'>
         *      <jc>// Address filter that strips out sensitive 
information.</jc>
-        *      <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
MarshallingInterceptor&lt;Address&gt; {
+        *      <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
BeanInterceptor&lt;Address&gt; {
         *
         *              <jk>public</jk> Object readProperty(Address 
<jv>bean</jv>, String <jv>name</jv>, Object <jv>value</jv>) {
         *                      <jk>if</jk> 
(<js>"taxInfo"</js>.equals(<jv>name</jv>))
@@ -114,7 +114,7 @@ public class MarshallingInterceptor<T> {
         * <h5 class='section'>Example:</h5>
         * <p class='bjava'>
         *      <jc>// Address filter that strips out sensitive 
information.</jc>
-        *      <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
MarshallingInterceptor&lt;Address&gt; {
+        *      <jk>public class</jk> AddressInterceptor <jk>extends</jk> 
BeanInterceptor&lt;Address&gt; {
         *
         *              <jk>public</jk> Object writeProperty(Address 
<jv>bean</jv>, String <jv>name</jv>, Object <jv>value</jv>) {
         *                      <jk>if</jk> 
(<js>"taxInfo"</js>.equals(<jv>name</jv>) &amp;&amp; 
<js>"redacted"</js>.equals(<jv>value</jv>))
@@ -132,4 +132,4 @@ public class MarshallingInterceptor<T> {
        public Object writeProperty(T bean, String name, Object value) {
                return value;
        }
-}
\ No newline at end of file
+}
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index e3ca843ffe..c8d1e84758 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -216,7 +216,7 @@ public class RdfParser extends ReaderParser implements 
RdfMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 8eddd4cce2..0376e8d9fa 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -358,7 +358,7 @@ public class RdfSerializer extends WriterSerializer 
implements RdfMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
index f3e03db63d..4afd776776 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
@@ -74,7 +74,7 @@ import org.apache.juneau.swap.*;
  * <h5 class='section'>See Also:</h5>
  * <ul>
  *     <li class='ja'>{@link Marshalled @Marshalled}
- *     <li class='jc'>{@link MarshallingInterceptor}
+ *     <li class='jc'>{@link BeanInterceptor}
  *     <li class='jc'>{@link PropertyNamer}
  * </ul>
  */
@@ -104,7 +104,7 @@ public class MarshalledFilter {
                private boolean fluentSetters;
                private BeanInstantiator.Builder<PropertyNamer> propertyNamer = 
BeanInstantiator.of(PropertyNamer.class);
                private List<ClassInfo> dictionary;
-               private BeanInstantiator.Builder<MarshallingInterceptor> 
interceptor = BeanInstantiator.of(MarshallingInterceptor.class);
+               private BeanInstantiator.Builder<BeanInterceptor> interceptor = 
BeanInstantiator.of(BeanInterceptor.class);
 
                /**
                 * Constructor for non-bean POJO filters.
@@ -317,17 +317,17 @@ public class MarshalledFilter {
                 *
                 * <h5 class='section'>See Also:</h5><ul>
                 *      <li class='ja'>{@link Marshalled#interceptor()}
-                *      <li class='jc'>{@link MarshallingInterceptor}
+                *      <li class='jc'>{@link BeanInterceptor}
                 * </ul>
                 *
                 * @param value
                 *      The new value for this setting.
-                *      <br>The default value is {@link MarshallingInterceptor}.
+                *      <br>The default value is {@link BeanInterceptor}.
                 * @return This object.
                 */
                @SuppressWarnings("unchecked")
                public Builder interceptor(Class<?> value) {
-                       interceptor.type((Class<? extends 
MarshallingInterceptor>) value);
+                       interceptor.type((Class<? extends BeanInterceptor>) 
value);
                        return this;
                }
 
@@ -606,7 +606,7 @@ public class MarshalledFilter {
        private final boolean fluentSetters;
        private final ClassInfo implClass;
        private final ClassInfo interfaceClass;
-       private final MarshallingInterceptor interceptor;
+       private final BeanInterceptor interceptor;
        private final Set<String> properties;
        private final PropertyNamer propertyNamer;
        private final Set<String> readOnlyProperties;
@@ -636,7 +636,7 @@ public class MarshalledFilter {
                this.fluentSetters = builder.fluentSetters;
                this.propertyNamer = 
builder.propertyNamer.asOptional().orElse(null);
                this.beanDictionary = builder.dictionary == null ? list() : 
u(copyOf(builder.dictionary));
-               this.interceptor = 
builder.interceptor.asOptional().orElse(MarshallingInterceptor.DEFAULT);
+               this.interceptor = 
builder.interceptor.asOptional().orElse(BeanInterceptor.DEFAULT);
        }
 
        /**
@@ -751,7 +751,7 @@ public class MarshalledFilter {
        public boolean isUnsortedProperties() { return unsortedProperties; }
 
        /**
-        * Calls the {@link MarshallingInterceptor#readProperty(Object, String, 
Object)} method on the registered property filters.
+        * Calls the {@link BeanInterceptor#readProperty(Object, String, 
Object)} method on the registered property filters.
         *
         * @param bean The bean from which the property was read.
         * @param name The property name.
@@ -766,7 +766,7 @@ public class MarshalledFilter {
        }
 
        /**
-        * Calls the {@link MarshallingInterceptor#writeProperty(Object, 
String, Object)} method on the registered property filters.
+        * Calls the {@link BeanInterceptor#writeProperty(Object, String, 
Object)} method on the registered property filters.
         *
         * @param bean The bean from which the property was read.
         * @param name The property name.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContext.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContext.java
index 0573beb4c7..bfac213a84 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContext.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContext.java
@@ -708,7 +708,7 @@ public class MarshallingContext extends Context implements 
ConversionFinder {
                 * <h5 class='section'>Example:</h5>
                 * <p class='bjava'>
                 *      <jc>// Interceptor that strips out sensitive 
information.</jc>
-                *      <jk>public class</jk> AddressInterceptor 
<jk>extends</jk> MarshallingInterceptor&lt;Address&gt; {
+                *      <jk>public class</jk> AddressInterceptor 
<jk>extends</jk> BeanInterceptor&lt;Address&gt; {
                 *
                 *              <jk>public</jk> Object readProperty(Address 
<jv>bean</jv>, String <jv>name</jv>, Object <jv>value</jv>) {
                 *                      <jk>if</jk> 
(<js>"taxInfo"</js>.equals(<jv>name</jv>))
@@ -740,7 +740,7 @@ public class MarshallingContext extends Context implements 
ConversionFinder {
                 * </p>
                 *
                 * <h5 class='section'>See Also:</h5><ul>
-                *      <li class='jc'>{@link MarshallingInterceptor}
+                *      <li class='jc'>{@link BeanInterceptor}
                 *      <li class='ja'>{@link Bean#interceptor() 
Bean(interceptor)}
                 * </ul>
                 *
@@ -751,7 +751,7 @@ public class MarshallingContext extends Context implements 
ConversionFinder {
                 *      <br>Cannot be <jk>null</jk>.
                 * @return This object.
                 */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
BeanInterceptor<?>> value) {
                        assertArgNotNull(ARG_on, on);
                        assertArgNotNull(ARG_value, value);
                        return 
annotations(MarshalledApplyAnnotation.create(on).value(MarshalledAnnotation.create().interceptor(value).build()).build());
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContextable.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContextable.java
index 3cb72fdd8f..f40e99b15b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContextable.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingContextable.java
@@ -454,7 +454,7 @@ public abstract class MarshallingContextable extends 
Context {
                 * <h5 class='section'>Example:</h5>
                 * <p class='bjava'>
                 *      <jc>// Interceptor that strips out sensitive 
information.</jc>
-                *      <jk>public class</jk> AddressInterceptor 
<jk>extends</jk> MarshallingInterceptor&lt;Address&gt; {
+                *      <jk>public class</jk> AddressInterceptor 
<jk>extends</jk> BeanInterceptor&lt;Address&gt; {
                 *
                 *              <jk>public</jk> Object readProperty(Address 
<jv>bean</jv>, String <jv>name</jv>, Object <jv>value</jv>) {
                 *                      <jk>if</jk> 
(<js>"taxInfo"</js>.equals(<jv>name</jv>))
@@ -486,7 +486,7 @@ public abstract class MarshallingContextable extends 
Context {
                 * </p>
                 *
                 * <h5 class='section'>See Also:</h5><ul>
-                *      <li class='jc'>{@link MarshallingInterceptor}
+                *      <li class='jc'>{@link BeanInterceptor}
                 *      <li class='ja'>{@link Bean#interceptor() 
Bean(interceptor)}
                 * </ul>
                 *
@@ -497,7 +497,7 @@ public abstract class MarshallingContextable extends 
Context {
                 *      <br>Cannot be <jk>null</jk>.
                 * @return This object.
                 */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
BeanInterceptor<?>> value) {
                        bcBuilder.beanInterceptor(assertArgNotNull(ARG_on, on), 
assertArgNotNull(ARG_value, value));
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseContext.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseContext.java
index 875f2c0b66..4b67232bea 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseContext.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseContext.java
@@ -156,7 +156,7 @@ public abstract class MarshallingTraverseContext extends 
MarshallingContextable
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
index 0bcb010ddd..3f29ad86e0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
@@ -22,6 +22,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.lang.annotation.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.*;
 import org.apache.juneau.swap.*;
 
 /**
@@ -50,7 +51,7 @@ import org.apache.juneau.swap.*;
 @Retention(RUNTIME)
 @Inherited
 @SuppressWarnings({
-       "java:S1452"  // Wildcard required - Class<? extends 
MarshallingInterceptor<?>> for interceptor definition
+       "java:S1452"  // Wildcard required - Class<? extends 
BeanInterceptor<?>> for interceptor definition
 })
 public @interface Marshalled {
 
@@ -157,12 +158,12 @@ public @interface Marshalled {
         * Bean interceptors can be used to intercept calls to getters and 
setters and alter their values in transit.
         *
         * <h5 class='section'>See Also:</h5><ul>
-        *      <li class='jc'>{@link MarshallingInterceptor}
+        *      <li class='jc'>{@link BeanInterceptor}
         * </ul>
         *
         * @return The annotation value.
         */
-       Class<? extends MarshallingInterceptor<?>> interceptor() default 
MarshallingInterceptor.Void.class;
+       Class<? extends BeanInterceptor<?>> interceptor() default 
BeanInterceptor.Void.class;
 
        /**
         * An identifying name for this class.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
index 51c0fcfe74..b689aac81e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
@@ -21,6 +21,7 @@ import static 
org.apache.juneau.commons.utils.CollectionUtils.*;
 import java.lang.annotation.*;
 
 import org.apache.juneau.commons.annotation.*;
+import org.apache.juneau.commons.bean.*;
 import org.apache.juneau.swap.*;
 
 /**
@@ -47,7 +48,7 @@ public class MarshalledAnnotation {
                private String[] description = {};
                private Class<?>[] dictionary = new Class[0];
                private Class<?> implClass = void.class;
-               private Class<? extends MarshallingInterceptor<?>> interceptor 
= MarshallingInterceptor.Void.class;
+               private Class<? extends BeanInterceptor<?>> interceptor = 
BeanInterceptor.Void.class;
                private String example = "";
                private String typeName = "";
                private String typePropertyName = "";
@@ -129,7 +130,7 @@ public class MarshalledAnnotation {
                 * @param value The new value for this property.
                 * @return This object.
                 */
-               public Builder interceptor(Class<? extends 
MarshallingInterceptor<?>> value) {
+               public Builder interceptor(Class<? extends BeanInterceptor<?>> 
value) {
                        interceptor = value;
                        return this;
                }
@@ -164,7 +165,7 @@ public class MarshalledAnnotation {
 
                private final MarshalledAs as;
                private final String[] description;
-               private final Class<? extends MarshallingInterceptor<?>> 
interceptor;
+               private final Class<? extends BeanInterceptor<?>> interceptor;
                private final Class<?> implClass;
                private final Class<?>[] dictionary;
                private final String example;
@@ -204,7 +205,7 @@ public class MarshalledAnnotation {
                }
 
                @Override /* Overridden from Marshalled */
-               public Class<? extends MarshallingInterceptor<?>> interceptor() 
{
+               public Class<? extends BeanInterceptor<?>> interceptor() {
                        return interceptor;
                }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
index 1b59553c00..af669c9da0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
@@ -240,7 +240,7 @@ public class CsvParser extends ReaderParser implements 
CsvMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
index af26bfae09..006c043669 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
@@ -262,7 +262,7 @@ public class CsvSerializer extends WriterSerializer 
implements CsvMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index f6ee6d2dfa..36f23a6421 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -439,7 +439,7 @@ public class HtmlDocSerializer extends 
HtmlStrippedDocSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
index d85e0f4c53..5712a70927 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
@@ -168,7 +168,7 @@ public class HtmlParser extends XmlParser implements 
HtmlMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
index d03b9ea76f..8ef26b2455 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
@@ -358,7 +358,7 @@ public class HtmlSchemaDocSerializer extends 
HtmlDocSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
index 14044ae929..6536f5aa99 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
@@ -352,7 +352,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index 11b33d89b3..02c3ac7bdd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -436,7 +436,7 @@ public class HtmlSerializer extends XmlSerializer 
implements HtmlMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
index 25e1d799dd..d8b016680d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
@@ -228,7 +228,7 @@ public class HtmlStrippedDocSerializer extends 
HtmlSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
index 8a27228858..60e195be5f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -244,7 +244,7 @@ public class JsonParser extends ReaderParser implements 
JsonMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
index 9eb3a2b136..e62f5d9576 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
@@ -308,7 +308,7 @@ public class JsonSchemaSerializer extends JsonSerializer 
implements JsonSchemaMe
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 1c26424ccd..eb9e9125d1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -301,7 +301,7 @@ public class JsonSerializer extends WriterSerializer 
implements JsonMetaProvider
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Parser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Parser.java
index 69585603f1..f206d5046d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Parser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Parser.java
@@ -186,7 +186,7 @@ public class Json5Parser extends JsonParser {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Serializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Serializer.java
index 26d3d467fe..2c0a43f8ed 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Serializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json5/Json5Serializer.java
@@ -221,7 +221,7 @@ public class Json5Serializer extends JsonSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index 203cb8325e..fbad360ac5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -345,7 +345,7 @@ public class JsonSchemaGenerator extends 
MarshallingTraverseContext implements J
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParser.java
index 7276ac79af..aceaa8ad81 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParser.java
@@ -229,7 +229,7 @@ public class MarkdownParser extends ReaderParser implements 
MarkdownMetaProvider
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializer.java
index 6032effc96..6fa9deec64 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializer.java
@@ -261,7 +261,7 @@ public class MarkdownSerializer extends WriterSerializer 
implements MarkdownMeta
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
index 55f40e4017..f82d96277f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
@@ -188,7 +188,7 @@ public class MsgPackParser extends InputStreamParser 
implements MsgPackMetaProvi
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index 5fafa5aa9b..b1f310aa66 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -247,7 +247,7 @@ public class MsgPackSerializer extends 
OutputStreamSerializer implements MsgPack
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
index a402d0a76d..c9d28d3e7e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
@@ -161,7 +161,7 @@ public class OpenApiParser extends UonParser implements 
OpenApiMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
index 779e11dc38..80b1eaac05 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
@@ -191,7 +191,7 @@ public class OpenApiSerializer extends UonSerializer 
implements OpenApiMetaProvi
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
index 42bbddb2f2..6b80d77aba 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
@@ -169,7 +169,7 @@ public class InputStreamParser extends Parser {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index e93cd5e0ca..0b296ed0f3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -304,7 +304,7 @@ public class Parser extends MarshallingContextable {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
index de6a76a938..dce0c1f24c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -174,7 +174,7 @@ public class ReaderParser extends Parser {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index f3d726d342..56a235480b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -172,7 +172,7 @@ public class PlainTextParser extends ReaderParser 
implements PlainTextMetaProvid
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 2227c6aae3..0843512921 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -187,7 +187,7 @@ public class PlainTextSerializer extends WriterSerializer 
implements PlainTextMe
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 0fee077300..dba3a9cdeb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -179,7 +179,7 @@ public class OutputStreamSerializer extends Serializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
index 074e74debe..ce2df36a6d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -381,7 +381,7 @@ public class Serializer extends MarshallingTraverseContext {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index 1a528dea26..58bf6f8ca5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -206,7 +206,7 @@ public class WriterSerializer extends Serializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 96a8d909bc..1d92a6ffd6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -216,7 +216,7 @@ public class SoapXmlSerializer extends XmlSerializer 
implements SoapXmlMetaProvi
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index 0696375e72..cedb4cec65 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -192,7 +192,7 @@ public class UonParser extends ReaderParser implements 
HttpPartParser, UonMetaPr
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index 8e89a90853..5ba2658ab5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -334,7 +334,7 @@ public class UonSerializer extends WriterSerializer 
implements HttpPartSerialize
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index 465ecc88b7..b077461d3a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -175,7 +175,7 @@ public class UrlEncodingParser extends UonParser implements 
UrlEncodingMetaProvi
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index 9068975a12..73dded5d23 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -281,7 +281,7 @@ public class UrlEncodingSerializer extends UonSerializer 
implements UrlEncodingM
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
index 373d7d91c6..743cf5ec1e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -225,7 +225,7 @@ public class XmlParser extends ReaderParser implements 
XmlMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 7af660fd8e..6d9a45fdc1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -371,7 +371,7 @@ public class XmlSerializer extends WriterSerializer 
implements XmlMetaProvider {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParser.java
index 9211543d8b..f5a33c5e63 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParser.java
@@ -203,7 +203,7 @@ public class YamlParser extends ReaderParser {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializer.java
index 0a66e39b83..1b6a757c82 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializer.java
@@ -299,7 +299,7 @@ public class YamlSerializer extends WriterSerializer {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 412a543863..f5d6869b79 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -1441,7 +1441,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index b015630cab..8d372e2b14 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -444,7 +444,7 @@ public class MockRestClient extends RestClient implements 
HttpClientConnection {
                }
 
                @Override /* Overridden from Builder */
-               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.swap.MarshallingInterceptor<?>> value) {
+               public Builder beanInterceptor(Class<?> on, Class<? extends 
org.apache.juneau.commons.bean.BeanInterceptor<?>> value) {
                        super.beanInterceptor(on, value);
                        return this;
                }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
index 2f2f3577a9..aa63d8c863 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/annotation/MarshalledAnnotation_Test.java
@@ -28,7 +28,7 @@ import org.junit.jupiter.api.*;
 class MarshalledAnnotation_Test extends TestBase {
 
        private static class X1 {}
-       private  static class X2 extends 
MarshallingInterceptor<MarshalledAnnotation_Test> {}
+       private  static class X2 extends 
BeanInterceptor<MarshalledAnnotation_Test> {}
 
        
//------------------------------------------------------------------------------------------------------------------
        // Basic tests
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/jena/RdfParser_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/jena/RdfParser_Test.java
index 07ad27cabd..5eab3678b9 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/jena/RdfParser_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/jena/RdfParser_Test.java
@@ -280,7 +280,7 @@ class RdfParser_Test extends TestBase {
                        
assertNotNull(RdfParser.create().marshallingContext(MarshallingContext.DEFAULT).build());
                        
assertNotNull(RdfParser.create().marshallingContext(MarshallingContext.create()).build());
                        
assertNotNull(RdfParser.create().beanDictionary(D01_DictBean.class).build());
-                       
assertNotNull(RdfParser.create().beanInterceptor(String.class, 
(Class)MarshallingInterceptor.class).build());
+                       
assertNotNull(RdfParser.create().beanInterceptor(String.class, 
(Class)BeanInterceptor.class).build());
                        
assertNotNull(RdfParser.create().beanMapPutReturnsOldValue().build());
                }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/jena/RdfSerializer_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/jena/RdfSerializer_Test.java
index cbef68d649..50447d20b0 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/jena/RdfSerializer_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/jena/RdfSerializer_Test.java
@@ -165,7 +165,7 @@ class RdfSerializer_Test extends TestBase {
                        "rawtypes" // (Class) cast required by beanInterceptor 
API
                })
                @Test void b04_beanInterceptor() {
-                       
assertNotNull(RdfSerializer.create().beanInterceptor(String.class, 
(Class)MarshallingInterceptor.class).build());
+                       
assertNotNull(RdfSerializer.create().beanInterceptor(String.class, 
(Class)BeanInterceptor.class).build());
                }
 
                @Test void b05_beanMapPutReturnsOldValue() {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_MarshallingContext_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_MarshallingContext_Test.java
index fd10494d0f..15e434c370 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_MarshallingContext_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_MarshallingContext_Test.java
@@ -792,7 +792,7 @@ class RestClient_Config_MarshallingContext_Test extends 
TestBase {
                }
        }
 
-       public static class A30b extends MarshallingInterceptor<A30a> {
+       public static class A30b extends BeanInterceptor<A30a> {
                static boolean getterCalled,setterCalled;
                @Override
                public Object readProperty(A30a bean,String name,Object value) {
diff --git a/todo/TODO-5-bean-runtime-types-to-commons.md 
b/todo/TODO-5-bean-runtime-types-to-commons.md
new file mode 100644
index 0000000000..d6f418a8e7
--- /dev/null
+++ b/todo/TODO-5-bean-runtime-types-to-commons.md
@@ -0,0 +1,178 @@
+# TODO-5 — Move bean-modeling runtime types (`BeanMap`, `BeanMeta`, 
`BeanPropertyMeta`, …) into `commons.bean` (remainder of Phase 5)
+
+This is the remaining work from **Phase 5 of the bean-layer split**. Phase 5a 
(the `MarshallingInterceptor` → `commons.bean.BeanInterceptor` move+rename) 
shipped in the same commit that created this plan. The big runtime types still 
live in `juneau-marshall` because they are deeply entangled with `ClassMeta` / 
`MarshallingContext` / `ObjectSwap` / `BeanRegistry`, and untangling them is 
the bulk of the work.
+
+---
+
+## Goal
+
+Move these eight `BeanXxx` runtime types out of `org.apache.juneau` (in 
`juneau-marshall`) into `org.apache.juneau.commons.bean` (in `juneau-commons`) 
so the **bean-modeling runtime** is independently usable without dragging in 
the full marshalling stack:
+
+1. `BeanMap.java` (~727 lines)
+2. `BeanMapEntry.java` (~129 lines)
+3. `BeanMeta.java` (~1547 lines)
+4. `BeanMetaFiltered.java` (~49 lines)
+5. `BeanPropertyMeta.java` (~1423 lines)
+6. `BeanPropertyValue.java` (~120 lines)
+7. `BeanPropertyConsumer.java` (~23 lines)
+8. `BeanProxyInvocationHandler.java` (~156 lines)
+
+Total: ~4,170 lines of code with ~140 cross-references to marshalling-aware 
types (`ClassMeta`, `MarshallingContext`, `ObjectSwap`, `BeanRegistry`, etc.).
+
+---
+
+## Why Phase 5 wasn't fully landed in one commit
+
+A first-pass survey revealed that the dependencies are too tangled to do in a 
single sweep without risking a broken build. The shape of the entanglement:
+
+### `BeanPropertyMeta` (74 marshalling refs)
+- `BeanPropertyMeta.Builder` carries a `MarshallingContext bc` field used 
everywhere.
+- Carries `ClassMeta<?> rawTypeMeta`, `ClassMeta<?> typeMeta`, `ObjectSwap 
swap`, `BeanRegistry beanRegistry`.
+- `get(BeanMap, String)` / `set(BeanMap, String, Object)` paths apply 
`ObjectSwap` transforms inline.
+- Constructor-arg detection reads `MarshallingContext.getBeanStore()`.
+- Property-type resolution flows through 
`MarshallingContext.resolveClassMeta(...)`.
+
+### `BeanMeta` (26 marshalling refs)
+- `marshallingContext = cm.getMarshallingContext()` is the central field; 
settings used:
+  - `isFindFluentSetters()`, `isBeansRequireSerializable()`, 
`isBeansRequireDefaultConstructor()`, `isBeansRequireSomeProperties()`, 
`isUnsortedProperties()`, `isIgnoreTransientFields()`, 
`isUseJavaBeanIntrospector()`, `isUseInterfaceProxies()`, `isNotABean()`
+  - `getBeanClassVisibility()`, `getBeanConstructorVisibility()`, 
`getBeanFieldVisibility()`, `getBeanMethodVisibility()`
+  - `getPropertyNamer()`, `getBeanStore()`, `getAnnotationProvider()`
+  - `string()` returns a `ClassMeta<String>` used to seed a property meta.
+- `ClassMeta` is used for `classMeta.inner()`, `classMeta.isMemberClass()`, 
`classMeta.isAnonymousClass()`, `classMeta.isAssignableTo(...)`, 
`classMeta.getRecordComponents()`, `classMeta.getProxyInvocationHandler()`, 
`classMeta.getClassLoader()`, plus `cm.getModifiers()`.
+
+### `BeanMap` (29 marshalling refs)
+- Constructed by `MarshallingSession.toBeanMap(...)`.
+- `get`/`put` go through `MarshallingSession` swap-aware property access.
+- Holds a back-pointer to its session and uses it for type narrowing.
+
+### `BeanProxyInvocationHandler` (5 refs), `BeanMapEntry` (3), 
`BeanPropertyValue` (4), `BeanMetaFiltered` (1)
+- All transitively reference `ClassMeta` and/or `MarshallingContext`.
+
+### Other affected types that stay in `juneau-marshall`
+- `BeanRegistry` (polymorphic dispatch — marshalling concern)
+- `BeanDictionaryMap`, `BeanDictionaryList` (same)
+- `MarshalledFilter` (reads marshalling-only annotation attributes; 
bean-modeling attributes now read via `commons.bean` annotation processors)
+- `MarshallingContext`, `MarshallingSession` (stay; `MarshallingContext` will 
compose a new `BeanConfigContext` POJO)
+- `ClassMeta` (marshalling-aware type metadata; will *consume* a 
`commons.bean.BeanMeta` after the move)
+
+---
+
+## Strategy
+
+The whole point is to make `commons.bean` self-contained, so the untangling 
has to address every leaf of the dependency graph. Recommended sequencing:
+
+### Step 1 — Introduce `BeanConfigContext` (runtime POJO) in `commons.bean`
+
+Create 
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanConfigContext.java`
 as a **plain immutable POJO** with builder. Suggested name: 
**`BeanConfigContext`** (not `BeanConfig` — that name is already taken by the 
existing annotation in the same package from Phase 3). Alternatives if 
`BeanConfigContext` reads awkwardly at use sites: `BeanModelContext`, 
`BeanIntrospectionConfig`.
+
+Carries:
+- `Visibility beanClassVisibility`, `Visibility beanConstructorVisibility`, 
`Visibility beanFieldVisibility`, `Visibility beanMethodVisibility`
+- `boolean findFluentSetters`
+- `boolean sortProperties`, `Set<Class<?>> unsortedProperties` (or equivalent)
+- `PropertyNamer propertyNamer`
+- `boolean beansRequireSomeProperties`, `boolean 
beansRequireDefaultConstructor`, `boolean beansRequireSerializable`, `boolean 
beansRequireSettersForGetters`
+- `boolean useJavaBeanIntrospector`, `boolean useInterfaceProxies`, `boolean 
ignoreTransientFields`
+- `boolean ignoreUnknownBeanProperties`, `boolean ignoreMissingSetters`
+- A lambda/predicate for `isNotABean(Class<?>)`
+- Reference to a commons-compatible `BeanStore` (already exists at 
`commons.inject.BeanInstantiator` — confirm scope)
+- Reference to a commons-compatible `AnnotationProvider` (need to confirm 
where this currently lives — probably `commons.reflect`)
+
+`MarshallingContext` retains all these settings (they're already there), and 
composes (or delegates to) a `BeanConfigContext` view so the marshalling layer 
reads them transparently. `MarshallingContext.Builder` produces a 
`BeanConfigContext` snapshot on `build()`.
+
+### Step 2 — Replace `ClassMeta<T>` with `ClassInfo`
+
+`BeanMeta` and `BeanPropertyMeta` use `ClassMeta` for: `inner()`, 
`isMemberClass()`, `isAnonymousClass()`, `isAssignableTo(...)`, 
`isInterface()`, `isRecord()`, `getRecordComponents()`, `getModifiers()`, 
`getClassLoader()`. **All of these are pure reflection** and already available 
on `ClassInfo`. Swap them.
+
+Two `ClassMeta`-only methods used by `BeanMeta`:
+- `classMeta.getProxyInvocationHandler()` — used to build the proxy when 
wrapping an interface. Move this responsibility into `BeanMeta` itself or to a 
hook in `BeanConfigContext`. `BeanProxyInvocationHandler` already takes a 
`BeanMeta<T>`; the construction site is the only thing that needs to change.
+- `cm.getMarshallingContext().string()` — used as the raw type for the 
synthetic `_type` property. After the move, store a plain `Class<String>` or 
`ClassInfo` and let the marshalling layer wrap that into a `ClassMeta` if it 
needs to.
+
+### Step 3 — Swap-aware logic in `BeanPropertyMeta`
+
+Recommendation (a): **Remove swap-aware get/set in `BeanPropertyMeta`**. The 
marshalling layer (already in `MarshallingSession`) applies swaps externally — 
`BeanPropertyMeta` does raw getter/setter invocation only. This keeps the bean 
model lean.
+
+If consumers still want a swap-aware extension point, expose two 
`BiFunction<Object,Object,Object>` callbacks on `BeanPropertyMeta` (or a small 
`BeanPropertyTransform` interface) that default to identity. The marshalling 
layer installs swap-aware callbacks at session construction.
+
+### Step 4 — `BeanMap.get/put` decoupling
+
+Same idea: after the move, `BeanMap.get`/`put` do raw property access (calling 
`BeanPropertyMeta`'s raw getter/setter). `MarshallingSession` wraps a `BeanMap` 
for serialization and applies swaps externally per property as needed.
+
+### Step 5 — `BeanRegistry` lives in `juneau-marshall` (unchanged)
+
+`BeanRegistry` is a marshalling concern (polymorphic dispatch via 
`@Marshalled(typeName=...)` / `@Marshalled(dictionary=...)`). After the move, 
`BeanPropertyMeta` in `commons.bean` does **not** carry a `BeanRegistry` field. 
Instead:
+- The bean-model `BeanPropertyMeta` exposes the raw `@BeanType` / `@BeanProp` 
metadata.
+- The marshalling layer reads `@Marshalled` dictionary metadata separately and 
pairs it with the bean property via a `MarshalledPropertyMeta` (new) or a 
side-map keyed by `BeanPropertyMeta`.
+
+### Step 6 — `BeanMeta` is constructed by both `ClassMeta` and direct 
`BeanConfigContext` callers
+
+After the move:
+- A direct `commons.bean` consumer does `BeanMeta.of(MyClass.class, 
BeanConfigContext.DEFAULT)`.
+- `ClassMeta` does the same internally and stores the resulting `BeanMeta` as 
a member.
+
+This makes `ClassMeta` a *consumer* of `BeanMeta` rather than its creator.
+
+### Step 7 — `ExtendedBeanMeta` (marshalling-side `BeanMeta` extension) stays
+
+`ExtendedBeanMeta` (and per-format extensions like `XmlBeanMeta`, 
`RdfBeanMeta`, `HtmlBeanMeta`) currently extend or compose `BeanMeta`. Re-check 
whether they need to follow `BeanMeta` to `commons.bean` (probably not — 
they're marshalling-aware and stay).
+
+### Step 8 — Test fallout
+
+- `BeanMap_Test`, `BeanMeta_Test`, `AnnotationInheritance_Test`, plus any test 
that imports `org.apache.juneau.BeanMap`/`BeanMeta`/`BeanPropertyMeta` needs an 
import update (rename `org.apache.juneau.BeanMap` to 
`org.apache.juneau.commons.bean.BeanMap` etc.).
+- Many tests use these types via the unqualified name from inside 
`org.apache.juneau` — those need explicit imports added.
+
+### Step 9 — Reference sweep across the repo
+
+Estimated reference counts (from a survey before Phase 5a):
+- ~50 files reference `BeanMeta` directly
+- ~50 files reference `BeanMap` directly
+- ~50 files reference `BeanPropertyMeta` directly
+- Lots of overlap, but expect 80–120 unique files to need import updates (most 
are inside `juneau-marshall` and currently use the in-package short name).
+- Plus `juneau-docs` (release notes, topic pages).
+
+### Step 10 — Module dependency check
+
+`juneau-commons/pom.xml` must NOT add a dependency on `juneau-marshall`. 
Verify by building `juneau-commons` standalone after the move:
+```bash
+cd juneau-core/juneau-commons && mvn clean compile
+```
+
+---
+
+## Build verification
+
+Build module-by-module as you go. Don't try to move everything then build:
+
+```bash
+# After each set of changes
+python3 scripts/test.py --build-only
+# Periodically
+python3 scripts/test.py --full
+```
+
+---
+
+## Commit message
+
+`refactor: move BeanMap/BeanMeta/BeanPropertyMeta runtime types to 
commons.bean (Phase 5 of bean-layer split)`
+
+---
+
+## Risks and open questions
+
+1. **`AnnotationProvider`** — currently lives in `juneau-marshall` 
(`org.apache.juneau.commons.reflect.AnnotationProvider`? need to verify exact 
location and module). If it's already in `commons`, great. If not, it has to 
move first.
+2. **`BeanStore`** — `commons.inject` has `BeanInstantiator`. Is that enough 
for `BeanMeta`'s constructor-resolution path, or does it need the richer 
`BeanStore` that lives in `juneau-marshall`?
+3. **`ObjectSwap` removal from `BeanPropertyMeta`** — there are likely a 
handful of test cases that exercise swap-aware `BeanMap.get`/`put` directly. 
They will need to be rewritten to go through a `MarshallingSession`.
+4. **`@Marshalled(properties=…)` / `@Marshalled(dictionary=…)`** reading 
inside `BeanMeta` — the bean-modeling layer should only read `@BeanType` / 
`@BeanProp`. The `@Marshalled`-specific bits 
(typeName/dictionary/properties-as-include-list) need to be lifted out into the 
marshalling-side `MarshalledFilter` or an analog.
+5. **`BeanRegistry` removal from `BeanPropertyMeta`** — see Step 5; the 
side-map design needs to be sketched before any code moves.
+
+---
+
+## Definition of done
+
+- [ ] All 8 files physically located in 
`juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/`.
+- [ ] None of those 8 files reference `ClassMeta`, `MarshallingContext`, 
`MarshallingSession`, `ObjectSwap`, or `BeanRegistry`.
+- [ ] `mvn clean compile` of `juneau-commons` succeeds standalone.
+- [ ] `scripts/test.py --build-only` and `--full` both pass.
+- [ ] Reference sweep done: no stale `import org.apache.juneau.BeanMap;` etc. 
anywhere in the repo.
+- [ ] `juneau-docs` release-notes / migration-guide updated with the package 
moves.
+- [ ] Remove this TODO from `todo/TODO.md` (final cleanup step).
diff --git a/todo/TODO.md b/todo/TODO.md
index c19c17a061..70b7c51c39 100644
--- a/todo/TODO.md
+++ b/todo/TODO.md
@@ -7,6 +7,8 @@
 
 - [TODO-4] Duration.ofDays(7) serialized in hours?
 
+- [TODO-5] Finish Phase 5 of the bean-layer split: physically move `BeanMap`, 
`BeanMeta`, `BeanPropertyMeta`, `BeanMapEntry`, `BeanPropertyValue`, 
`BeanPropertyConsumer`, `BeanProxyInvocationHandler`, and `BeanMetaFiltered` 
from `juneau-marshall` into `org.apache.juneau.commons.bean` in 
`juneau-commons`. Requires untangling `ClassMeta` / `MarshallingContext` / 
`ObjectSwap` / `BeanRegistry` dependencies (introduce a `BeanConfigContext` 
runtime POJO, swap `ClassMeta` for `ClassInfo`, hoist [...]
+
 - [TODO-6] Add an `ai` / `shortDescription` field to `@Schema` (and related 
annotations) for concise LLM/AI-consumption descriptions that stay under token 
budgets. See `todo/TODO-6-ai-short-description.md`.
 
 - [TODO-7] Decouple `juneau-rest-common` from `juneau-marshall` by breaking 
the compile dependency so REST annotations and beans can be used without 
pulling in the full serialization stack. See 
`todo/TODO-7-decouple-rest-common-from-marshall.md`.

Reply via email to