diff --git a/extensions/funqy/funqy-server-common/runtime/src/main/java/io/quarkus/funqy/runtime/query/QueryObjectReader.java b/extensions/funqy/funqy-server-common/runtime/src/main/java/io/quarkus/funqy/runtime/query/QueryObjectReader.java index 0030569eaf8b0..3cc7dc9722207 100644 --- a/extensions/funqy/funqy-server-common/runtime/src/main/java/io/quarkus/funqy/runtime/query/QueryObjectReader.java +++ b/extensions/funqy/funqy-server-common/runtime/src/main/java/io/quarkus/funqy/runtime/query/QueryObjectReader.java @@ -32,11 +32,7 @@ public Object create() { continue; Class paramType = m.getParameterTypes()[0]; Type paramGenericType = m.getGenericParameterTypes()[0]; - Function extractor = mapper.extractor(paramType); - QueryPropertySetter propertySetter = null; - if (extractor == null) { // not string or primitive - propertySetter = mapper.setterFor(paramType, paramGenericType); - } + final Function extractor = mapper.extractor(paramType); String name; if (m.getName().length() > 4) { @@ -44,7 +40,6 @@ public Object create() { } else { name = m.getName().substring(3).toLowerCase(); } - final QueryPropertySetter finalPropertySetter = propertySetter; ValueSetter setter = new ValueSetter() { @Override public void setValue(Object target, String propName, Object value) { @@ -62,7 +57,11 @@ public Function getExtractor() { @Override public QueryPropertySetter getSetter() { - return finalPropertySetter; + if (extractor == null) { + return mapper.setterFor(paramType, paramGenericType); + } else { + return null; + } } }; properties.put(name, setter); diff --git a/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/QueryReaderTest.java b/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/QueryReaderTest.java index c60fb5c766281..3169e1f002fec 100644 --- a/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/QueryReaderTest.java +++ b/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/QueryReaderTest.java @@ -167,6 +167,12 @@ public void testNestedCollections() { } + @Test + public void testRecursiveType() { + QueryObjectMapper mapper = new QueryObjectMapper(); + QueryReader reader = mapper.readerFor(RecursiveType.class); + } + static Map.Entry entry(String key, String value) { return new Map.Entry() { @Override diff --git a/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/RecursiveType.java b/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/RecursiveType.java new file mode 100644 index 0000000000000..297c413d255c1 --- /dev/null +++ b/extensions/funqy/funqy-server-common/runtime/src/test/java/io/quarkus/funqy/test/RecursiveType.java @@ -0,0 +1,34 @@ +package io.quarkus.funqy.test; + +import java.util.List; + +public class RecursiveType { + private int value; + private RecursiveType parent; + private List children; + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public RecursiveType getParent() { + return parent; + } + + public void setParent(RecursiveType parent) { + this.parent = parent; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + +}