ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Denis Mekhanikov (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-9043) Map field is registered as Object in BinaryType
Date Fri, 20 Jul 2018 13:25:00 GMT
Denis Mekhanikov created IGNITE-9043:

             Summary: Map field is registered as Object in BinaryType
                 Key: IGNITE-9043
                 URL: https://issues.apache.org/jira/browse/IGNITE-9043
             Project: Ignite
          Issue Type: Bug
          Components: binary
    Affects Versions: 2.6
            Reporter: Denis Mekhanikov
            Assignee: Denis Mekhanikov
             Fix For: 2.7

When a binary type is registered during first insertion without use of BinaryObject, then
fields of type {{Map}} are registered as {{Object}}-s.

It leads to inconvenience in further usage of this type over {{BinaryObject}} interface.

The following code results in an exception:
public static void main(String[] args) {
    Ignite ignite = Ignition.start("config/ignite.xml");
    IgniteCache<Integer, ExamplePojo> cache = ignite.getOrCreateCache("cache");

    cache.put(1, new ExamplePojo());

    BinaryObject val = cache.<Integer, BinaryObject>withKeepBinary().get(1);

    Map<Integer, String> map = val.field("map");
    map.put(1, "1");
    BinaryObjectBuilder bldr = val.toBuilder();
    bldr.setField("map", map);

    bldr.build(); // Throws exception.

static class ExamplePojo {
    Map<Integer, String> map = new HashMap<>();
Exception in thread "main" class org.apache.ignite.binary.BinaryObjectException: Wrong value
has been set [typeName=binary.BinaryObjectMapExample$ExamplePojo, fieldName=map, fieldType=Object,
	at org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl.checkMetadata(BinaryObjectBuilderImpl.java:428)
	at org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl.serializeTo(BinaryObjectBuilderImpl.java:223)
	at org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl.build(BinaryObjectBuilderImpl.java:183)
	at binary.BinaryObjectMapExample.main(BinaryObjectMapExample.java:26)

This message was sent by Atlassian JIRA

View raw message