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
The following commit(s) were added to refs/heads/master by this push:
new 0e3029e506 Marshall module improvements
0e3029e506 is described below
commit 0e3029e5061a1ed322bbb48713213780cbf8adf6
Author: James Bognar <[email protected]>
AuthorDate: Thu Dec 4 13:36:41 2025 -0800
Marshall module improvements
---
.../apache/juneau/commons/reflect/ClassInfo.java | 2 +-
.../src/main/java/org/apache/juneau/ClassMeta.java | 24 +++++++++++++++++++---
.../org/apache/juneau/html/HtmlParserSession.java | 2 +-
.../apache/juneau/html/HtmlSerializerSession.java | 4 ++--
.../jsonschema/JsonSchemaGeneratorSession.java | 2 +-
.../juneau/objecttools/ObjectIntrospector.java | 2 +-
.../org/apache/juneau/objecttools/ObjectRest.java | 2 +-
7 files changed, 28 insertions(+), 10 deletions(-)
diff --git
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
index 0bbf17bdac..18a0b299b3 100644
---
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
+++
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
@@ -65,7 +65,7 @@ import org.apache.juneau.commons.collections.*;
*
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
-public class ClassInfo extends ElementInfo implements Annotatable {
+public class ClassInfo extends ElementInfo implements Annotatable, Type {
private static final Cache<Class,ClassInfoTyped> CACHE =
Cache.of(Class.class, ClassInfoTyped.class).build();
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 17ccb326cc..78c5526ae1 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
@@ -64,7 +64,7 @@ import org.apache.juneau.swap.*;
* @param <T> The class type of the wrapped class.
*/
@Bean(properties =
"innerClass,classCategory,elementType,keyType,valueType,notABeanReason,initException,beanMeta")
-public class ClassMeta<T> implements Type {
+public class ClassMeta<T> extends ClassInfoTyped<T> {
private static final AnnotationProvider AP =
AnnotationProvider.INSTANCE;
@@ -605,6 +605,7 @@ public class ClassMeta<T> implements Type {
*/
@SuppressWarnings("unchecked")
ClassMeta(Class<T> innerClass, BeanContext beanContext,
ObjectSwap<T,?>[] swaps, ObjectSwap<?,?>[] childSwaps) {
+ super(innerClass);
this.innerClass = innerClass;
this.info = info(innerClass);
this.beanContext = beanContext;
@@ -663,6 +664,7 @@ public class ClassMeta<T> implements Type {
*/
@SuppressWarnings("unchecked")
ClassMeta(ClassMeta<?>[] args) {
+ super((Class<T>)Object[].class);
this.innerClass = (Class<T>)Object[].class;
this.info = info(innerClass);
this.args = args;
@@ -708,6 +710,7 @@ public class ClassMeta<T> implements Type {
* Used for creating Map and Collection class metas that shouldn't be
cached.
*/
ClassMeta(ClassMeta<T> mainType, ClassMeta<?> keyType, ClassMeta<?>
valueType, ClassMeta<?> elementType) {
+ super(mainType.innerClass);
this.innerClass = mainType.innerClass;
this.info = mainType.info;
this.implClass = mainType.implClass;
@@ -818,6 +821,7 @@ public class ClassMeta<T> implements Type {
* @param o The object to cast.
* @return The cast object.
*/
+ @Override
public T cast(Object o) {
return this.innerClass.cast(o);
}
@@ -1101,6 +1105,7 @@ public class ClassMeta<T> implements Type {
*
* @return The name of the inner class.
*/
+ @Override
public String getName() { return innerClass.getName(); }
/**
@@ -1147,6 +1152,7 @@ public class ClassMeta<T> implements Type {
*
* @return The default value, or <jk>null</jk> if this class type is
not a primitive.
*/
+ @Override
@SuppressWarnings("unchecked")
public T getPrimitiveDefault() { return (T)primitiveDefault; }
@@ -1183,7 +1189,7 @@ public class ClassMeta<T> implements Type {
*
* @return The public methods on this class.
*/
- public Map<String,Method> getPublicMethods() { return publicMethods; }
+ public Map<String,Method> getPublicMethods2() { return publicMethods; }
/**
* Returns the transform for this class for creating instances from a
Reader.
@@ -1283,7 +1289,7 @@ public class ClassMeta<T> implements Type {
* @param a The annotation to check for.
* @return <jk>true</jk> if the inner class has the annotation.
*/
- public boolean hasAnnotation(Class<? extends Annotation> a) {
+ public boolean hasAnnotation2(Class<? extends Annotation> a) {
return nn(getLastAnnotation(a));
}
@@ -1365,6 +1371,7 @@ public class ClassMeta<T> implements Type {
* @param value The value to check against.
* @return <jk>true</jk> if the specified class is an exact match for
this metadata.
*/
+ @Override
public boolean is(Class<?> value) {
return eq(innerClass, value);
}
@@ -1374,6 +1381,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is abstract.
*/
+ @Override
public boolean isAbstract() { return isAbstract; }
/**
@@ -1388,6 +1396,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is an array.
*/
+ @Override
public boolean isArray() { return cc == ARRAY; }
/**
@@ -1455,6 +1464,7 @@ public class ClassMeta<T> implements Type {
* @param c The class to test against.
* @return <jk>true</jk> if this metadata represents the specified type.
*/
+ @Override
public boolean isChildOf(Class<?> c) {
return info.isChildOf(c);
}
@@ -1464,6 +1474,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is {@link Class}.
*/
+ @Override
public boolean isClass() { return cc == ClassCategory.CLASS; }
/**
@@ -1478,6 +1489,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is a subclass of {@link
Collection} or is an array.
*/
+ @Override
public boolean isCollectionOrArray() { return cc == COLLECTION || cc ==
ARRAY; }
/**
@@ -1535,6 +1547,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is an {@link Enum}.
*/
+ @Override
public boolean isEnum() { return cc == ENUM; }
/**
@@ -1560,6 +1573,7 @@ public class ClassMeta<T> implements Type {
* @param o The object to check.
* @return <jk>true</jk> if the specified object is an instance of this
class.
*/
+ @Override
public boolean isInstance(Object o) {
if (nn(o))
return info.isParentOf(o.getClass()) || (isPrimitive()
&& info.getPrimitiveWrapper() == o.getClass());
@@ -1616,6 +1630,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is an inner class.
*/
+ @Override
public boolean isMemberClass() { return isMemberClass; }
/**
@@ -1673,6 +1688,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is a primitive.
*/
+ @Override
public boolean isPrimitive() { return innerClass.isPrimitive(); }
/**
@@ -1722,6 +1738,7 @@ public class ClassMeta<T> implements Type {
*
* @return <jk>true</jk> if this class is {@link Void} or <jk>void</jk>.
*/
+ @Override
public boolean isVoid() { return cc == VOID; }
/**
@@ -1789,6 +1806,7 @@ public class ClassMeta<T> implements Type {
* @return A new instance of the object, or <jk>null</jk> if there is
no no-arg constructor on the object.
* @throws ExecutableException Exception occurred on invoked
constructor/method/field.
*/
+ @Override
@SuppressWarnings("unchecked")
public T newInstance() throws ExecutableException {
if (isArray())
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 27f1ef6c0d..cbd28d67ac 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
@@ -255,7 +255,7 @@ public class HtmlParserSession extends XmlParserSession {
private <T> T parseAnchor(XmlReader r, ClassMeta<T> beanType) throws
IOException, ParseException, XMLStreamException {
String href = r.getAttributeValue(null, "href");
String name = getElementText(r);
- if (nn(beanType) && beanType.hasAnnotation(HtmlLink.class)) {
+ if (nn(beanType) && beanType.hasAnnotation2(HtmlLink.class)) {
var uriProperty = Value.<String>empty();
var nameProperty = Value.<String>empty();
beanType.forEachAnnotation(HtmlLink.class, x ->
isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 241b611d86..9c6ba9d842 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -356,7 +356,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
if (nn(swap))
cm1 = swap.getSwapClassMeta(this);
- if (cm1 == null || ! cm1.isMapOrBean() ||
cm1.hasAnnotation(HtmlLink.class))
+ if (cm1 == null || ! cm1.isMapOrBean() ||
cm1.hasAnnotation2(HtmlLink.class))
return null;
HtmlClassMeta cHtml = getHtmlClassMeta(cm1);
@@ -933,7 +933,7 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
} else if (sType.isBean()) {
BeanMap m = toBeanMap(o);
- if (aType.hasAnnotation(HtmlLink.class)) {
+ if (aType.hasAnnotation2(HtmlLink.class)) {
var uriProperty = Value.<String>empty();
var nameProperty =
Value.<String>empty();
aType.forEachAnnotation(HtmlLink.class,
x -> isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
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 6548bfc0a8..d4d2d68fa9 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
@@ -341,7 +341,7 @@ public class JsonSchemaGeneratorSession extends
BeanTraverseSession {
var jscm = (JsonSchemaClassMeta)null;
var objectSwapCM = objectSwap == null ? null :
getClassMeta(objectSwap.getClass());
- if (nn(objectSwapCM) &&
objectSwapCM.hasAnnotation(Schema.class))
+ if (nn(objectSwapCM) &&
objectSwapCM.hasAnnotation2(Schema.class))
jscm = getJsonSchemaClassMeta(objectSwapCM);
if (jscm == null)
jscm = getJsonSchemaClassMeta(sType);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
index a761943700..0ea52370cd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
@@ -239,7 +239,7 @@ public class ObjectIntrospector {
public Object invokeMethod(String method, String args) throws
NoSuchMethodException, IllegalArgumentException, InvocationTargetException,
IllegalAccessException, ParseException, IOException {
if (object == null)
return null;
- Method m =
parser.getBeanContext().getClassMeta(object.getClass()).getPublicMethods().get(method);
+ Method m =
parser.getBeanContext().getClassMeta(object.getClass()).getPublicMethods2().get(method);
if (m == null)
throw new NoSuchMethodException(method);
return invokeMethod(m, args == null ? null : new
StringReader(args));
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
index f4f724e850..42315263c5 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
@@ -595,7 +595,7 @@ public class ObjectRest {
var o = get(url);
if (o == null)
return null;
- return
session.getClassMeta(o.getClass()).getPublicMethods().keySet();
+ return
session.getClassMeta(o.getClass()).getPublicMethods2().keySet();
}
/**