Thursday, December 19, 2024

Re: Class not included in the set of types for RPC

> Enums never need to be marked as serializable

Apologies for my suggestion.  I'm not sure why I thought this.  I removed the IsSerializable from my enums that I transfer, and yep, they still work perfectly.

On Friday, 20 December 2024 at 12:35:19 pm UTC+11 Colin Alworth wrote:
Can you share the full contents of Line and Box? Or at least their class hierarchy and fields - methods are not important.

Only fields (and inheritance) are considered for RPC serialization - a method that returns a new instance won't cause that instance to be serialized (since it isn't part of the object's state).

Something has definitely changed since your last email - "Line$STATUS" was present before, but isn't now. Was that a deliberate change?

On Thursday, December 19, 2024 at 4:43:59 PM UTC-6 ne...@propfinancing.com wrote:

> The consequence is that your enums should never ever have changing data stored

 

Got it.  I never modify the enum via code.  That would be a bit strange.

 

> Maybe Line isn't the only class that is missing in the policy file?

 

Yes, there are others which are missing.

 

> As a workaround you can always add dummy methods to your GWT-RPC service, e.g.

> Line getDummyLine(), to make a class visible to GWT

 

I added this method to com.propfinancing.puzzle.slitherlink.Box:

  public Line gwtGetLine() {

    return new Line();

  }

 

And the generated .gwt.rpc has Box, but still does not have Line:

 

@FinalFields, true

com._3dmathpuzzles.play.client.GetPuzzleService, false, false, false, false, _, 4203465842

com._3dmathpuzzles.slitherlink.RectangularWithDiagonalsPuzzle, true, true, false, false, com._3dmathpuzzles.slitherlink.RectangularWithDiagonalsPuzzle/2547295082, 2547295082

com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533

com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298

com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109

com.propfinancing.puzzle.Puzzle, true, false, false, false, com.propfinancing.puzzle.Puzzle/1723715424, 1723715424

com.propfinancing.puzzle.slitherlink.Box, true, true, false, false, com.propfinancing.puzzle.slitherlink.Box/1302152982, 1302152982

com.propfinancing.puzzle.slitherlink.Box$STATE, true, true, false, false, com.propfinancing.puzzle.slitherlink.Box$STATE/1639054469, 1639054469

com.propfinancing.puzzle.slitherlink.BoxWithDiagonals, true, true, false, false, com.propfinancing.puzzle.slitherlink.BoxWithDiagonals/2774485663, 2774485663

com.propfinancing.puzzle.slitherlink.Component, true, false, false, false, com.propfinancing.puzzle.slitherlink.Component/4011233562, 4011233562

com.propfinancing.puzzle.slitherlink.NumberedBox, true, true, false, false, com.propfinancing.puzzle.slitherlink.NumberedBox/1782628205, 1782628205

com.propfinancing.puzzle.slitherlink.Puzzle, true, false, false, false, com.propfinancing.puzzle.slitherlink.Puzzle/2584703185, 2584703185

com.propfinancing.puzzle.slitherlink.RectangularPuzzle, true, false, false, false, com.propfinancing.puzzle.slitherlink.RectangularPuzzle/3177548746, 3177548746

com.propfinancing.puzzle.slitherlink.RectangularWithDiagonalsPuzzle, true, false, false, false, com.propfinancing.puzzle.slitherlink.RectangularWithDiagonalsPuzzle/3793384887, 3793384887

java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873

java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647

java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611

java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131

java.util.ArrayList, true, true, false, false, java.util.ArrayList/4159755760, 4159755760

java.util.HashMap, true, true, false, false, java.util.HashMap/1797211028, 1797211028

java.util.LinkedHashMap, true, true, false, false, java.util.LinkedHashMap/3008245022, 3008245022

 

 

Thank you,

 Neil

 

--

Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com

We offer 30 year loans on single family houses!

 

From: google-we...@googlegroups.com <google-we...@googlegroups.com> On Behalf Of Jens
Sent: Thursday, December 19, 2024 3:41 PM
To: GWT Users <google-we...@googlegroups.com>
Subject: Re: Class not included in the set of types for RPC

 

 

Neil Aggarwal schrieb am Donnerstag, 19. Dezember 2024 um 17:12:06 UTC+1:

> Enumeration constants are serialized as a name only; none of the field values are serialized.

What are the consequences of not having the values?

The consequence is that your enums should never ever have changing data stored. For example MyEnum.PERSON.getFriends().add(friend) is possible in Java but makes the enum constant mutable, which is bad. If enum constants are immutable then serializing the name or ordinal is enough to reconstruct the state.

 

> Can you confirm that the policy file does include Line

It does not have Line in it:

Does Line satisfy all rules? Default constructor, implements Serializable and only has Serializable fields? If yes, take a look at your GWT-RPC service method(s) declaration. Starting from the return type and the parameter types of the GWT-RPC method(s), will Line be discoverable directly or is it hidden behind some interface or super class or possibly class Object and GWT would need to find all the candidates that match these interfaces/super classes? If Line is hidden, do the interface / super class follow the rules? Maybe Line isn't the only class that is missing in the policy file?

 

As a workaround you can always add dummy methods to your GWT-RPC service, e.g. Line getDummyLine(), to make a class visible to GWT (or a Dummy class with a Line field and then use Dummy as return type).

 

-- J.

 

 

--
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 google-web-tool...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-web-toolkit/d7ee6beb-815d-44ab-8a3f-c292ee198e27n%40googlegroups.com.

--
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 google-web-toolkit+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-web-toolkit/32f6f033-3447-44e4-a889-906bac32ad19n%40googlegroups.com.

No comments:

Post a Comment