Note also that Java itself doesn't serialize records in the same way as 
other objects, there are a few interesting hiccups there that might impact 
some use cases. Search for "serializable" at 
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html
 
for more discussion on this.

This is not to say that GWT-RPC, if it were updated to support this, would 
also reflect those exact semantics, but that this shouldn't be implemented 
lightly, and no one has taken the time to consider how it would be done. 

I would also point out that the com.google.gwt.core.ext.typeinfo.JType 
hierarchy also has not grown past Java 7 (no "default" from Java 8, 
"module" from Java 9, "sealed" in java 17 etc) so Generators cannot see 
these flags and react accordingly. This was by design at the time, 
encouraging any code that needs them to move to annotation processors. 

There is a gwt-rpc annotation processor implementation, and while it is 
used in production, it isn't used widely, but this feature could be 
explicitly added there. 

By the same token, if you have a bunch of records, you could generate 
custom field serializers with an annotation processor as well.

On Wednesday, March 12, 2025 at 8:32:18 PM UTC-5 Jens wrote:

> GWT uses either a CustomFieldSerializer implementation to serialize a 
> concrete class or it uses bean serialization. Bean serialization requires a 
> default constructor, serializable fields and final fields are only 
> supported if you enable it.
>
> A CustomFieldSerializer must be written for a concrete class so you cannot 
> provide a serializer for class Record and then expect to send all kinds of 
> records. You can write your own TestRecord_CustomFieldSerializer if you 
> want to send a record via GWT-RPC. It is the same with any other class that 
> you define in your application that need special treatment because it does 
> not have a default constructor. Records just allow you to write a little 
> less code.
>
>
> https://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideCustomSerialization
>
> -- J.
>
> tekkyru schrieb am Mittwoch, 12. März 2025 um 19:15:06 UTC+1:
>
>> Many thanks for supporting Java 17 language features
>>
>> But in my setup the Java records (new feature) are supported on client 
>> side but cannot be passed between server and client:
>>
>> public record TestRecord(String name, int age) implements IsSerializable 
>> {}
>>
>>
>> interface MyService extends RemoteService {
>>
>> public TestRecord getTestRecord();
>>
>> }
>>
>> The GWT Code server displays an error:
>> [ERROR] 'com.mycompany.TestRecord' has no instantiable subtypes
>>
>> Am I doing something wrong or the records cannot be de/serialized yet?
>>
>> I know they don't have the default constructors, but creating them in 
>> javascript should not be affected, and de-serializing a record instance as 
>> a call parameter can be (probably) done via reflection.
>>
>> Best regards
>> Alex
>>
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/google-web-toolkit/75bc1c93-fc2c-4765-9114-77c9d1912db6n%40googlegroups.com.

Reply via email to