Skip to content

Commit 2d0ed98

Browse files
authored
chore: Upgrade to Jackson 3.0.1 and remove workaround (#4108)
1 parent 6f7d344 commit 2d0ed98

File tree

2 files changed

+5
-97
lines changed

2 files changed

+5
-97
lines changed

packages/java/endpoint/src/main/java/com/vaadin/hilla/EndpointInvoker.java

Lines changed: 4 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import java.lang.reflect.InvocationTargetException;
4848
import java.lang.reflect.Method;
4949
import java.lang.reflect.Parameter;
50-
import java.lang.reflect.ParameterizedType;
5150
import java.lang.reflect.Type;
5251
import java.security.Principal;
5352

@@ -126,81 +125,6 @@ private static Logger getLogger() {
126125
return LoggerFactory.getLogger(EndpointInvoker.class);
127126
}
128127

129-
private boolean needsFloatToIntCoercion(JsonNode node, Type targetType) {
130-
if (node == null) {
131-
return false;
132-
}
133-
134-
// Direct number node
135-
if (node.isNumber() && isIntegralType(targetType)
136-
&& !node.canConvertToExactIntegral()) {
137-
return true;
138-
}
139-
140-
// Array node containing floats to be converted to integral types
141-
if (node.isArray() && isIntegralType(targetType)) {
142-
for (JsonNode element : node) {
143-
if (element.isNumber()
144-
&& !element.canConvertToExactIntegral()) {
145-
return true;
146-
}
147-
}
148-
}
149-
150-
// Object node (for Maps and complex objects)
151-
if (node.isObject() && targetType instanceof ParameterizedType) {
152-
Type rawType = ((ParameterizedType) targetType).getRawType();
153-
if (rawType instanceof Class<?>
154-
&& Map.class.isAssignableFrom((Class<?>) rawType)) {
155-
Type[] args = ((ParameterizedType) targetType)
156-
.getActualTypeArguments();
157-
if (args.length > 1 && isIntegralType(args[1])) {
158-
// Check if any map values need conversion
159-
for (JsonNode value : node) {
160-
if (value.isNumber()
161-
&& !value.canConvertToExactIntegral()) {
162-
return true;
163-
}
164-
}
165-
}
166-
}
167-
}
168-
169-
return false;
170-
}
171-
172-
private boolean isIntegralType(Type type) {
173-
if (type instanceof Class<?>) {
174-
Class<?> cls = (Class<?>) type;
175-
if (cls.isArray()) {
176-
// Handle array types
177-
return isIntegralType(cls.getComponentType());
178-
}
179-
return cls == int.class || cls == Integer.class || cls == long.class
180-
|| cls == Long.class || cls == short.class
181-
|| cls == Short.class || cls == byte.class
182-
|| cls == Byte.class || cls == java.math.BigInteger.class;
183-
} else if (type instanceof ParameterizedType) {
184-
Type rawType = ((ParameterizedType) type).getRawType();
185-
if (rawType instanceof Class<?>) {
186-
Class<?> cls = (Class<?>) rawType;
187-
// Check for collections of integral types
188-
if (Collection.class.isAssignableFrom(cls)
189-
|| Map.class.isAssignableFrom(cls)) {
190-
Type[] args = ((ParameterizedType) type)
191-
.getActualTypeArguments();
192-
if (args.length > 0) {
193-
// For Map, check the value type (args[1])
194-
int checkIndex = Map.class.isAssignableFrom(cls)
195-
&& args.length > 1 ? 1 : 0;
196-
return isIntegralType(args[checkIndex]);
197-
}
198-
}
199-
}
200-
}
201-
return false;
202-
}
203-
204128
/**
205129
* Gets the return type of the given method.
206130
*
@@ -418,26 +342,10 @@ private Object[] getVaadinEndpointParameters(
418342
Type parameterType = javaParameters[i];
419343
Type incomingType = parameterType;
420344
try {
421-
JsonNode parameterNode = requestParameters
422-
.get(parameterNames[i]);
423-
Object parameter;
424-
425-
// Jackson 3 limitation: TreeTraversingParser doesn't respect
426-
// ACCEPT_FLOAT_AS_INT
427-
// when deserializing from JsonNode. Convert to string for
428-
// numeric coercion.
429-
if (needsFloatToIntCoercion(parameterNode, parameterType)) {
430-
// Convert JsonNode to string to allow float-to-int coercion
431-
parameter = endpointObjectMapper
432-
.readerFor(endpointObjectMapper.getTypeFactory()
433-
.constructType(incomingType))
434-
.readValue(parameterNode.toString());
435-
} else {
436-
parameter = endpointObjectMapper
437-
.readerFor(endpointObjectMapper.getTypeFactory()
438-
.constructType(incomingType))
439-
.readValue(parameterNode);
440-
}
345+
Object parameter = endpointObjectMapper
346+
.readerFor(endpointObjectMapper.getTypeFactory()
347+
.constructType(incomingType))
348+
.readValue(requestParameters.get(parameterNames[i]));
441349
endpointParameters[i] = parameter;
442350

443351
if (parameter != null) {

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
<swagger.parser.v3.version>2.1.15</swagger.parser.v3.version>
8888
<jackson2.version>2.20.0</jackson2.version>
8989
<jackson-annotations.version>2.20</jackson-annotations.version>
90-
<jackson.version>3.0.0-rc9</jackson.version>
90+
<jackson.version>3.0.1</jackson.version>
9191
<junit.version>5.10.1</junit.version>
9292
<mockito.version>4.5.0</mockito.version>
9393
<flow.version>25.0-SNAPSHOT</flow.version>

0 commit comments

Comments
 (0)