You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Ben Weidig (Jira)" <ji...@apache.org> on 2021/09/18 12:42:00 UTC
[jira] [Assigned] (TAP5-2688) TypeCoercer fails to coerce String to
Collection since 5.7
[ https://issues.apache.org/jira/browse/TAP5-2688?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ben Weidig reassigned TAP5-2688:
--------------------------------
Assignee: Ben Weidig
> TypeCoercer fails to coerce String to Collection since 5.7
> ----------------------------------------------------------
>
> Key: TAP5-2688
> URL: https://issues.apache.org/jira/browse/TAP5-2688
> Project: Tapestry 5
> Issue Type: Bug
> Affects Versions: 5.7.3
> Reporter: Yannick Dylla
> Assignee: Ben Weidig
> Priority: Major
>
> Hi,
> with Tapestry 5.7.3 the TypeCoercer fails to coerce String to Collection. With 5.6 this worked fine and produced a single element list.
> It is probably the fault of JSONArray which now implements Collection.
> When one uses List.class as target for the TypeCoercer the example works fine.
> Example program:
> {code:java}
> import org.apache.tapestry5.commons.services.TypeCoercer;
> import org.apache.tapestry5.ioc.Registry;
> import org.apache.tapestry5.ioc.RegistryBuilder;
> import org.apache.tapestry5.json.modules.JSONModule;
> import java.util.Collection;
> import java.util.List;
> public class TypeCoercerBug {
> public static void main(String[] args) throws Exception {
> Registry registry = RegistryBuilder.buildAndStartupRegistry(JSONModule.class);
> try {
> TypeCoercer typeCoercer = registry.getService(TypeCoercer.class);
> List<String> expected = List.of("foo");
> Object result = typeCoercer.coerce("foo", Collection.class);
> System.out.println("RESULT: " + result);
> if (!expected.equals(result)) {
> throw new Exception(expected + " != " + result);
> }
> } finally {
> registry.shutdown();
> }
> }
> }
> {code}
> Stacktrace:
> {code:java}
> Exception in thread "main" java.lang.RuntimeException: Coercion of foo to type java.util.Collection (via String --> org.apache.tapestry5.json.JSONArray) failed: A JSONArray text must start with '[' (actual: 'f') at character 1 of foo
> at org.apache.tapestry5.commons.internal.services.TypeCoercerImpl$TargetCoercion.coerce(TypeCoercerImpl.java:79)
> at org.apache.tapestry5.commons.internal.services.TypeCoercerImpl.coerce(TypeCoercerImpl.java:155)
> at $TypeCoercer_14735c6695ab1.coerce(Unknown Source)
> at TypeCoercerBug.main(TypeCoercerBug.java:16)
> Caused by: org.apache.tapestry5.json.exceptions.JSONSyntaxException: A JSONArray text must start with '[' (actual: 'f') at character 1 of foo
> at org.apache.tapestry5.json.JSONTokener.syntaxError(JSONTokener.java:509)
> at org.apache.tapestry5.json.JSONTokener.nextValue(JSONTokener.java:119)
> at org.apache.tapestry5.json.JSONArray.<init>(JSONArray.java:78)
> at org.apache.tapestry5.json.JSONArray.<init>(JSONArray.java:95)
> at org.apache.tapestry5.internal.json.StringToJSONArray.coerce(StringToJSONArray.java:26)
> at org.apache.tapestry5.internal.json.StringToJSONArray.coerce(StringToJSONArray.java:23)
> at org.apache.tapestry5.commons.services.CoercionTuple$CoercionWrapper.coerce(CoercionTuple.java:57)
> at org.apache.tapestry5.commons.internal.services.TypeCoercerImpl$TargetCoercion.coerce(TypeCoercerImpl.java:76)
> ... 3 more
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)