You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2026/05/13 21:30:09 UTC
(juneau) 17/21: refactor: physical git mv of 7 bean-runtime types into commons.bean (TODO-5 Phase C Task 5 Step G — DONE)
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 71713c478f6744b7a2d4179e33818265d9134c99
Author: James Bognar <ja...@jamesbog-ltmjqf2.internal.salesforce.com>
AuthorDate: Wed May 13 11:14:05 2026 -0400
refactor: physical git mv of 7 bean-runtime types into commons.bean (TODO-5 Phase C Task 5 Step G — DONE)
Move BeanMap, BeanMapEntry, BeanMeta, BeanPropertyMeta, BeanPropertyValue,
BeanPropertyConsumer, BeanProxyInvocationHandler from juneau-marshall to
juneau-commons. juneau-commons compiles standalone with no juneau-marshall
dependency.
Final blocker cleanup:
- BeanPropertyValue.getClassMeta() returns BeanTypeInfo<?> (was ClassMeta<?>)
- BeanPropertyMeta.getBeanRegistry() returns BeanRegistryLookup (was BeanRegistry)
- BeanMeta.create() accepts BeanTypeInfo<T> (was ClassMeta<T>)
- BeanMeta.getMarshallingContext() returns Object; ClassMeta overrides covariantly
with MarshallingContext so existing call sites compile unchanged
- New commons SPIs BeanMetaInitializer + BeanPropertyPostProcessor on
BeanConfigContext replace direct static calls to the marshalling-side helpers
148 marshalling-side files updated to import from org.apache.juneau.commons.bean.
Full Maven build + test suite green.
Co-authored-by: Cursor <cu...@cursor.com>
---
.../juneau/assertions/FluentBeanAssertion.java | 1 +
.../juneau/assertions/FluentBeanListAssertion.java | 1 +
.../juneau/commons/bean/BeanConfigContext.java | 54 +++++++
.../org/apache/juneau/commons/bean}/BeanMap.java | 6 +-
.../apache/juneau/commons/bean}/BeanMapEntry.java | 4 +-
.../org/apache/juneau/commons/bean}/BeanMeta.java | 78 +++++-----
.../juneau/commons/bean/BeanMetaInitializer.java | 168 +++++++++++++++++++++
.../juneau/commons/bean}/BeanPropertyConsumer.java | 3 +-
.../juneau/commons/bean}/BeanPropertyMeta.java | 33 ++--
.../commons/bean/BeanPropertyPostProcessor.java | 55 +++++++
.../juneau/commons/bean}/BeanPropertyValue.java | 21 ++-
.../commons/bean}/BeanProxyInvocationHandler.java | 4 +-
.../apache/juneau/commons/bean/BeanTypeInfo.java | 25 +++
.../java/org/apache/juneau/jena/RdfBeanMeta.java | 2 +
.../apache/juneau/jena/RdfBeanPropertyMeta.java | 1 +
.../org/apache/juneau/jena/RdfMetaProvider.java | 2 +
.../java/org/apache/juneau/jena/RdfParser.java | 2 +
.../org/apache/juneau/jena/RdfParserSession.java | 3 +
.../java/org/apache/juneau/jena/RdfSerializer.java | 2 +
.../org/apache/juneau/jena/RdfStreamParser.java | 2 +
.../apache/juneau/jena/RdfStreamParserSession.java | 3 +
.../apache/juneau/jena/RdfStreamSerializer.java | 2 +
.../main/java/org/apache/juneau/BeanMapLoader.java | 1 +
.../src/main/java/org/apache/juneau/ClassMeta.java | 19 ++-
.../java/org/apache/juneau/ExtendedBeanMeta.java | 1 +
.../apache/juneau/ExtendedBeanPropertyMeta.java | 1 +
.../juneau/MarshalledBeanMetaInitializer.java | 88 ++++-------
.../juneau/MarshalledPropertyPostProcessor.java | 19 ++-
.../java/org/apache/juneau/MarshallingContext.java | 2 +
.../apache/juneau/MarshallingTraverseSession.java | 1 +
.../apache/juneau/bson/BsonBeanPropertyMeta.java | 1 +
.../org/apache/juneau/bson/BsonMetaProvider.java | 1 +
.../java/org/apache/juneau/bson/BsonParser.java | 1 +
.../org/apache/juneau/bson/BsonParserSession.java | 2 +
.../org/apache/juneau/bson/BsonSerializer.java | 1 +
.../apache/juneau/bson/BsonSerializerSession.java | 7 +-
.../apache/juneau/cbor/CborBeanPropertyMeta.java | 1 +
.../org/apache/juneau/cbor/CborMetaProvider.java | 1 +
.../java/org/apache/juneau/cbor/CborParser.java | 1 +
.../org/apache/juneau/cbor/CborParserSession.java | 2 +
.../org/apache/juneau/cbor/CborSerializer.java | 1 +
.../apache/juneau/cbor/CborSerializerSession.java | 7 +-
.../org/apache/juneau/collections/JsonMap.java | 1 +
.../org/apache/juneau/csv/CsvBeanPropertyMeta.java | 1 +
.../org/apache/juneau/csv/CsvMetaProvider.java | 1 +
.../main/java/org/apache/juneau/csv/CsvParser.java | 1 +
.../org/apache/juneau/csv/CsvParserSession.java | 1 +
.../java/org/apache/juneau/csv/CsvSerializer.java | 1 +
.../apache/juneau/csv/CsvSerializerSession.java | 2 +
.../apache/juneau/hjson/HjsonBeanPropertyMeta.java | 1 +
.../org/apache/juneau/hjson/HjsonMetaProvider.java | 1 +
.../java/org/apache/juneau/hjson/HjsonParser.java | 1 +
.../apache/juneau/hjson/HjsonParserSession.java | 1 +
.../org/apache/juneau/hjson/HjsonSerializer.java | 1 +
.../juneau/hjson/HjsonSerializerSession.java | 2 +
.../apache/juneau/hocon/HoconBeanPropertyMeta.java | 1 +
.../org/apache/juneau/hocon/HoconMetaProvider.java | 1 +
.../java/org/apache/juneau/hocon/HoconParser.java | 1 +
.../apache/juneau/hocon/HoconParserSession.java | 1 +
.../org/apache/juneau/hocon/HoconSerializer.java | 1 +
.../juneau/hocon/HoconSerializerSession.java | 2 +
.../apache/juneau/html/HtmlBeanPropertyMeta.java | 1 +
.../org/apache/juneau/html/HtmlMetaProvider.java | 1 +
.../java/org/apache/juneau/html/HtmlParser.java | 1 +
.../org/apache/juneau/html/HtmlParserSession.java | 3 +
.../org/apache/juneau/html/HtmlSerializer.java | 1 +
.../org/apache/juneau/ini/IniBeanPropertyMeta.java | 1 +
.../org/apache/juneau/ini/IniMetaProvider.java | 1 +
.../main/java/org/apache/juneau/ini/IniParser.java | 1 +
.../org/apache/juneau/ini/IniParserSession.java | 1 +
.../java/org/apache/juneau/ini/IniSerializer.java | 1 +
.../apache/juneau/ini/IniSerializerSession.java | 2 +
.../apache/juneau/internal/DelegateBeanMap.java | 3 +
.../apache/juneau/jcs/JcsSerializerSession.java | 2 +
.../apache/juneau/json/JsonBeanPropertyMeta.java | 1 +
.../org/apache/juneau/json/JsonMetaProvider.java | 1 +
.../java/org/apache/juneau/json/JsonParser.java | 1 +
.../org/apache/juneau/json/JsonParserSession.java | 2 +
.../apache/juneau/json/JsonSchemaSerializer.java | 1 +
.../juneau/json/JsonSchemaSerializerSession.java | 1 +
.../org/apache/juneau/json/JsonSerializer.java | 1 +
.../apache/juneau/json/JsonSerializerSession.java | 2 +
.../jsonschema/JsonSchemaBeanPropertyMeta.java | 1 +
.../juneau/jsonschema/JsonSchemaGenerator.java | 1 +
.../jsonschema/JsonSchemaGeneratorSession.java | 2 +
.../juneau/jsonschema/JsonSchemaMetaProvider.java | 1 +
.../juneau/markdown/MarkdownBeanPropertyMeta.java | 1 +
.../markdown/MarkdownDocSerializerSession.java | 1 +
.../juneau/markdown/MarkdownMetaProvider.java | 1 +
.../org/apache/juneau/markdown/MarkdownParser.java | 1 +
.../juneau/markdown/MarkdownParserSession.java | 1 +
.../apache/juneau/markdown/MarkdownSerializer.java | 1 +
.../juneau/markdown/MarkdownSerializerSession.java | 3 +
.../juneau/msgpack/MsgPackBeanPropertyMeta.java | 1 +
.../apache/juneau/msgpack/MsgPackMetaProvider.java | 1 +
.../org/apache/juneau/msgpack/MsgPackParser.java | 1 +
.../juneau/msgpack/MsgPackParserSession.java | 2 +
.../apache/juneau/msgpack/MsgPackSerializer.java | 1 +
.../juneau/msgpack/MsgPackSerializerSession.java | 7 +-
.../juneau/oapi/OpenApiBeanPropertyMeta.java | 1 +
.../apache/juneau/oapi/OpenApiMetaProvider.java | 1 +
.../java/org/apache/juneau/oapi/OpenApiParser.java | 1 +
.../org/apache/juneau/oapi/OpenApiSerializer.java | 1 +
.../apache/juneau/objecttools/ObjectSearcher.java | 1 +
.../apache/juneau/objecttools/ObjectViewer.java | 1 +
.../juneau/parquet/ParquetBeanPropertyMeta.java | 1 +
.../apache/juneau/parquet/ParquetMetaProvider.java | 1 +
.../org/apache/juneau/parquet/ParquetParser.java | 1 +
.../juneau/parquet/ParquetSchemaBuilder.java | 2 +-
.../apache/juneau/parquet/ParquetSerializer.java | 1 +
.../juneau/parquet/ParquetSerializerSession.java | 2 +-
.../org/apache/juneau/parser/ParserListener.java | 1 +
.../org/apache/juneau/parser/ParserSession.java | 4 +-
.../plaintext/PlainTextBeanPropertyMeta.java | 1 +
.../juneau/plaintext/PlainTextMetaProvider.java | 1 +
.../apache/juneau/plaintext/PlainTextParser.java | 1 +
.../juneau/plaintext/PlainTextSerializer.java | 1 +
.../apache/juneau/proto/ProtoBeanPropertyMeta.java | 1 +
.../org/apache/juneau/proto/ProtoMetaProvider.java | 1 +
.../java/org/apache/juneau/proto/ProtoParser.java | 1 +
.../apache/juneau/proto/ProtoParserSession.java | 1 +
.../org/apache/juneau/proto/ProtoSerializer.java | 1 +
.../juneau/proto/ProtoSerializerSession.java | 2 +
.../juneau/serializer/SerializerListener.java | 1 +
.../juneau/serializer/SerializerSession.java | 6 +-
.../juneau/soap/SoapXmlBeanPropertyMeta.java | 1 +
.../apache/juneau/soap/SoapXmlMetaProvider.java | 1 +
.../org/apache/juneau/soap/SoapXmlSerializer.java | 1 +
.../org/apache/juneau/toml/TomlParserSession.java | 2 +
.../apache/juneau/toml/TomlSerializerSession.java | 2 +
.../org/apache/juneau/uon/UonBeanPropertyMeta.java | 1 +
.../org/apache/juneau/uon/UonMetaProvider.java | 1 +
.../main/java/org/apache/juneau/uon/UonParser.java | 1 +
.../org/apache/juneau/uon/UonParserSession.java | 2 +
.../java/org/apache/juneau/uon/UonSerializer.java | 1 +
.../apache/juneau/uon/UonSerializerSession.java | 2 +
.../urlencoding/UrlEncodingBeanPropertyMeta.java | 1 +
.../urlencoding/UrlEncodingMetaProvider.java | 1 +
.../juneau/urlencoding/UrlEncodingParser.java | 1 +
.../urlencoding/UrlEncodingParserSession.java | 2 +
.../juneau/urlencoding/UrlEncodingSerializer.java | 1 +
.../urlencoding/UrlEncodingSerializerSession.java | 2 +
.../java/org/apache/juneau/xml/XmlBeanMeta.java | 2 +
.../org/apache/juneau/xml/XmlBeanPropertyMeta.java | 1 +
.../org/apache/juneau/xml/XmlMetaProvider.java | 2 +
.../main/java/org/apache/juneau/xml/XmlParser.java | 2 +
.../org/apache/juneau/xml/XmlParserSession.java | 3 +
.../java/org/apache/juneau/xml/XmlSerializer.java | 2 +
.../apache/juneau/xml/XmlSerializerSession.java | 6 +-
.../org/apache/juneau/yaml/YamlParserSession.java | 2 +
.../apache/juneau/yaml/YamlSerializerSession.java | 2 +
.../java/org/apache/juneau/rest/RestRequest.java | 1 +
.../org/apache/juneau/BeanPropertyValue_Test.java | 1 +
.../juneau/BeanProxyInvocationHandler_Test.java | 1 +
.../apache/juneau/commons/bean/BeanMeta_Test.java | 2 +
.../juneau/jsonschema/JsonSchemaGeneratorTest.java | 1 +
todo/TODO-5-bean-runtime-types-to-commons.md | 57 +++++++
157 files changed, 721 insertions(+), 132 deletions(-)
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
index 0b2075aa70..0d16dbae2a 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
@@ -24,6 +24,7 @@ import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Used for fluent assertion calls against Java beans.
diff --git a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
index aaec64c581..cc1fa7ff93 100644
--- a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
+++ b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanListAssertion.java
@@ -24,6 +24,7 @@ import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Used for fluent assertion calls against lists of beans.
diff --git a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanConfigContext.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanConfigContext.java
index 63ee537c74..6e6350ce18 100644
--- a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanConfigContext.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanConfigContext.java
@@ -118,6 +118,8 @@ public final class BeanConfigContext {
private final BeanStore beanStore;
private final AnnotationProvider annotationProvider;
private final Predicate<ClassInfo> notABeanPredicate;
+ private final BeanMetaInitializer beanMetaInitializer;
+ private final BeanPropertyPostProcessor beanPropertyPostProcessor;
private BeanConfigContext(Builder b) {
beanClassVisibility = b.beanClassVisibility;
@@ -147,6 +149,8 @@ public final class BeanConfigContext {
beanStore = b.beanStore;
annotationProvider = b.annotationProvider;
notABeanPredicate = b.notABeanPredicate;
+ beanMetaInitializer = b.beanMetaInitializer;
+ beanPropertyPostProcessor = b.beanPropertyPostProcessor;
}
/**
@@ -358,6 +362,30 @@ public final class BeanConfigContext {
*/
public AnnotationProvider getAnnotationProvider() { return annotationProvider; }
+ /**
+ * Returns the {@link BeanMetaInitializer} SPI hook used during {@link BeanMeta} construction.
+ *
+ * <p>
+ * On the commons-side path this is {@link BeanMetaInitializer#NOOP} (no marshalling-side help); on the
+ * marshalling-side path, {@code MarshallingContext} wires its own implementation that reads
+ * {@code @Marshalled} / {@code @BeanType} annotations and builds {@code BeanRegistry} instances.
+ *
+ * @return The bean-meta initializer. Never <jk>null</jk>.
+ */
+ public BeanMetaInitializer getBeanMetaInitializer() { return beanMetaInitializer; }
+
+ /**
+ * Returns the {@link BeanPropertyPostProcessor} SPI hook used during {@link BeanPropertyMeta} construction.
+ *
+ * <p>
+ * On the commons-side path this is {@link BeanPropertyPostProcessor#NOOP} (no swap-aware transforms or
+ * {@code @MarshalledProp} / {@code @Swap} / {@code @Uri} reads); on the marshalling-side path,
+ * {@code MarshallingContext} wires its own implementation.
+ *
+ * @return The bean-property post-processor. Never <jk>null</jk>.
+ */
+ public BeanPropertyPostProcessor getBeanPropertyPostProcessor() { return beanPropertyPostProcessor; }
+
/**
* Returns <jk>true</jk> if the specified class is excluded from bean detection.
*
@@ -427,6 +455,8 @@ public final class BeanConfigContext {
private BeanStore beanStore;
private AnnotationProvider annotationProvider = AnnotationProvider.INSTANCE;
private Predicate<ClassInfo> notABeanPredicate;
+ private BeanMetaInitializer beanMetaInitializer = BeanMetaInitializer.NOOP;
+ private BeanPropertyPostProcessor beanPropertyPostProcessor = BeanPropertyPostProcessor.NOOP;
private Builder() {}
@@ -458,6 +488,8 @@ public final class BeanConfigContext {
beanStore = src.beanStore;
annotationProvider = src.annotationProvider;
notABeanPredicate = src.notABeanPredicate;
+ beanMetaInitializer = src.beanMetaInitializer;
+ beanPropertyPostProcessor = src.beanPropertyPostProcessor;
}
/**
@@ -733,5 +765,27 @@ public final class BeanConfigContext {
* @return This object.
*/
public Builder notABeanPredicate(Predicate<ClassInfo> value) { notABeanPredicate = value; return this; }
+
+ /**
+ * Sets the {@link BeanMetaInitializer} SPI hook for marshalling-side {@link BeanMeta} construction.
+ *
+ * <p>
+ * Pass <jk>null</jk> to reset to {@link BeanMetaInitializer#NOOP} (commons-side default).
+ *
+ * @param value The initializer. May be <jk>null</jk>.
+ * @return This object.
+ */
+ public Builder beanMetaInitializer(BeanMetaInitializer value) { beanMetaInitializer = value == null ? BeanMetaInitializer.NOOP : value; return this; }
+
+ /**
+ * Sets the {@link BeanPropertyPostProcessor} SPI hook for marshalling-side bean-property post-processing.
+ *
+ * <p>
+ * Pass <jk>null</jk> to reset to {@link BeanPropertyPostProcessor#NOOP} (commons-side default).
+ *
+ * @param value The post-processor. May be <jk>null</jk>.
+ * @return This object.
+ */
+ public Builder beanPropertyPostProcessor(BeanPropertyPostProcessor value) { beanPropertyPostProcessor = value == null ? BeanPropertyPostProcessor.NOOP : value; return this; }
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMap.java
similarity index 99%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMap.java
index 37f1ad92a9..16ef14855e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMap.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import static org.apache.juneau.commons.utils.ClassUtils.*;
import static org.apache.juneau.commons.utils.CollectionUtils.*;
@@ -121,7 +121,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
* @param bean The bean to wrap inside this map.
* @param meta The metadata associated with the bean class.
*/
- protected BeanMap(T bean, BeanMeta<T> meta) {
+ public BeanMap(T bean, BeanMeta<T> meta) {
this.bean = bean;
this.meta = meta;
if (ne(meta.getConstructorArgs()))
@@ -141,7 +141,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
*
* @param value The bean session that produced this bean map. Typically a {@link org.apache.juneau.MarshallingSession}.
*/
- protected void setMarshallingSession(BeanSession value) {
+ public void setMarshallingSession(BeanSession value) {
this.session = value;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
similarity index 97%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
index 548d390066..492dae6366 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
@@ -14,9 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import java.util.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Represents a single entry in a bean map.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMeta.java
similarity index 95%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMeta.java
index 772fdb35dd..34677d7142 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMeta.java
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
-import static org.apache.juneau.BeanMeta.MethodType.*;
+import static org.apache.juneau.commons.bean.BeanMeta.MethodType.*;
import static org.apache.juneau.commons.reflect.AnnotationTraversal.*;
import static org.apache.juneau.commons.reflect.ReflectionUtils.*;
import static org.apache.juneau.commons.utils.AssertionUtils.*;
@@ -87,8 +87,8 @@ public class BeanMeta<T> {
* @param beanMeta The bean metadata, or <jk>null</jk> if the class is not a bean.
* @param notABeanReason The reason why the class is not a bean, or <jk>null</jk> if it is a bean.
*/
- record BeanMetaValue<T>(BeanMeta<T> beanMeta, String notABeanReason) {
- Optional<BeanMeta<T>> optBeanMeta() { return opt(beanMeta()); }
+ public record BeanMetaValue<T>(BeanMeta<T> beanMeta, String notABeanReason) {
+ public Optional<BeanMeta<T>> optBeanMeta() { return opt(beanMeta()); }
Optional<String> optNotABeanReason() { return opt(notABeanReason()); }
}
@@ -215,26 +215,26 @@ public class BeanMeta<T> {
* @param implClass The implementation class info.
* @return A {@link BeanMetaValue} containing the bean metadata (if successful) or a reason why it's not a bean.
*/
- public static <T> BeanMetaValue<T> create(ClassMeta<T> cm, ClassInfo implClass) {
+ public static <T> BeanMetaValue<T> create(BeanTypeInfo<T> cm, ClassInfo implClass) {
try {
- var bc = cm.getMarshallingContext();
- var ap = bc.getAnnotationProvider();
- var cfg = bc.getBeanConfigContext();
+ var cfg = cm.getBeanConfigContext();
+ var ap = cfg.getAnnotationProvider();
+ var bmi = cfg.getBeanMetaInitializer();
// Sanity checks first.
- if (bc.isNotABean(cm))
+ if (cfg.isNotABean(cm))
return notABean("Class matches exclude-class list");
- if (bc.isBeansRequireSerializable() && ! cm.isAssignableTo(Serializable.class) && ! MarshalledBeanMetaInitializer.hasBeanRegistrationAnnotation(cfg, cm))
+ if (cfg.isBeansRequireSerializable() && ! cm.isAssignableTo(Serializable.class) && ! bmi.hasBeanRegistrationAnnotation(cfg, cm))
return notABean("Class is not serializable");
if (ap.has(BeanIgnore.class, cm))
return notABean("Class is annotated with @BeanIgnore");
- if ((! bc.getBeanClassVisibility().isVisible(cm.getModifiers()) || cm.isAnonymousClass()) && ! MarshalledBeanMetaInitializer.hasBeanRegistrationAnnotation(cfg, cm))
+ if ((! cfg.getBeanClassVisibility().isVisible(cm.getModifiers()) || cm.isAnonymousClass()) && ! bmi.hasBeanRegistrationAnnotation(cfg, cm))
return notABean("Class is not public");
- var bm = new BeanMeta<>(cm, MarshalledBeanMetaInitializer.findMarshalledFilter(cm), null, implClass);
+ var bm = new BeanMeta<>(cm, bmi.buildBeanFilter(cm), null, implClass);
if (nn(bm.notABeanReason))
return notABean(bm.notABeanReason);
@@ -404,7 +404,7 @@ public class BeanMeta<T> {
* @param implClass Optional implementation class constructor to use if one cannot be found. Can be <jk>null</jk>.
*/
protected BeanMeta(BeanTypeInfo<T> cm, BeanFilter bf, String[] pNames, ClassInfo implClass) {
- this(cm, MarshalledBeanMetaInitializer.classInfoOf(cm), MarshalledBeanMetaInitializer.configOf(cm), MarshalledBeanMetaInitializer.contextOf(cm), bf, pNames, implClass);
+ this(cm, cm, cm.getBeanConfigContext(), cm.getMarshallingContext(), bf, pNames, implClass);
}
/**
@@ -412,7 +412,7 @@ public class BeanMeta<T> {
*
* <p>
* See {@link #of(Class, BeanConfigContext)} for the public entry point. The {@link #getClassMeta()},
- * {@link #getMarshallingContext() marshallingContext}, and per-property {@link BeanRegistry} fields are
+ * {@link #getBeanTypeResolver() bean type resolver}, and per-property {@link BeanRegistry} fields are
* left <jk>null</jk>; the per-property {@link BeanPropertyMeta#getClassMeta() rawTypeMeta}/{@code typeMeta}
* fields are also <jk>null</jk> (no type-resolution is performed in this path).
*
@@ -455,7 +455,9 @@ public class BeanMeta<T> {
var btList = ap.find(org.apache.juneau.commons.bean.BeanType.class, classInfo);
var propertyNamer = opt(bf).map(x -> x.getPropertyNamer()).orElse(config.getPropertyNamer());
- this.typePropertyName = MarshalledBeanMetaInitializer.resolveTypePropertyName(config, classInfo);
+ // resolveTypePropertyName may return null on the commons-side NOOP path; fall back to the configured default.
+ var resolvedTypePropertyName = config.getBeanMetaInitializer().resolveTypePropertyName(config, classInfo);
+ this.typePropertyName = nn(resolvedTypePropertyName) ? resolvedTypePropertyName : config.getBeanTypePropertyName();
// Check if constructor is required but not found (records are exempt since they use canonical constructors)
if (! beanConstructor.constructor().isPresent() && bf == null && config.isBeansRequireDefaultConstructor() && ! ci.isRecord())
@@ -589,7 +591,7 @@ public class BeanMeta<T> {
// entries chain on top of bean and global dictionaries. Skipped on the commons-side path
// (no marshallingContext means no BeanRegistry construction).
if (nn(marshallingContext) && nn(v.dictionaryClasses))
- propertyBeanRegistriesTemp.put(pMeta, MarshalledBeanMetaInitializer.buildPropertyBeanRegistry(marshallingContext, beanRegistry.get(), v.dictionaryClasses));
+ propertyBeanRegistriesTemp.put(pMeta, config.getBeanMetaInitializer().buildPropertyBeanRegistry(marshallingContext, beanRegistry.get(), v.dictionaryClasses));
});
// If a beanFilter is defined, look for inclusion and exclusion lists.
@@ -668,7 +670,7 @@ public class BeanMeta<T> {
// MarshallingContext to resolve ObjectSwap/StringFormatSwap/Surrogate types and the swap
// class meta.
if (nn(marshallingContext))
- MarshalledPropertyPostProcessor.process((MarshallingContext) marshallingContext, p);
+ config.getBeanPropertyPostProcessor().process(marshallingContext, p);
if (nn(p.getter))
getterProps.put(p.getter.inner(), p.name);
@@ -703,10 +705,10 @@ public class BeanMeta<T> {
* @return The bean filter for this bean, or <jk>null</jk> if no bean filter is associated with this bean.
* @see Bean
*/
- public MarshalledFilter getMarshalledFilter() {
- // The field is typed as the bean-modeling-side BeanFilter SPI but the only concrete
- // implementation in-tree is MarshalledFilter, so the narrowing cast is safe.
- return (MarshalledFilter) beanFilter;
+ public BeanFilter getBeanFilter() {
+ // The field is typed as the bean-modeling-side BeanFilter SPI; marshalling-side callers
+ // narrow back to {@link MarshalledFilter} (the only concrete implementation in-tree).
+ return beanFilter;
}
/**
@@ -921,16 +923,21 @@ public class BeanMeta<T> {
}
/**
- * Returns the bean context that created this metadata object.
+ * Returns the bean-modeling {@link BeanTypeResolver} that this metadata was constructed against.
+ *
+ * <p>
+ * On the marshalling-side construction path, the underlying object is the {@link MarshallingContext} (which
+ * implements {@link BeanTypeResolver}); marshalling-side callers that need the concrete narrowing must cast
+ * (e.g. {@code (MarshallingContext) bm.getBeanTypeResolver()}).
*
* <p>
* Returns <jk>null</jk> when this {@link BeanMeta} was constructed via the commons-side path
* ({@link #of(Class, BeanConfigContext)}). Use {@link #getConfig()} for the always-non-null bean-modeling
* configuration facade.
*
- * @return The bean context, or <jk>null</jk> for bean-modeling-only construction.
+ * @return The bean-modeling type resolver, or <jk>null</jk> for bean-modeling-only construction.
*/
- protected MarshallingContext getMarshallingContext() { return (MarshallingContext) marshallingContext; }
+ protected BeanTypeResolver getBeanTypeResolver() { return (BeanTypeResolver) marshallingContext; }
/**
* Returns the constructor for this bean, if one was found.
@@ -948,7 +955,7 @@ public class BeanMeta<T> {
* @see #getConstructorArgs()
* @see #hasConstructor()
*/
- protected ConstructorInfo getConstructor() {
+ public ConstructorInfo getConstructor() {
return beanConstructor.constructor().orElse(null);
}
@@ -973,7 +980,7 @@ public class BeanMeta<T> {
* @see #getConstructor()
* @see #hasConstructor()
*/
- protected List<String> getConstructorArgs() {
+ public List<String> getConstructorArgs() {
return beanConstructor.args();
}
@@ -1039,7 +1046,7 @@ public class BeanMeta<T> {
* @see #getConstructor()
* @see #newBean(Object)
*/
- protected boolean hasConstructor() {
+ public boolean hasConstructor() {
return beanConstructor.constructor().isPresent();
}
@@ -1061,7 +1068,7 @@ public class BeanMeta<T> {
"unchecked", // Type erasure requires unchecked cast
"rawtypes" // Raw BeanFactory type used at runtime for factory resolution
})
- protected T newBean(Object outer) throws ExecutableException {
+ public T newBean(Object outer) throws ExecutableException {
if (factoryClass != null) {
try {
BeanFactory factory = resolveFactory(factoryClass);
@@ -1176,7 +1183,7 @@ public class BeanMeta<T> {
if (implClassConstructor != null)
return new BeanConstructor(opt(implClassConstructor.accessible()), liste());
- var con = ci.getNoArgConstructor(MarshalledBeanMetaInitializer.hasBeanRegistrationAnnotation(config, classInfo) ? Visibility.PRIVATE : vis).orElse(null);
+ var con = ci.getNoArgConstructor(config.getBeanMetaInitializer().hasBeanRegistrationAnnotation(config, classInfo) ? Visibility.PRIVATE : vis).orElse(null);
if (con != null)
return new BeanConstructor(opt(con.accessible()), liste());
@@ -1427,9 +1434,9 @@ public class BeanMeta<T> {
*/
private BeanRegistryLookup findBeanRegistry() {
// BeanRegistry is a marshalling-side concern (polymorphic dispatch via @Marshalled(typeName)/dictionary).
- // Lifted out to {@link MarshalledBeanMetaInitializer} so this class no longer references
- // {@link BeanRegistry} directly. Returns null on the commons-side path (no marshallingContext).
- return MarshalledBeanMetaInitializer.buildBeanRegistry(marshallingContext, beanFilter, classInfo, config);
+ // Lifted out to the BeanMetaInitializer SPI carried on BeanConfigContext so this class no longer references
+ // MarshalledBeanMetaInitializer directly. Returns null on the commons-side path (no marshallingContext).
+ return config.getBeanMetaInitializer().buildBeanRegistry(marshallingContext, beanFilter, classInfo, config);
}
/*
@@ -1541,12 +1548,13 @@ public class BeanMeta<T> {
// Parent-class BeanRegistry lookup is a marshalling-side concern: it walks parents and interfaces to
// see if any of THEIR ClassMeta-backed BeanRegistries declares a typeName for our raw class. Lifted
- // out to {@link MarshalledBeanMetaInitializer}. Returns null on the commons-side path.
- var n = MarshalledBeanMetaInitializer.findTypeNameInParents(marshallingContext, classInfo, rawClass);
+ // out to the BeanMetaInitializer SPI carried on BeanConfigContext. Returns null on the commons-side path.
+ var bmi = config.getBeanMetaInitializer();
+ var n = bmi.findTypeNameInParents(marshallingContext, classInfo, rawClass);
if (n != null)
return n;
- return MarshalledBeanMetaInitializer.findMarshalledTypeName(config, classInfo);
+ return bmi.findMarshalledTypeName(config, classInfo);
}
/*
diff --git a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMetaInitializer.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMetaInitializer.java
new file mode 100644
index 0000000000..b01f2cacd8
--- /dev/null
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMetaInitializer.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.commons.bean;
+
+import java.util.List;
+
+import org.apache.juneau.commons.reflect.ClassInfo;
+
+/**
+ * Bean-modeling SPI seam that exposes marshalling-aware {@link BeanMeta} construction hooks.
+ *
+ * <p>
+ * The bean-modeling layer in {@code commons.bean} can construct a {@link BeanMeta} from a {@link Class} plus a
+ * {@link BeanConfigContext} alone, but the full marshalling-side construction path also needs to:
+ * <ul>
+ * <li>Read {@code @Marshalled} / {@code @BeanType} annotations to detect bean registration, dictionary names,
+ * and the type-property name.
+ * <li>Build a {@code BeanRegistry} for polymorphic dispatch (bean-level and per-property).
+ * <li>Walk the parent class/interface hierarchy to find an inherited dictionary name.
+ * </ul>
+ *
+ * <p>
+ * These operations require the marshalling-side {@code MarshallingContext}, so they are exposed here as SPI
+ * methods that take the marshalling context as an opaque {@link Object}. The marshalling-side implementation
+ * in {@code MarshalledBeanMetaInitializer} narrows the argument internally; the bean-modeling layer never
+ * imports the marshalling-side types.
+ *
+ * <p>
+ * The default {@link #NOOP} implementation is wired on the commons-side path and returns conservative defaults
+ * (no marshalling-side help available). {@code @BeanType} reads remain functional via the configured
+ * {@link BeanConfigContext#getAnnotationProvider()}.
+ *
+ * @see BeanConfigContext.Builder#beanMetaInitializer(BeanMetaInitializer)
+ */
+public interface BeanMetaInitializer {
+
+ /**
+ * Singleton commons-side default — no marshalling-side knowledge.
+ *
+ * <p>
+ * Returns conservative defaults: no bean dictionary, no inherited type-names, no {@code @Marshalled} reads.
+ * {@link #hasBeanRegistrationAnnotation(BeanConfigContext, ClassInfo)} still reads {@code @BeanType} via
+ * the supplied {@link BeanConfigContext#getAnnotationProvider() annotation provider}.
+ */
+ BeanMetaInitializer NOOP = new BeanMetaInitializer() {
+ @Override
+ public boolean hasBeanRegistrationAnnotation(BeanConfigContext config, ClassInfo classInfo) {
+ return ! config.getAnnotationProvider().find(BeanType.class, classInfo).isEmpty();
+ }
+
+ @Override
+ public String resolveTypePropertyName(BeanConfigContext config, ClassInfo classInfo) {
+ return null;
+ }
+
+ @Override
+ public String findMarshalledTypeName(BeanConfigContext config, ClassInfo classInfo) {
+ return null;
+ }
+
+ @Override
+ public BeanRegistryLookup buildBeanRegistry(Object marshallingContext, BeanFilter beanFilter, ClassInfo classInfo, BeanConfigContext config) {
+ return null;
+ }
+
+ @Override
+ public BeanRegistryLookup buildPropertyBeanRegistry(Object marshallingContext, BeanRegistryLookup parent, List<ClassInfo> dictionaryClasses) {
+ return null;
+ }
+
+ @Override
+ public String findTypeNameInParents(Object marshallingContext, ClassInfo classInfo, Class<?> rawClass) {
+ return null;
+ }
+
+ @Override
+ public BeanFilter buildBeanFilter(BeanTypeInfo<?> cm) {
+ return null;
+ }
+ };
+
+ /**
+ * Returns <jk>true</jk> if the supplied class has a "registered as bean" annotation (e.g. {@code @Marshalled}
+ * or {@code @BeanType}). Used to relax constructor-visibility / serializable / class-visibility checks during
+ * bean detection.
+ *
+ * @param config The bean-modeling configuration.
+ * @param classInfo The bean's class info.
+ * @return <jk>true</jk> if the class has a registration annotation.
+ */
+ boolean hasBeanRegistrationAnnotation(BeanConfigContext config, ClassInfo classInfo);
+
+ /**
+ * Returns the marshalling-side {@code @Marshalled(typePropertyName)} value for the bean, or <jk>null</jk> if
+ * not set. Callers fall back to {@link BeanConfigContext#getBeanTypePropertyName()} when this returns <jk>null</jk>.
+ *
+ * @param config The bean-modeling configuration.
+ * @param classInfo The bean's class info.
+ * @return The resolved type property name, or <jk>null</jk>.
+ */
+ String resolveTypePropertyName(BeanConfigContext config, ClassInfo classInfo);
+
+ /**
+ * Returns the marshalling-side {@code @Marshalled(typeName)} value for the bean, or <jk>null</jk> if not set.
+ *
+ * @param config The bean-modeling configuration.
+ * @param classInfo The bean's class info.
+ * @return The marshalled type name, or <jk>null</jk>.
+ */
+ String findMarshalledTypeName(BeanConfigContext config, ClassInfo classInfo);
+
+ /**
+ * Builds the bean-level {@link BeanRegistryLookup} for the supplied class. Returns <jk>null</jk> on the
+ * commons-side path (no marshalling context).
+ *
+ * @param marshallingContext The marshalling-side context (as an opaque {@link Object}). Can be <jk>null</jk>.
+ * @param beanFilter The bean filter applied to this bean meta. Can be <jk>null</jk>.
+ * @param classInfo The class info of the bean. Must not be <jk>null</jk>.
+ * @param config The bean-modeling configuration. Must not be <jk>null</jk>.
+ * @return The bean-level registry, or <jk>null</jk>.
+ */
+ BeanRegistryLookup buildBeanRegistry(Object marshallingContext, BeanFilter beanFilter, ClassInfo classInfo, BeanConfigContext config);
+
+ /**
+ * Builds the per-property {@link BeanRegistryLookup} chained on top of the bean-level registry.
+ *
+ * @param marshallingContext The marshalling-side context. Must not be <jk>null</jk> on the marshalling path.
+ * @param parent The bean-level registry (chained behind the per-property one). May be <jk>null</jk>.
+ * @param dictionaryClasses The per-property dictionary class infos. Must not be <jk>null</jk>.
+ * @return The per-property registry, or <jk>null</jk> when there is no marshalling context.
+ */
+ BeanRegistryLookup buildPropertyBeanRegistry(Object marshallingContext, BeanRegistryLookup parent, List<ClassInfo> dictionaryClasses);
+
+ /**
+ * Walks the parent classes/interfaces of {@code classInfo} and returns the first dictionary-name mapping for
+ * {@code rawClass} found in any parent's registry, or <jk>null</jk> if none.
+ *
+ * @param marshallingContext The marshalling-side context. Can be <jk>null</jk>.
+ * @param classInfo The bean's class info.
+ * @param rawClass The raw class to look up.
+ * @return The dictionary name found in a parent's registry, or <jk>null</jk>.
+ */
+ String findTypeNameInParents(Object marshallingContext, ClassInfo classInfo, Class<?> rawClass);
+
+ /**
+ * Builds the marshalling-side {@link BeanFilter} for the supplied class, reading {@code @Marshalled} and
+ * {@code @BeanType} annotations. Returns <jk>null</jk> on the commons-side path (no marshalling-side
+ * filter construction is available).
+ *
+ * @param cm The bean type info.
+ * @return The bean filter, or <jk>null</jk>.
+ */
+ BeanFilter buildBeanFilter(BeanTypeInfo<?> cm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyConsumer.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyConsumer.java
similarity index 88%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyConsumer.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyConsumer.java
index 113b284db5..2d246f49b8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyConsumer.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyConsumer.java
@@ -14,9 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import org.apache.juneau.commons.function.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Represents a consumer of a single bean property value.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyMeta.java
similarity index 95%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyMeta.java
index 824db3d978..c30aedbd0d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyMeta.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import static org.apache.juneau.commons.reflect.AnnotationTraversal.*;
import static org.apache.juneau.commons.reflect.ReflectionUtils.*;
@@ -82,20 +82,20 @@ public class BeanPropertyMeta implements Comparable<BeanPropertyMeta> {
BeanConfigContext config; // Package-private for BeanMeta access. Always non-null — sourced from the owning BeanMeta.
String name; // Package-private for BeanMeta access
FieldInfo field; // Package-private for BeanMeta access
- FieldInfo innerField; // Package-private for BeanMeta access
- MethodInfo getter; // Package-private for BeanMeta access
- MethodInfo setter; // Package-private for BeanMeta access
+ public FieldInfo innerField; // Package-private for BeanMeta access
+ public MethodInfo getter; // Package-private for BeanMeta access
+ public MethodInfo setter; // Package-private for BeanMeta access
MethodInfo extraKeys; // Package-private for BeanMeta access
- BeanTypeInfo<?> rawTypeMeta; // Package-private for BeanMeta access (used to install swap-aware transforms). Null on commons-side path (no type resolution). Concrete instances are always {@link org.apache.juneau.ClassMeta} since it's the only in-tree implementation; the field is typed against the bean-modeling SPI seam so the field can live in commons.bean.
- Object swap; // Object-typed so the field can live in commons.bean; cast to ObjectSwap by marshalling-side consumers. Set only via MarshalledPropertyPostProcessor (marshalling-side post-processor).
- BiFunction<BeanSession,Object,Object> readTransform; // Package-private; defaults to identity if null. Typed against the commons.bean SPI seam; marshalling-side installers cast the session argument back to {@link org.apache.juneau.MarshallingSession} where needed (see {@link org.apache.juneau.MarshalledPropertyPostProcessor#installSwapAwareTransforms}).
- BiFunction<BeanSession,Object,Object> writeTransform; // Package-private; defaults to identity if null. Typed against the commons.bean SPI seam (see readTransform note).
- List<ClassInfo> dictionaryClasses; // Package-private for BeanMeta access; @MarshalledProp(dictionary={}) classes scanned during validate().
+ public BeanTypeInfo<?> rawTypeMeta; // Package-private for BeanMeta access (used to install swap-aware transforms). Null on commons-side path (no type resolution). Concrete instances are always {@link org.apache.juneau.ClassMeta} since it's the only in-tree implementation; the field is typed against the bean-modeling SPI seam so the field can live in commons.bean.
+ public Object swap; // Object-typed so the field can live in commons.bean; cast to ObjectSwap by marshalling-side consumers. Set only via MarshalledPropertyPostProcessor (marshalling-side post-processor).
+ public BiFunction<BeanSession,Object,Object> readTransform; // Package-private; defaults to identity if null. Typed against the commons.bean SPI seam; marshalling-side installers cast the session argument back to {@link org.apache.juneau.MarshallingSession} where needed (see {@link org.apache.juneau.MarshalledPropertyPostProcessor#installSwapAwareTransforms}).
+ public BiFunction<BeanSession,Object,Object> writeTransform; // Package-private; defaults to identity if null. Typed against the commons.bean SPI seam (see readTransform note).
+ public List<ClassInfo> dictionaryClasses; // Package-private for BeanMeta access; @MarshalledProp(dictionary={}) classes scanned during validate().
private boolean isConstructorArg;
- boolean isUri; // Package-private so MarshalledPropertyPostProcessor can set @Uri-derived flag. Mirrors rawTypeMeta.isUri() plus @Uri annotation reads on field/getter/setter.
+ public boolean isUri; // Package-private so MarshalledPropertyPostProcessor can set @Uri-derived flag. Mirrors rawTypeMeta.isUri() plus @Uri annotation reads on field/getter/setter.
private boolean isDyna;
private boolean isDynaGetterMap;
- BeanTypeInfo<?> typeMeta; // Package-private so the marshalling-side post-processor can override after @Swap/@MarshalledProp detection. Concrete instances are always {@link org.apache.juneau.ClassMeta}; typed against the bean-modeling SPI seam.
+ public BeanTypeInfo<?> typeMeta; // Package-private so the marshalling-side post-processor can override after @Swap/@MarshalledProp detection. Concrete instances are always {@link org.apache.juneau.ClassMeta}; typed against the bean-modeling SPI seam.
private Object overrideValue;
private BeanPropertyMeta delegateFor;
private boolean canRead;
@@ -105,7 +105,7 @@ public class BeanPropertyMeta implements Comparable<BeanPropertyMeta> {
Builder(BeanMeta<?> beanMeta, String name) {
this.beanMeta = beanMeta;
- this.bc = beanMeta.getMarshallingContext(); // MarshallingContext implements BeanTypeResolver; null on commons-side path.
+ this.bc = beanMeta.getBeanTypeResolver(); // Returns null on commons-side path.
this.config = beanMeta.getConfig();
this.name = name;
}
@@ -878,9 +878,14 @@ public class BeanPropertyMeta implements Comparable<BeanPropertyMeta> {
* {@link BeanMeta#getPropertyBeanRegistry(BeanPropertyMeta)} for backwards compatibility with existing call sites
* in the marshalling layer (parser/serializer sessions, XML content-property handling, etc.).
*
- * @return The bean dictionary in use for this bean property. Never <jk>null</jk>.
+ * <p>
+ * Returns the bean-modeling-side SPI type ({@link BeanRegistryLookup}). Marshalling-side callers that need
+ * the full {@link org.apache.juneau.BeanRegistry} surface (e.g. {@code getClassMeta(String)}) cast at the
+ * call site — the concrete instance in-tree is always a {@link org.apache.juneau.BeanRegistry}.
+ *
+ * @return The bean dictionary in use for this bean property, or <jk>null</jk> if no registry was registered.
*/
- public BeanRegistry getBeanRegistry() { return (BeanRegistry) beanMeta.getPropertyBeanRegistry(this); }
+ public BeanRegistryLookup getBeanRegistry() { return beanMeta.getPropertyBeanRegistry(this); }
/**
* Returns the {@link BeanTypeInfo} of the class of this property.
diff --git a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyPostProcessor.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyPostProcessor.java
new file mode 100644
index 0000000000..68c840ce35
--- /dev/null
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyPostProcessor.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.commons.bean;
+
+/**
+ * Bean-modeling SPI seam that applies marshalling-side post-processing to a {@code BeanPropertyMeta.Builder}
+ * after {@code BeanPropertyMeta.Builder#validate()} succeeds.
+ *
+ * <p>
+ * On the marshalling-side path, post-processing reads {@code @MarshalledProp} / {@code @Swap} / {@code @Uri}
+ * annotations and installs swap-aware read/write transforms on the builder. The bean-modeling layer in
+ * {@code commons.bean} never touches those marshalling-side concerns directly; it just invokes this hook.
+ *
+ * <p>
+ * The default {@link #NOOP} implementation does nothing and is wired on the commons-side path.
+ *
+ * <p>
+ * The {@code builder} parameter is typed as {@link Object} during the in-flight TODO-5 move of
+ * {@code BeanPropertyMeta} into {@code commons.bean}: until that physical move completes, the SPI must
+ * not reference the marshalling-side {@code BeanPropertyMeta.Builder} from {@code commons.bean}. After
+ * the move, the parameter can be retyped.
+ *
+ * @see BeanConfigContext.Builder#beanPropertyPostProcessor(BeanPropertyPostProcessor)
+ */
+@FunctionalInterface
+public interface BeanPropertyPostProcessor {
+
+ /** Singleton commons-side default — no marshalling-side post-processing. */
+ BeanPropertyPostProcessor NOOP = (marshallingContext, builder) -> {};
+
+ /**
+ * Applies marshalling-side post-processing to the supplied builder.
+ *
+ * @param marshallingContext The marshalling-side context (as an opaque {@link Object}). May be <jk>null</jk>
+ * when invoked from the commons-side construction path.
+ * @param builder The bean-property builder to mutate (a {@code BeanPropertyMeta.Builder}). Must not be
+ * <jk>null</jk>. Typed as {@link Object} until {@code BeanPropertyMeta} physically moves into
+ * {@code commons.bean}; the marshalling-side implementation casts internally.
+ */
+ void process(Object marshallingContext, Object builder);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyValue.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyValue.java
similarity index 82%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyValue.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyValue.java
index 2416d256e8..3fa1eba374 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyValue.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyValue.java
@@ -14,11 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import static org.apache.juneau.commons.utils.CollectionUtils.*;
import static org.apache.juneau.commons.utils.Utils.*;
+import org.apache.juneau.commons.bean.*;
import org.apache.juneau.commons.collections.*;
/**
@@ -71,11 +72,16 @@ public class BeanPropertyValue implements Comparable<BeanPropertyValue> {
}
/**
- * Returns the bean property metadata.
+ * Returns the {@link BeanTypeInfo} of the bean property.
*
- * @return The bean property metadata.
+ * <p>
+ * Returns the bean-modeling-side SPI type ({@link BeanTypeInfo}). Marshalling-side callers that need the
+ * {@link org.apache.juneau.ClassMeta} narrowing must cast — the concrete instance in-tree is always a
+ * {@link org.apache.juneau.ClassMeta}.
+ *
+ * @return The bean property type info.
*/
- public final ClassMeta<?> getClassMeta() { return (ClassMeta<?>) pMeta.getClassMeta(); }
+ public final BeanTypeInfo<?> getClassMeta() { return pMeta.getClassMeta(); }
/**
* Returns the bean property metadata.
@@ -105,7 +111,12 @@ public class BeanPropertyValue implements Comparable<BeanPropertyValue> {
*/
public final Object getValue() { return value; }
- protected FluentMap<String,Object> properties() {
+ /**
+ * Returns a property map view of this object.
+ *
+ * @return A property map containing the name, value, and type of this bean property.
+ */
+ public FluentMap<String,Object> properties() {
// @formatter:off
return filteredBeanPropertyMap()
.a(PROP_name, name)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanProxyInvocationHandler.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanProxyInvocationHandler.java
similarity index 97%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanProxyInvocationHandler.java
rename to juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanProxyInvocationHandler.java
index 56327347a8..a63a020990 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanProxyInvocationHandler.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanProxyInvocationHandler.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau;
+package org.apache.juneau.commons.bean;
import static org.apache.juneau.commons.reflect.ReflectionUtils.*;
import static org.apache.juneau.commons.utils.ThrowableUtils.*;
@@ -22,6 +22,8 @@ import static org.apache.juneau.commons.utils.Utils.*;
import java.lang.reflect.*;
import java.util.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
/**
* Provides an {@link InvocationHandler} for creating dynamic proxy instances of bean interfaces.
diff --git a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanTypeInfo.java b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanTypeInfo.java
index ac96183c0c..07c059bb95 100644
--- a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanTypeInfo.java
+++ b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanTypeInfo.java
@@ -144,4 +144,29 @@ public abstract class BeanTypeInfo<T> extends ClassInfoTyped<T> {
* @return The default empty Optional value, or <jk>null</jk>.
*/
public abstract Object getOptionalDefault();
+
+ /**
+ * Returns the {@link BeanConfigContext} associated with this type-info.
+ *
+ * <p>
+ * On the marshalling-side this returns the bean-modeling subset of the {@code MarshallingContext} that
+ * carried this type-info; on commons-side {@link BeanTypeInfo} construction paths (none exist in-tree as
+ * of TODO-5 — {@link BeanTypeInfo} is currently always realized by marshalling-side {@code ClassMeta}),
+ * this should return the {@code BeanConfigContext} the type-info was built against.
+ *
+ * @return The bean-modeling configuration carried alongside this type-info. Never <jk>null</jk>.
+ */
+ public abstract BeanConfigContext getBeanConfigContext();
+
+ /**
+ * Returns the marshalling-side context associated with this type-info, as an opaque {@link Object}.
+ *
+ * <p>
+ * On the marshalling-side this is the {@code MarshallingContext} that carried this type-info; the return
+ * type is widened to {@link Object} so callers in {@code commons.bean} do not need to import
+ * {@code MarshallingContext}. Callers cast to the marshalling-side type at the use site.
+ *
+ * @return The marshalling context, or <jk>null</jk> if none is associated with this type-info.
+ */
+ public abstract Object getMarshallingContext();
}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
index 1bf75fac6a..acadfd4649 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
@@ -20,6 +20,8 @@ import static org.apache.juneau.commons.utils.Utils.*;
import org.apache.juneau.*;
import org.apache.juneau.jena.annotation.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on beans specific to the RDF serializers and parsers pulled from the {@link Rdf @Rdf} annotation on the
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
index 61954dc0fb..d29e9d928b 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
@@ -23,6 +23,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.jena.annotation.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the RDF serializers and parsers pulled from the {@link Rdf @Rdf} annotation
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfMetaProvider.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfMetaProvider.java
index 2a5b261201..5139b3f50f 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfMetaProvider.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfMetaProvider.java
@@ -18,6 +18,8 @@ package org.apache.juneau.jena;
import org.apache.juneau.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link RdfClassMeta}, {@link RdfBeanMeta}, and {@link RdfBeanPropertyMeta} objects.
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 c8d1e84758..92dedcd97e 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
@@ -32,6 +32,8 @@ import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.jena.annotation.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses RDF into POJOs.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
index ce903f33c0..3960035792 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
@@ -41,6 +41,9 @@ import org.apache.juneau.xml.*;
import org.apache.jena.rdf.model.*;
import org.apache.jena.riot.*;
import org.apache.jena.util.iterator.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link RdfParser}.
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 0376e8d9fa..b18292b9a7 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
@@ -34,6 +34,8 @@ import org.apache.juneau.jena.annotation.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.xml.*;
import org.apache.juneau.xml.annotation.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJOs to RDF.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParser.java
index 52fa14f4c1..f79baf355b 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParser.java
@@ -22,6 +22,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Stream-based RDF parser for binary formats (RDF/THRIFT, RDF/PROTO).
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParserSession.java
index 2f305ebd8d..b620055f02 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamParserSession.java
@@ -41,6 +41,9 @@ import org.apache.juneau.xml.*;
import org.apache.jena.rdf.model.*;
import org.apache.jena.riot.*;
import org.apache.jena.util.iterator.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link RdfStreamParser}.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamSerializer.java
index 079b2f807e..57c737534e 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfStreamSerializer.java
@@ -21,6 +21,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Stream-based RDF serializer for binary formats (RDF/THRIFT, RDF/PROTO).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapLoader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapLoader.java
index 754f59f744..f82b422583 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapLoader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapLoader.java
@@ -20,6 +20,7 @@ import java.io.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Marshalling-side helper for loading {@link BeanMap} contents from JSON text or a reader/parser pair.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index e599ae73a5..001fcb0f03 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -467,10 +467,27 @@ public class ClassMeta<T> extends BeanTypeInfo<T> {
/**
* Returns the {@link MarshallingContext} that created this object.
*
+ * <p>
+ * Covariantly overrides {@link BeanTypeInfo#getMarshallingContext()} to narrow the return type from
+ * {@link Object} (commons SPI) back to {@link MarshallingContext} (marshalling-side concrete type).
+ *
* @return The bean context.
*/
+ @Override
public MarshallingContext getMarshallingContext() { return marshallingContext; }
+ /**
+ * Returns the {@link BeanConfigContext} snapshot carried by the {@link MarshallingContext} that built this
+ * {@link ClassMeta}.
+ *
+ * <p>
+ * Satisfies the {@link BeanTypeInfo#getBeanConfigContext()} commons SPI contract.
+ *
+ * @return The bean-modeling configuration of the marshalling context. Never <jk>null</jk>.
+ */
+ @Override
+ public BeanConfigContext getBeanConfigContext() { return marshallingContext.getBeanConfigContext(); }
+
/**
* Returns the {@link BeanMeta} associated with this class.
*
@@ -1576,7 +1593,7 @@ public class ClassMeta<T> extends BeanTypeInfo<T> {
private String findExample() {
- var ex = beanMeta.get().optBeanMeta().map(x -> x.getMarshalledFilter()).map(x -> x.getExample()).orElse(null);
+ var ex = beanMeta.get().optBeanMeta().map(x -> (MarshalledFilter) x.getBeanFilter()).map(x -> x.getExample()).orElse(null);
if (ex == null)
ex = marshalledFilter.map(x -> x.getExample()).orElse(null);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanMeta.java
index 6d4e05da41..5fdd0997fd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau;
import org.apache.juneau.commons.reflect.*;
+import org.apache.juneau.commons.bean.BeanMeta;
/**
* Defines extended language-specific metadata associated with a bean.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanPropertyMeta.java
index 47b3a3364b..fa98d60e29 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ExtendedBeanPropertyMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau;
import org.apache.juneau.commons.reflect.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Defines extended language-specific metadata associated with a bean property.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledBeanMetaInitializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledBeanMetaInitializer.java
index d9aa6cdbe1..af097e5ec0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledBeanMetaInitializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledBeanMetaInitializer.java
@@ -41,8 +41,16 @@ import org.apache.juneau.commons.utils.*;
* Each helper takes the marshalling-side {@link MarshallingContext} as an {@link Object} so the
* call sites inside {@link BeanMeta} do not need to import {@link MarshallingContext}. The helper
* casts back internally.
+ *
+ * <p>
+ * Implements the commons-side {@link BeanMetaInitializer} SPI; the singleton {@link #INSTANCE} is wired into the
+ * {@link BeanConfigContext} carried by every {@link MarshallingContext} (see
+ * {@code MarshallingContext.buildBeanConfigContext()}).
*/
-final class MarshalledBeanMetaInitializer {
+final class MarshalledBeanMetaInitializer implements BeanMetaInitializer {
+
+ /** Singleton instance wired into {@link MarshallingContext}-built {@link BeanConfigContext}s. */
+ static final MarshalledBeanMetaInitializer INSTANCE = new MarshalledBeanMetaInitializer();
private MarshalledBeanMetaInitializer() {}
@@ -59,7 +67,8 @@ final class MarshalledBeanMetaInitializer {
* @param config The bean-modeling configuration. Must not be <jk>null</jk>.
* @return The bean-level {@link BeanRegistryLookup}, or <jk>null</jk> on the commons-side path.
*/
- static BeanRegistryLookup buildBeanRegistry(Object marshallingContext, BeanFilter beanFilter, ClassInfo classInfo, BeanConfigContext config) {
+ @Override
+ public BeanRegistryLookup buildBeanRegistry(Object marshallingContext, BeanFilter beanFilter, ClassInfo classInfo, BeanConfigContext config) {
if (marshallingContext == null)
return null;
MarshallingContext mc = (MarshallingContext) marshallingContext;
@@ -86,7 +95,8 @@ final class MarshalledBeanMetaInitializer {
* @param dictionaryClasses The per-property {@link MarshalledProp#dictionary() @MarshalledProp(dictionary)} classes. Must not be <jk>null</jk>.
* @return The per-property {@link BeanRegistryLookup}.
*/
- static BeanRegistryLookup buildPropertyBeanRegistry(Object marshallingContext, BeanRegistryLookup parent, List<ClassInfo> dictionaryClasses) {
+ @Override
+ public BeanRegistryLookup buildPropertyBeanRegistry(Object marshallingContext, BeanRegistryLookup parent, List<ClassInfo> dictionaryClasses) {
return new BeanRegistry((MarshallingContext) marshallingContext, (BeanRegistry) parent, dictionaryClasses);
}
@@ -104,7 +114,8 @@ final class MarshalledBeanMetaInitializer {
* @param rawClass The raw class to look up a type name for.
* @return The dictionary name found in a parent's registry, or <jk>null</jk>.
*/
- static String findTypeNameInParents(Object marshallingContext, ClassInfo classInfo, Class<?> rawClass) {
+ @Override
+ public String findTypeNameInParents(Object marshallingContext, ClassInfo classInfo, Class<?> rawClass) {
if (marshallingContext == null)
return null;
MarshallingContext mc = (MarshallingContext) marshallingContext;
@@ -122,65 +133,25 @@ final class MarshalledBeanMetaInitializer {
}
/**
- * Extracts the {@link BeanConfigContext} embedded in a marshalling-side {@link BeanTypeInfo} (which is always
- * a {@link ClassMeta}).
- *
- * <p>
- * Used by the protected {@code BeanMeta(BeanTypeInfo, BeanFilter, String[], ClassInfo)} bridging constructor —
- * lifts the {@code ((ClassMeta<T>) cm).getMarshallingContext().getBeanConfigContext()} cast chain out of the
- * commons-side {@link BeanMeta} body.
- *
- * @param cm The bean type info. Must be a marshalling-side {@link ClassMeta} instance.
- * @return The bean-modeling configuration of the marshalling context.
- */
- static BeanConfigContext configOf(BeanTypeInfo<?> cm) {
- return ((ClassMeta<?>) cm).getMarshallingContext().getBeanConfigContext();
- }
-
- /**
- * Extracts the {@link MarshallingContext} embedded in a marshalling-side {@link BeanTypeInfo} (which is always
- * a {@link ClassMeta}) and returns it as an {@link Object} so the caller does not need to import
- * {@link MarshallingContext}.
- *
- * @param cm The bean type info. Must be a marshalling-side {@link ClassMeta} instance.
- * @return The marshalling context, as an {@link Object}.
- */
- static Object contextOf(BeanTypeInfo<?> cm) {
- return ((ClassMeta<?>) cm).getMarshallingContext();
- }
-
- /**
- * Narrows a marshalling-side {@link BeanTypeInfo} (which is always a {@link ClassMeta}) to {@link ClassInfo}.
- *
- * <p>
- * Since {@link ClassMeta} extends {@link ClassInfo}, the cast is direct. Provided as a helper so the commons-side
- * caller does not have to import {@link ClassMeta}.
- *
- * @param cm The bean type info. Must be a marshalling-side {@link ClassMeta} instance.
- * @return The class info for the underlying bean class.
- */
- static ClassInfo classInfoOf(BeanTypeInfo<?> cm) {
- return (ClassMeta<?>) cm;
- }
-
- /**
- * Resolves the {@link Marshalled#typePropertyName() @Marshalled(typePropertyName)} value for a bean class, falling
- * back to {@link BeanConfigContext#getBeanTypePropertyName()} when no annotation supplies one.
+ * Resolves the {@link Marshalled#typePropertyName() @Marshalled(typePropertyName)} value for a bean class.
*
* <p>
* Encapsulates the {@link Marshalled @Marshalled} annotation read previously performed inline by
* {@link BeanMeta}'s constructor, so {@link BeanMeta} itself no longer references {@link Marshalled}.
+ * Returns <jk>null</jk> if no annotation supplies one — the caller falls back to
+ * {@link BeanConfigContext#getBeanTypePropertyName()}.
*
- * @param config The bean-modeling configuration (used to access the annotation provider and the fallback default).
+ * @param config The bean-modeling configuration (used to access the annotation provider).
* @param classInfo The bean's class info.
- * @return The resolved type property name. Never <jk>null</jk>.
+ * @return The resolved type property name, or <jk>null</jk> when no annotation supplies one.
*/
- static String resolveTypePropertyName(BeanConfigContext config, ClassInfo classInfo) {
+ @Override
+ public String resolveTypePropertyName(BeanConfigContext config, ClassInfo classInfo) {
return config.getAnnotationProvider().find(Marshalled.class, classInfo).stream()
.map(x -> x.inner().typePropertyName())
.filter(Utils::ne)
.findFirst()
- .orElseGet(config::getBeanTypePropertyName);
+ .orElse(null);
}
/**
@@ -193,7 +164,8 @@ final class MarshalledBeanMetaInitializer {
* @param classInfo The bean's class info.
* @return The configured type name, or <jk>null</jk> if not set.
*/
- static String findMarshalledTypeName(BeanConfigContext config, ClassInfo classInfo) {
+ @Override
+ public String findMarshalledTypeName(BeanConfigContext config, ClassInfo classInfo) {
return config.getAnnotationProvider().find(Marshalled.class, classInfo)
.stream()
.map(AnnotationInfo::inner)
@@ -214,7 +186,8 @@ final class MarshalledBeanMetaInitializer {
* @param classInfo The bean's class info.
* @return <jk>true</jk> if the class has either annotation.
*/
- static boolean hasBeanRegistrationAnnotation(BeanConfigContext config, ClassInfo classInfo) {
+ @Override
+ public boolean hasBeanRegistrationAnnotation(BeanConfigContext config, ClassInfo classInfo) {
var ap = config.getAnnotationProvider();
return ! ap.find(Marshalled.class, classInfo).isEmpty()
|| ! ap.find(BeanType.class, classInfo).isEmpty();
@@ -228,11 +201,12 @@ final class MarshalledBeanMetaInitializer {
* a {@link MarshalledFilter} (the only concrete {@link BeanFilter} implementation in-tree) built from the
* {@link Marshalled @Marshalled} and {@link BeanType @BeanType} annotations on the class.
*
- * @param cm The class meta for the bean class.
+ * @param cm The bean type info. Must be a marshalling-side {@link ClassMeta}.
* @return The bean filter, or <jk>null</jk> if no relevant annotations are present.
*/
- static <T> MarshalledFilter findMarshalledFilter(ClassMeta<T> cm) {
- var ap = cm.getMarshallingContext().getAnnotationProvider();
+ @Override
+ public BeanFilter buildBeanFilter(BeanTypeInfo<?> cm) {
+ var ap = ((ClassMeta<?>) cm).getMarshallingContext().getAnnotationProvider();
var l = ap.find(Marshalled.class, cm);
var bt = ap.find(BeanType.class, cm);
if (l.isEmpty() && bt.isEmpty())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledPropertyPostProcessor.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledPropertyPostProcessor.java
index 2265b8bd7e..5e12f1d71c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledPropertyPostProcessor.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledPropertyPostProcessor.java
@@ -25,6 +25,7 @@ import static org.apache.juneau.commons.utils.Utils.*;
import java.util.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.commons.bean.*;
import org.apache.juneau.commons.inject.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
@@ -56,10 +57,26 @@ import org.apache.juneau.swaps.*;
* (i.e. when {@link MarshallingContext} is non-null). The bean-modeling-only path
* ({@link BeanMeta#of(Class, BeanConfigContext)}) does not run this post-processor.
*/
-final class MarshalledPropertyPostProcessor {
+final class MarshalledPropertyPostProcessor implements BeanPropertyPostProcessor {
+
+ /** Singleton instance wired into {@link MarshallingContext}-built {@link BeanConfigContext}s. */
+ static final MarshalledPropertyPostProcessor INSTANCE = new MarshalledPropertyPostProcessor();
private MarshalledPropertyPostProcessor() {}
+ /**
+ * SPI entry point — narrows the opaque marshalling context and builder, then dispatches to {@link #process(MarshallingContext, BeanPropertyMeta.Builder)}.
+ *
+ * @param marshallingContext The marshalling-side context. Must not be <jk>null</jk> on the marshalling path.
+ * @param builder The bean-property builder. Must be a {@link BeanPropertyMeta.Builder}.
+ */
+ @Override
+ public void process(Object marshallingContext, Object builder) {
+ if (marshallingContext == null)
+ return;
+ process((MarshallingContext) marshallingContext, (BeanPropertyMeta.Builder) builder);
+ }
+
/**
* Applies {@code @MarshalledProp}/{@code @Swap} annotation effects to {@code b} using {@code bc} for
* {@link ClassMeta} resolution.
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 701cf8a0f8..60394a0417 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
@@ -3795,6 +3795,8 @@ public class MarshallingContext extends Context implements ConversionFinder, org
.notBeanClasses(notBeanClasses.stream().map(ClassInfo::inner).toList())
.beanStore(beanStore)
.annotationProvider(getAnnotationProvider())
+ .beanMetaInitializer(MarshalledBeanMetaInitializer.INSTANCE)
+ .beanPropertyPostProcessor(MarshalledPropertyPostProcessor.INSTANCE)
.build();
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseSession.java
index 2837e70da3..bcef3b78d7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshallingTraverseSession.java
@@ -28,6 +28,7 @@ import java.util.function.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.commons.collections.FluentMap;
import org.apache.juneau.commons.utils.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* ContextSession that lives for the duration of a single use of {@link MarshallingTraverseContext}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonBeanPropertyMeta.java
index e1bd1f223b..ec98c71033 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonBeanPropertyMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau.bson;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the BSON serializers and parsers pulled from the {@link org.apache.juneau.bson.annotation.Bson @Bson}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonMetaProvider.java
index 9cd695a5de..e2b9cd37d9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.bson;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link BsonClassMeta} and {@link BsonBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParser.java
index fd10c1796e..eaae0a6ba0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParser.java
@@ -25,6 +25,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses BSON (Binary JSON) into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParserSession.java
index 8479381d56..0ab231bb15 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonParserSession.java
@@ -27,6 +27,8 @@ import org.apache.juneau.collections.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link BsonParser}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializer.java
index 84ff62036d..9cdff4143f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializer.java
@@ -25,6 +25,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to BSON (Binary JSON).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializerSession.java
index 379fbb6589..45f2765143 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/bson/BsonSerializerSession.java
@@ -30,6 +30,9 @@ import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
+import org.apache.juneau.commons.bean.BeanPropertyValue;
/**
* Session object that lives for the duration of a single use of {@link BsonSerializer}.
@@ -236,7 +239,7 @@ public class BsonSerializerSession extends OutputStreamSerializerSession {
for (var x : values) {
var pMeta = x.getMeta();
if (pMeta.canRead())
- writeElement(out, x.getName(), x.getValue(), x.getClassMeta(), pMeta);
+ writeElement(out, x.getName(), x.getValue(), (ClassMeta<?>) x.getClassMeta(), pMeta);
}
}
@@ -274,7 +277,7 @@ public class BsonSerializerSession extends OutputStreamSerializerSession {
}
private boolean willRecurse(BeanPropertyValue v) throws SerializeException {
- var aType = push2(v.getName(), v.getValue(), v.getClassMeta());
+ var aType = push2(v.getName(), v.getValue(), (ClassMeta<?>) v.getClassMeta());
if (nn(aType))
pop();
return aType == null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborBeanPropertyMeta.java
index da3a064ac2..e3872cc475 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.cbor;
import org.apache.juneau.*;
import org.apache.juneau.cbor.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the CBOR serializers and parsers pulled from the {@link Cbor @Cbor}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborMetaProvider.java
index 4f5c3df9a0..6cbdc14a7e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.cbor;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link CborClassMeta} and {@link CborBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParser.java
index fb87605dd0..8d248ca6fd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParser.java
@@ -24,6 +24,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses CBOR streams (RFC 8949) into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParserSession.java
index 30f02df825..9db05197b4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborParserSession.java
@@ -33,6 +33,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link CborParser}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializer.java
index d5b74ed2a6..f1c190df04 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializer.java
@@ -25,6 +25,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to CBOR (RFC 8949).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializerSession.java
index 6df3d128e3..0b5a12ae3d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cbor/CborSerializerSession.java
@@ -32,6 +32,9 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
+import org.apache.juneau.commons.bean.BeanPropertyValue;
/**
* Session object that lives for the duration of a single use of {@link CborSerializer}.
@@ -317,7 +320,7 @@ public class CborSerializerSession extends OutputStreamSerializerSession {
values.forEach(x -> {
BeanPropertyMeta pMeta = x.getMeta();
if (pMeta.canRead()) {
- var cMeta = x.getClassMeta();
+ ClassMeta<?> cMeta = (ClassMeta<?>) x.getClassMeta();
String key = x.getName();
Object value = x.getValue();
serializeAnything(out, key, null, null, null);
@@ -364,7 +367,7 @@ public class CborSerializerSession extends OutputStreamSerializerSession {
}
private boolean willRecurse(BeanPropertyValue v) throws SerializeException {
- var aType = push2(v.getName(), v.getValue(), v.getClassMeta());
+ var aType = push2(v.getName(), v.getValue(), (ClassMeta<?>) v.getClassMeta());
if (nn(aType))
pop();
return aType == null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
index 0f7e5696f1..62884700de 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
@@ -37,6 +37,7 @@ import org.apache.juneau.objecttools.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.swap.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Java implementation of a JSON object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
index c37a891d21..3567d1c7fb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.csv;
import org.apache.juneau.*;
import org.apache.juneau.csv.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the CSV serializers and parsers pulled from the {@link Csv @Csv}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
index 46db13566d..5e9195181b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.csv;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link CsvClassMeta} and {@link CsvBeanPropertyMeta} objects.
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 af669c9da0..bb85866ada 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses CSV (Comma Separated Values) input into Java objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
index 8dc164a999..09a05f58e1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserSession.java
@@ -16,6 +16,7 @@
*/
package org.apache.juneau.csv;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
import org.apache.juneau.commons.http.MediaType;
import static org.apache.juneau.commons.utils.CollectionUtils.*;
import static org.apache.juneau.commons.utils.StringUtils.*;
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 006c043669..ae9f943c76 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to CSV (Comma Separated Values) format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
index 92854fbedb..34f53e9cad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java
@@ -40,6 +40,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link CsvSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonBeanPropertyMeta.java
index 4e6bb2bdcd..b5ed4d4fd0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonBeanPropertyMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau.hjson;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to Hjson serializers and parsers.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonMetaProvider.java
index b79e94a83f..4c8f12af86 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.hjson;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link HjsonClassMeta} and {@link HjsonBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParser.java
index 613d9b2e6f..b273c15029 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParser.java
@@ -22,6 +22,7 @@ import org.apache.juneau.*;
import org.apache.juneau.collections.JsonList;
import org.apache.juneau.collections.JsonMap;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses Hjson (Human JSON) text into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParserSession.java
index e012a26a9a..ed61dd9893 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonParserSession.java
@@ -26,6 +26,7 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.reflect.ExecutableException;
import org.apache.juneau.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session for parsing Hjson format into POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializer.java
index 8e3a3cc039..e6cb7eeee5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializer.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.AssertionUtils.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to Hjson (Human JSON).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializerSession.java
index d5a691e361..a254e19902 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hjson/HjsonSerializerSession.java
@@ -28,6 +28,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.lang.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for serializing objects to Hjson format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconBeanPropertyMeta.java
index 22107e86a2..d75bbd2769 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconBeanPropertyMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau.hocon;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to HOCON serializers and parsers.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconMetaProvider.java
index a2f6e317f1..44e5579de7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.hocon;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link HoconClassMeta} and {@link HoconBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParser.java
index 63a35d6649..65b613a262 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParser.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.AssertionUtils.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses HOCON (Human-Optimized Config Object Notation) text into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParserSession.java
index eeba3ef282..2f6aa76521 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconParserSession.java
@@ -26,6 +26,7 @@ import org.apache.juneau.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.commons.reflect.ExecutableException;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session for parsing HOCON format into POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializer.java
index 89664557cb..edf93a5b9d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializer.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.AssertionUtils.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to HOCON (Human-Optimized Config Object Notation).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializerSession.java
index 7f7bed1e4b..690c60e602 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/hocon/HoconSerializerSession.java
@@ -28,6 +28,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.lang.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for serializing objects to HOCON format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index a2b716cf13..94a7be36fc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -22,6 +22,7 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.commons.inject.*;
import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the HTML serializers and parsers pulled from the {@link Html @Html}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
index 1eaeda83a3..d8f8b00645 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.html;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link HtmlClassMeta} and {@link HtmlBeanPropertyMeta} objects.
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 5712a70927..d7224e6cdb 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses text generated by the {@link HtmlSerializer} class back into a POJO model.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index a401be1af6..1adf0c95b0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -42,6 +42,9 @@ import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMapEntry;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* ContextSession object that lives for the duration of a single use of {@link HtmlParser}.
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 02c3ac7bdd..a30c065fb0 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
@@ -33,6 +33,7 @@ import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.html.annotation.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to HTML.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniBeanPropertyMeta.java
index dcb97169e5..3cf84630ac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniBeanPropertyMeta.java
@@ -19,6 +19,7 @@ package org.apache.juneau.ini;
import org.apache.juneau.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.ini.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to INI serializers and parsers, from {@link Ini @Ini}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniMetaProvider.java
index e48f2ab233..30ee48b9e0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.ini;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link IniClassMeta} and {@link IniBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParser.java
index 41f7078b08..d336688f87 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParser.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.AssertionUtils.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses INI-formatted text into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParserSession.java
index 11cb514dff..d417959142 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniParserSession.java
@@ -30,6 +30,7 @@ import org.apache.juneau.json.*;
import org.apache.juneau.json5.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session for parsing INI format into POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializer.java
index 770e49f167..c9c82656e0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializer.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.AssertionUtils.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to INI format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
index 080ee15dd3..eddaf30fba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
@@ -29,6 +29,8 @@ import org.apache.juneau.json.*;
import org.apache.juneau.json5.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for serializing objects to INI format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
index 92a9d8e054..1c569591d3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
@@ -24,6 +24,9 @@ import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMapEntry;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Represents a wrapped {@link BeanMap} where property values can be overridden, removed, or reordered without
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jcs/JcsSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jcs/JcsSerializerSession.java
index 8fb3e0e96e..69934e7544 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jcs/JcsSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jcs/JcsSerializerSession.java
@@ -27,6 +27,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.lang.*;
import org.apache.juneau.json.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object for {@link JcsSerializer} that produces RFC 8785 canonical JSON.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
index 92c3480237..5605e87297 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.json;
import org.apache.juneau.*;
import org.apache.juneau.json.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the JSON serializers and parsers pulled from the {@link Json @Json}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
index d341858354..447f2fb527 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.json;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link JsonClassMeta} and {@link JsonBeanPropertyMeta} objects.
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 60e195be5f..35a9783377 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
@@ -32,6 +32,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.json5.Json5Parser;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses any valid RFC 8259 JSON text into a POJO model.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 3cebc8f3c1..35ea54b726 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -37,6 +37,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link JsonParser}.
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 e62f5d9576..48975bef38 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
@@ -28,6 +28,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.jsonschema.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO metadata to HTTP responses as JSON-Schema.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
index d4ce042a38..140ae5fbd7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerSession.java
@@ -28,6 +28,7 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.jsonschema.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link JsonSchemaSerializer}.
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 eb9e9125d1..4d658e852a 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
@@ -32,6 +32,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.json5.Json5Serializer;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to RFC 8259 JSON.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
index 9e2c9e2517..34b8c22ac7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
@@ -33,6 +33,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link JsonSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
index 4668bc1564..4fc7ecb3d2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
@@ -23,6 +23,7 @@ import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.commons.annotation.Schema;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the JSON-Schema pulled from the {@link Schema @Schema} annotation
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 fbad360ac5..928e3b4fb9 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
@@ -36,6 +36,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.json.*;
import org.apache.juneau.json5.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Generates JSON-schema metadata about POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index d62d04d3ec..6c3d7b6278 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -35,6 +35,8 @@ import org.apache.juneau.json.*;
import org.apache.juneau.json5.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link JsonSchemaSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
index a531dd1ba2..b3987fb261 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.jsonschema;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link JsonSchemaClassMeta} and {@link JsonSchemaBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownBeanPropertyMeta.java
index d491f9c688..de18ceb50b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownBeanPropertyMeta.java
@@ -19,6 +19,7 @@ package org.apache.juneau.markdown;
import org.apache.juneau.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.markdown.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the Markdown serializers and parsers pulled from the
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownDocSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownDocSerializerSession.java
index 67ff5bcde4..65ccc06490 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownDocSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownDocSerializerSession.java
@@ -31,6 +31,7 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.swap.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session object for {@link MarkdownDocSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownMetaProvider.java
index 59c101c547..c09c21f50e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.markdown;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link MarkdownClassMeta} and {@link MarkdownBeanPropertyMeta} objects.
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 aceaa8ad81..f1d5fdd936 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
@@ -30,6 +30,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.json5.Json5Parser;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses Markdown fragment-mode output (tables and lists) back to POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
index 2b0d8eca1c..b8b320933d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
@@ -31,6 +31,7 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.json.*;
import org.apache.juneau.json5.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object for {@link MarkdownParser}.
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 6fa9deec64..e7a7a9685c 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to Markdown (fragment mode: tables and lists).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializerSession.java
index bdf680f573..19cebfc223 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownSerializerSession.java
@@ -33,6 +33,9 @@ import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMapEntry;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object for {@link MarkdownSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
index 75f93aa36b..11669c9e1d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.msgpack;
import org.apache.juneau.*;
import org.apache.juneau.msgpack.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the MessagePack serializers and parsers pulled from the {@link MsgPack @MsgPack}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
index 259b9092d3..4292e359b2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.msgpack;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link MsgPackClassMeta} and {@link MsgPackBeanPropertyMeta} objects.
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 f82d96277f..a617037c31 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
@@ -28,6 +28,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses a MessagePack stream into a POJO model.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
index bd71e7c9d1..15840e1a4d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
@@ -33,6 +33,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link MsgPackParser}.
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 b1f310aa66..92635e5c7b 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to MessagePack.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
index 6f8c09b4e3..402e533649 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
@@ -32,6 +32,9 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
+import org.apache.juneau.commons.bean.BeanPropertyValue;
/**
* Session object that lives for the duration of a single use of {@link MsgPackSerializer}.
@@ -325,7 +328,7 @@ public class MsgPackSerializerSession extends OutputStreamSerializerSession {
values.forEach(x -> {
BeanPropertyMeta pMeta = x.getMeta();
if (pMeta.canRead()) {
- var cMeta = x.getClassMeta();
+ ClassMeta<?> cMeta = (ClassMeta<?>) x.getClassMeta();
String key = x.getName();
Object value = x.getValue();
serializeAnything(out, key, null, null, null);
@@ -374,7 +377,7 @@ public class MsgPackSerializerSession extends OutputStreamSerializerSession {
}
private boolean willRecurse(BeanPropertyValue v) throws SerializeException {
- var aType = push2(v.getName(), v.getValue(), v.getClassMeta());
+ var aType = push2(v.getName(), v.getValue(), (ClassMeta<?>) v.getClassMeta());
if (nn(aType))
pop();
return aType == null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
index 23abfdfe27..dbbb143d25 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.oapi;
import org.apache.juneau.*;
import org.apache.juneau.oapi.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the OpenAPI serializers and parsers pulled from the {@link OpenApi @OpenApi}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
index 8c9db9a5dc..4e3ebb97b7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.oapi;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link OpenApiClassMeta} and {@link OpenApiBeanPropertyMeta} objects.
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 c9d28d3e7e..3832f9c2ab 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.commons.httppart.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* OpenAPI part parser.
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 80b1eaac05..0be16a159d 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.commons.httppart.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJOs to values suitable for transmission as HTTP headers, query/form-data parameters, and path variables.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSearcher.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSearcher.java
index 608002ccbf..f1d2d35551 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSearcher.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSearcher.java
@@ -23,6 +23,7 @@ import java.lang.reflect.*;
import java.util.*;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* POJO model searcher.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
index 8a9d165e71..dd7ca5627d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
@@ -23,6 +23,7 @@ import java.util.*;
import org.apache.juneau.*;
import org.apache.juneau.internal.*;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* POJO model viewer.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetBeanPropertyMeta.java
index 534f83eebf..df499fe4b0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetBeanPropertyMeta.java
@@ -17,6 +17,7 @@
package org.apache.juneau.parquet;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to Parquet serializers and parsers.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetMetaProvider.java
index 6226966ab4..fbc8848f10 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.parquet;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link ParquetClassMeta} and {@link ParquetBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParser.java
index cbf3399173..39c5752e5f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParser.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.InputStreamParser;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses Apache Parquet binary data into bean collections.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSchemaBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSchemaBuilder.java
index b56fd56535..5cdfede964 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSchemaBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSchemaBuilder.java
@@ -32,10 +32,10 @@ import java.util.Set;
import java.util.UUID;
import org.apache.juneau.MarshallingContext;
-import org.apache.juneau.BeanPropertyMeta;
import org.apache.juneau.ClassMeta;
import org.apache.juneau.annotation.ParentProperty;
import org.apache.juneau.commons.reflect.AnnotationProvider;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Builds Parquet schema (list of SchemaElement) from Juneau bean ClassMeta.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializer.java
index 254a613acb..d64a2a162f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializer.java
@@ -25,6 +25,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes bean collections to Apache Parquet binary format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializerSession.java
index 52495652be..68404f8a9a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetSerializerSession.java
@@ -40,12 +40,12 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
-import org.apache.juneau.BeanMap;
import org.apache.juneau.ClassMeta;
import org.apache.juneau.serializer.OutputStreamSerializerSession;
import org.apache.juneau.serializer.SerializeException;
import org.apache.juneau.serializer.SerializerPipe;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session for {@link ParquetSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
index 65182faf5a..63533be505 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
@@ -20,6 +20,7 @@ import static org.apache.juneau.commons.utils.ThrowableUtils.*;
import static org.apache.juneau.commons.utils.Utils.*;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Class for listening for certain parse events during a document parse.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 4f6c49bef7..677e895077 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -41,6 +41,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.objecttools.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link Parser}.
@@ -1079,7 +1081,7 @@ public class ParserSession extends MarshallingSession {
// Resolve via @MarshalledProp(dictionary={})
if (nn(pMeta)) {
- br = pMeta.getBeanRegistry();
+ br = (BeanRegistry) pMeta.getBeanRegistry();
if (nn(br) && br.hasName(typeName))
return br.getClassMeta(typeName);
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
index 4279b1cf61..3995dcce9c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.plaintext;
import org.apache.juneau.*;
import org.apache.juneau.plaintext.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the PlainText serializers and parsers pulled from the {@link PlainText @PlainText}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
index fc2b3b6942..e3dbb34ff4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.plaintext;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link PlainTextClassMeta} and {@link PlainTextBeanPropertyMeta} objects.
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 56a235480b..c2934cb0f4 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
@@ -30,6 +30,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parsers HTTP plain text request bodies into Group 5 POJOs.
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 0843512921..d19adabe99 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
@@ -30,6 +30,7 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.swap.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJOs to plain text using just the <c>toString()</c> method on the serialized object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoBeanPropertyMeta.java
index a387596efd..4558155eb3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoBeanPropertyMeta.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.commons.utils.Utils.*;
import org.apache.juneau.*;
import org.apache.juneau.proto.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the Proto serializers and parsers pulled from the {@link Proto @Proto}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoMetaProvider.java
index 23b0db456f..24a774d3ad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.proto;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link ProtoClassMeta} and {@link ProtoBeanPropertyMeta} objects.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParser.java
index e77722e645..e3b83c019e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParser.java
@@ -24,6 +24,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses Protobuf Text Format into a POJO model.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParserSession.java
index 3af2dc4521..1a1e7153ce 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoParserSession.java
@@ -27,6 +27,7 @@ import org.apache.juneau.collections.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
/**
* Session for parsing Protobuf Text Format into POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializer.java
index 9b122aaedd..57c5c09e68 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializer.java
@@ -24,6 +24,7 @@ import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to Protobuf Text Format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializerSession.java
index 2372544fe7..c7fc1d5182 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/proto/ProtoSerializerSession.java
@@ -27,6 +27,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.lang.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for serializing objects to Protobuf Text Format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
index e2cd9ed53c..73d2d8d4d5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
@@ -20,6 +20,7 @@ import static org.apache.juneau.commons.utils.ThrowableUtils.*;
import static org.apache.juneau.commons.utils.Utils.*;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Class for listening for serialize events during a serialization.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 0525211b24..7801ced5b3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -40,6 +40,10 @@ import org.apache.juneau.soap.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
+import org.apache.juneau.commons.bean.BeanPropertyValue;
/**
* Serializer session that lives for the duration of a single use of {@link Serializer}.
@@ -1077,7 +1081,7 @@ public class SerializerSession extends MarshallingTraverseSession {
}
// Then look on the bean property.
- br = pMeta == null ? null : pMeta.getBeanRegistry();
+ br = pMeta == null ? null : (BeanRegistry) pMeta.getBeanRegistry();
if (nn(br)) {
tn = br.getTypeName(aType);
if (nn(tn) && ! tn.equals(eTypeTn))
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
index ddf6add139..9cdcd868df 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.soap;
import org.apache.juneau.*;
import org.apache.juneau.soap.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the SOAP/XML serializers and parsers pulled from the {@link SoapXml @SoapXml}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
index 0827ff6cd2..e4058004e8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.soap;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link SoapXmlClassMeta} and {@link SoapXmlBeanPropertyMeta} objects.
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 1d92a6ffd6..253cfe688e 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.xml.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJOs to HTTP responses as XML+SOAP.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlParserSession.java
index 07db20e614..98728e13d8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlParserSession.java
@@ -27,6 +27,8 @@ import org.apache.juneau.collections.JsonMap;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for parsing TOML into POJOs.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlSerializerSession.java
index aa9ccba5bd..f11e32823d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/toml/TomlSerializerSession.java
@@ -27,6 +27,8 @@ import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session for serializing objects to TOML format.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
index a9b12b408c..ff24ffe82e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.uon;
import org.apache.juneau.*;
import org.apache.juneau.uon.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the UON serializers and parsers pulled from the {@link Uon @Uon}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
index 3123fb4466..d45a3561e8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.uon;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link UonClassMeta} and {@link UonBeanPropertyMeta} objects.
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 cedb4cec65..2a139bf033 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
@@ -33,6 +33,7 @@ import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.commons.httppart.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses UON (a notation for URL-encoded query parameter values) text into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index eb59f5d715..0a23a019a7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -39,6 +39,8 @@ import org.apache.juneau.commons.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link UonParser}.
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 5ba2658ab5..793a0e4e3d 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
@@ -32,6 +32,7 @@ import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.commons.httppart.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to UON (a notation for URL-encoded query parameter values).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
index 7d66567bd2..0c14259e4e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
@@ -36,6 +36,8 @@ import org.apache.juneau.commons.conversion.BasicConverter;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link UonSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
index aa82866a56..b679df2c3e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
@@ -18,6 +18,7 @@ package org.apache.juneau.urlencoding;
import org.apache.juneau.*;
import org.apache.juneau.urlencoding.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the URL-Encoding serializers and parsers pulled from the {@link UrlEncoding @UrlEncoding}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
index 4fff0bd093..1e3acee1ec 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
@@ -17,6 +17,7 @@
package org.apache.juneau.urlencoding;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link UrlEncodingClassMeta} and {@link UrlEncodingBeanPropertyMeta} objects.
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 b077461d3a..a2b85a6d95 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses URL-encoded text into POJO models.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
index ea5407aa50..cc4a0ad04e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
@@ -34,6 +34,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link UrlEncodingParser}.
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 73dded5d23..e2d74d856c 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
@@ -29,6 +29,7 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to URL-encoded notation with UON-encoded values (a notation for URL-encoded query paramter values).
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 1babb38907..e3a6873a39 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -32,6 +32,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.uon.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link UrlEncodingSerializer}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
index fdd1eaa7f0..c33f03e013 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
@@ -27,6 +27,8 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.lang.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.xml.annotation.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on beans specific to the XML serializers and parsers pulled from the {@link Xml @Xml} annotation on the
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
index 00eb7bb0c4..11e90af2c5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
@@ -24,6 +24,7 @@ import org.apache.juneau.*;
import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.xml.annotation.*;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Metadata on bean properties specific to the XML serializers and parsers pulled from the {@link Xml @Xml} annotation
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
index 97e99d1986..8aaf1953c9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
@@ -17,6 +17,8 @@
package org.apache.juneau.xml;
import org.apache.juneau.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Interface for providing access to {@link XmlClassMeta}, {@link XmlBeanMeta}, and {@link XmlBeanPropertyMeta} objects.
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 743cf5ec1e..6d5a4d67d5 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
@@ -35,6 +35,8 @@ import org.apache.juneau.commons.collections.*;
import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.parser.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Parses text generated by the {@link XmlSerializer} class back into a POJO model.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 52fce04925..8246ad0f62 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -40,6 +40,9 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link XmlParser}.
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 6d9a45fdc1..8cfcd58c64 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
@@ -32,6 +32,8 @@ import org.apache.juneau.commons.function.*;
import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.json.*;
import org.apache.juneau.serializer.*;
+import org.apache.juneau.commons.bean.BeanMeta;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Serializes POJO models to XML.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index 13b46ad88c..c27bc4bc27 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -513,7 +513,7 @@ public class XmlSerializerSession extends WriterSerializerSession {
if (attrs.contains(n) || attrs.contains("*") || n.equals(attrsProperty)) {
var pMeta = p.getMeta();
if (pMeta.canRead()) {
- var kv = getPropertyKeyValueIfNotIgnored(p, pMeta, p.getClassMeta());
+ var kv = getPropertyKeyValueIfNotIgnored(p, pMeta, (ClassMeta<?>) p.getClassMeta());
if (kv.isEmpty())
continue;
var key = kv.get().getKey();
@@ -549,12 +549,12 @@ public class XmlSerializerSession extends WriterSerializerSession {
for (var p : lp) {
BeanPropertyMeta pMeta = p.getMeta();
if (pMeta.canRead()) {
- var cMeta = p.getClassMeta();
+ ClassMeta<?> cMeta = (ClassMeta<?>) p.getClassMeta();
var n = p.getName();
if (n.equals(contentProperty)) {
content = p.getValue();
- contentType = p.getClassMeta();
+ contentType = (ClassMeta<?>) p.getClassMeta();
hasContent = true;
cf = xbm.getContentFormat();
if (cf.isOneOf(MIXED, MIXED_PWS, TEXT, TEXT_PWS, XMLTEXT))
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParserSession.java
index c42fa76175..18b3e8a4ce 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlParserSession.java
@@ -36,6 +36,8 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.utils.Iso8601Utils;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link YamlParser}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializerSession.java
index 0318f94764..63f99150f3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/YamlSerializerSession.java
@@ -32,6 +32,8 @@ import org.apache.juneau.commons.lang.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanPropertyMeta;
/**
* Session object that lives for the duration of a single use of {@link YamlSerializer}.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 08d75c0926..b7c8a4f409 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -16,6 +16,7 @@
*/
package org.apache.juneau.rest;
+import org.apache.juneau.commons.bean.BeanMeta;
import org.apache.juneau.commons.http.MediaType;
import org.apache.juneau.commons.http.StringRanges;
import static java.util.Optional.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanPropertyValue_Test.java b/juneau-utest/src/test/java/org/apache/juneau/BeanPropertyValue_Test.java
index 22387ba287..62a76d4138 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanPropertyValue_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanPropertyValue_Test.java
@@ -19,6 +19,7 @@ package org.apache.juneau;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.*;
+import org.apache.juneau.commons.bean.BeanPropertyValue;
class BeanPropertyValue_Test extends TestBase {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanProxyInvocationHandler_Test.java b/juneau-utest/src/test/java/org/apache/juneau/BeanProxyInvocationHandler_Test.java
index e268a2836f..833a28a333 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanProxyInvocationHandler_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanProxyInvocationHandler_Test.java
@@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.*;
import java.lang.reflect.*;
import org.junit.jupiter.api.*;
+import org.apache.juneau.commons.bean.BeanProxyInvocationHandler;
@SuppressWarnings({
"unchecked", // Cast from Object to T in proxy test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Test.java b/juneau-utest/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Test.java
index 5101ada344..d72f23ec2f 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Test.java
@@ -22,6 +22,8 @@ import java.util.*;
import org.apache.juneau.*;
import org.junit.jupiter.api.*;
+import org.apache.juneau.commons.bean.BeanMap;
+import org.apache.juneau.commons.bean.BeanMeta;
/**
* Tests the commons-side construction path of {@link BeanMeta} via
diff --git a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
index 803565c608..e46ea621b8 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
@@ -30,6 +30,7 @@ import org.apache.juneau.commons.reflect.*;
import org.apache.juneau.swap.*;
import org.apache.juneau.testutils.pojos.*;
import org.junit.jupiter.api.*;
+import org.apache.juneau.commons.bean.BeanMap;
@SuppressWarnings({
"serial", // Serialization not relevant for test beans
diff --git a/todo/TODO-5-bean-runtime-types-to-commons.md b/todo/TODO-5-bean-runtime-types-to-commons.md
index 7cab853f51..3903fb61d0 100644
--- a/todo/TODO-5-bean-runtime-types-to-commons.md
+++ b/todo/TODO-5-bean-runtime-types-to-commons.md
@@ -4,6 +4,63 @@ This is the remaining work from **Phase 5 of the bean-layer split**. Phase 5a (t
---
+## Status (Physical `git mv` LANDED — uncommitted)
+
+**All 5 remaining blockers cleared and the 7 bean-runtime files physically moved into `commons.bean`.** `juneau-commons` compiles standalone with no dependency on `juneau-marshall`. Full test suite (`scripts/test.py --test-only`) passes.
+
+### New file locations (post-`git mv`)
+
+| Old path | New path |
+| --- | --- |
+| `juneau-core/juneau-marshall/.../BeanMap.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMap.java` |
+| `juneau-core/juneau-marshall/.../BeanMapEntry.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java` |
+| `juneau-core/juneau-marshall/.../BeanMeta.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMeta.java` |
+| `juneau-core/juneau-marshall/.../BeanPropertyMeta.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyMeta.java` |
+| `juneau-core/juneau-marshall/.../BeanPropertyValue.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyValue.java` |
+| `juneau-core/juneau-marshall/.../BeanPropertyConsumer.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanPropertyConsumer.java` |
+| `juneau-core/juneau-marshall/.../BeanProxyInvocationHandler.java` | `juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanProxyInvocationHandler.java` |
+
+### Blockers resolved
+
+- **Blocker 1 (BeanPropertyValue.getClassMeta)** — Return type widened from `ClassMeta<?>` to `BeanTypeInfo<?>`. Marshalling-side call sites cast back to `ClassMeta<?>` where needed (~5 sites in serializer sessions).
+- **Blocker 2 (BeanPropertyMeta.getBeanRegistry)** — Return type widened from `BeanRegistry` to `BeanRegistryLookup` (commons SPI). Marshalling-side call sites cast back to `BeanRegistry` where the concrete type is required.
+- **Blocker 3 (BeanMeta.create signature)** — Factory method accepts `BeanTypeInfo<T>` instead of `ClassMeta<T>`. `ClassMeta<T>` still works as the argument because `ClassMeta extends BeanTypeInfo` (post Phase C Task 1).
+- **Blocker 4 (BeanMeta.getMarshallingContext)** — Picked **option (a)** — renamed to a new `Object`-returning accessor that holds the marshalling-side resolver, fronted by `BeanTypeInfo.getMarshallingContext()`. Marshalling-side `ClassMeta` provides a covariant `MarshallingContext`-typed override so existing callers compile unchanged.
+- **Blocker 5 (MarshalledBeanMetaInitializer / MarshalledPropertyPostProcessor SPI)** — Two new commons-side SPI interfaces:
+ - `org.apache.juneau.commons.bean.BeanMetaInitializer` — with `buildBeanRegistry(...)`, `findTypeNameInParents(...)`, `resolveTypePropertyName(...)`, `findMarshalledTypeName(...)`, `hasBeanRegistrationAnnotation(...)`, `buildBeanFilter(BeanTypeInfo<?>)`. Has a `NOOP` default. `MarshalledBeanMetaInitializer` (marshalling-side) implements it and exposes `INSTANCE`.
+ - `org.apache.juneau.commons.bean.BeanPropertyPostProcessor` — with `process(Object marshallingContext, Object builder)`. Has a `NOOP` default. `MarshalledPropertyPostProcessor` (marshalling-side) implements it and casts the inputs back to `MarshallingContext` / `BeanPropertyMeta.Builder` internally.
+ - `BeanConfigContext` exposes both via `getBeanMetaInitializer()` / `getBeanPropertyPostProcessor()`. `MarshallingContext` wires the marshalling-side instances in via `BeanConfigContext.create()`.
+ - `BeanMeta` calls `config.getBeanMetaInitializer().X(...)` and `config.getBeanPropertyPostProcessor().process(...)` instead of static helper calls.
+
+### Build / test status
+
+- `mvn clean compile -pl juneau-core/juneau-commons -am` — **GREEN** (standalone, no `juneau-marshall` dependency).
+- `mvn clean install -DskipTests` — **GREEN** (all 16 modules build).
+- `python3 scripts/test.py --test-only` — **GREEN** (full test suite passes).
+
+### Visibility changes required by the move
+
+Several previously-protected or package-private members had to be widened so that marshalling-side callers (and `juneau-marshall-rdf` extensions) can still reach them after the package boundary changed:
+
+- `BeanMeta.BeanMetaValue` record made `public` (and its `optBeanMeta()` accessor).
+- `BeanMeta` accessors `getConstructor()`, `getConstructorArgs()`, `hasConstructor()`, `newBean(Object)` widened `protected → public`.
+- `BeanMap` constructor `(T, BeanMeta<T>)` and `setMarshallingSession(BeanSession)` widened `protected → public`.
+- `BeanPropertyMeta.Builder` fields (`innerField`, `getter`, `setter`, `rawTypeMeta`, `swap`, `readTransform`, `writeTransform`, `dictionaryClasses`, `isUri`, `typeMeta`) widened package-private → `public` (consumed by `MarshalledPropertyPostProcessor`).
+- `BeanPropertyValue.properties()` widened `protected → public` (consumed by `BeanPropertyValue_Test`).
+
+### Import sweep counts (uncommitted working tree)
+
+- 141 files updated in the automated sweep that added `import org.apache.juneau.commons.bean.X` for the 7 moved classes.
+- 5 manual import fixups for files the sweep missed: `CsvParserSession`, `ParquetSerializerSession`, `YamlParserSession`, `ParquetSchemaBuilder`, `TomlParserSession`, plus two `juneau-marshall-rdf` parser sessions (`RdfParserSession`, `RdfStreamParserSession`) and one rest-server file (`RestRequest`).
+
+### Follow-up checkpoints (not part of this move)
+
+- Release notes / migration guide entries for the package move (`org.apache.juneau.Bean{Map,Meta,PropertyMeta,...}` → `org.apache.juneau.commons.bean.*`) in `juneau-docs/docs/pages/release-notes/9.5.0.md`.
+- `package-info.java` for `org.apache.juneau.commons.bean` — verify it covers the new arrivals.
+- Eventual: move `BeanRegistry` itself to commons (currently `BeanRegistry` implements `BeanRegistryLookup` from marshalling-side; deferred until type-resolution code is similarly decoupled).
+
+---
+
## Status (Phase C Task 5 Step F — import cleanup landed, uncommitted)
**Step F audit follow-up — Tasks 1–8 LANDED in the working tree (uncommitted).** Build + full test green (`scripts/test.py --full`). The 7 bean-runtime files now import only JDK packages + `org.apache.juneau.commons.*` (plus `org.apache.juneau.BeanMeta.MethodType.*` static self-import on `BeanMeta`).