On Fri, Jul 9, 2021 at 4:08 PM Tyler Williams <tyler_willi...@sbcglobal.net> wrote:
> I'm not sure what you mean by "actual type definition". > > The specific code being used for writing would be the > PersistentCollectionSerializer, which, from what I can gather, converts the > value to be serialized into a java.util version and then sends that to an > instance of CollectionSerializer. The ObjectMapper's encoding is set by > jackson-security modules for spring security. There are no custom > serializers or deserializers for this enum or the "ContainerType" object. > What I mean is I'd need a reproduction, including ContainterType. Sounds like Enum is simple on its own, but code to read and write (actual code, not description) would be needed. And from `PersistentCollectionSerializer` it sounds like this is for Hibernate types, handled by jackson-datatype-hibernate[version]. >From your description I think the use case should be fine (and would pass if using plain old java.util.ArrayList for example) but I suspect that Hibernate Collection handling (by Jackson module) is where there is something missing, compared to how standard CollectionSerializer/-Deserializer does things. This would relate to polymorphic handling of values. -+ Tatu +- > > Tyler > > On Friday, July 9, 2021 at 5:13:08 PM UTC-5 Tatu Saloranta wrote: > >> On Fri, Jul 9, 2021 at 2:56 PM Tyler Williams >> <tyler_w...@sbcglobal.net> wrote: >> > >> > "testTypes": [ >> > "java.util.HashSet", >> > [ >> > [ >> > "com.company.core.TestType", >> > "SCREENING_1" >> > ], >> > [ >> > "com.company.core.TestType", >> > "SCREENING_2" >> > ], >> > [ >> > "com.company.core.TestType", >> > "SCREENING_3" >> > ] >> > ] >> > ], >> > >> > The above is a serialized HashSet using the As.Property typing on the >> ObjectMapper. I believe this is correct behavior because these enums are in >> the Set and this is what As.Property does in this situation. >> > The problem I'm having is that the same ObjectMapper that wrote that >> JSON can't deserialize it. >> > com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot >> deserialize value of type `com.company.core.TestType` from String >> "com.company.core.TestType": not one of the values accepted for Enum class: >> [SCREENING_1, SCREENING_2, SCREENING_3] >> > at [Source: >> (byte[])"["java.util.ArrayList",[{"@class":"com.company.ContainerType","id":1,"testTypes":["java.util.HashSet",[["company.core.TestType","SCREENING_1"],["company.core.TestType","SCREENING_2"],["company.core.TestType","SCREENING_3"]]],"shipDestinationTypes":["java.util.HashSet",[["com.company.mod"[truncated >> 19402 bytes]; line: 1, column: 229] (through reference chain: >> java.util.ArrayList[0]->com.company.ContainerType["testTypes"]->java.util.HashSet[0]) >> >> > >> com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67) >> >> > >> com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1851) >> >> > >> com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1079) >> >> > >> com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:327) >> >> > >> com.fasterxml.jackson.databind.deser.std.EnumDeserializer._fromString(EnumDeserializer.java:214) >> >> > >> com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:188) >> >> > >> com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeWrappedValue(StdDeserializer.java:368) >> >> > >> com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromArray(StdDeserializer.java:215) >> >> > >> com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:337) >> >> > >> com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:201) >> >> > >> com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:347) >> >> > >> > My guess from looking at this stuff through the debugger is that the >> SimpleType of the enum doesn't create a typedeseriealizer and thus we just >> deserialize the enum by calling EnumDeserializer.deserialize() instead of >> EnumDeserializer.deserializeWithType(). Is there a configuration that I'm >> missing? >> >> I think you are correct on most points, but to know for sure I'd need >> to see the actual type definition (not description, definition), >> as well as specific code being used for writing and reading. >> >> My guess is that there is a discrepancy between type information >> available during reading and writing. >> >> -+ Tatu +- >> > -- > You received this message because you are subscribed to the Google Groups > "jackson-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to jackson-user+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jackson-user/bfb5069a-9aba-4641-ac1e-5d3109735e1an%40googlegroups.com > <https://groups.google.com/d/msgid/jackson-user/bfb5069a-9aba-4641-ac1e-5d3109735e1an%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to jackson-user+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/CAGrxA26TuugJKonmuBOGBsDX6Ngu_XDyX5DZoxZbvPCQ2zFvPg%40mail.gmail.com.