Converting object received from Redis fails using class.cast and works using ObjectMapper.convertValue The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceConvert a Map<String, String> to a POJOJava Class.cast() vs. cast operatorHow does Java Object casting work behind the scene?How does the Java cast operator work?Java casting implementationConvert form data to JavaScript object with jQueryConverting JSON data to Java objectHow do I convert from int to String?Convert JS object to JSON stringJsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object@JsonValue on an enum field, when this enum used as map keyJackson Unmarshall custom object instead of LinkedHashMapManipulate a json object in redis using luaThe best way to serialize row JSON in Spring BootHow to deserialize object of specific type from JSON in Java if it was serialized to JSON as Object?

US Healthcare consultation for visitors

Is 'stolen' appropriate word?

What can I do if neighbor is blocking my solar panels intentionally?

Can the Right Ascension and Argument of Perigee of a spacecraft's orbit keep varying by themselves with time?

"... to apply for a visa" or "... and applied for a visa"?

Store Dynamic-accessible hidden metadata in a cell

Circular reasoning in L'Hopital's rule

Intergalactic human space ship encounters another ship, character gets shunted off beyond known universe, reality starts collapsing

What other Star Trek series did the main TNG cast show up in?

Do working physicists consider Newtonian mechanics to be "falsified"?

One-dimensional Japanese puzzle

Button changing its text & action. Good or terrible?

Why doesn't a hydraulic lever violate conservation of energy?

Can I visit the Trinity College (Cambridge) library and see some of their rare books

Loose spokes after only a few rides

Identify 80s or 90s comics with ripped creatures (not dwarves)

Am I ethically obligated to go into work on an off day if the reason is sudden?

Can a flute soloist sit?

Using dividends to reduce short term capital gains?

Does Parliament hold absolute power in the UK?

Would an alien lifeform be able to achieve space travel if lacking in vision?

What to do when moving next to a bird sanctuary with a loosely-domesticated cat?

Do ℕ, mathbbN, BbbN, symbbN effectively differ, and is there a "canonical" specification of the naturals?

How do I design a circuit to convert a 100 mV and 50 Hz sine wave to a square wave?



Converting object received from Redis fails using class.cast and works using ObjectMapper.convertValue



The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experienceConvert a Map<String, String> to a POJOJava Class.cast() vs. cast operatorHow does Java Object casting work behind the scene?How does the Java cast operator work?Java casting implementationConvert form data to JavaScript object with jQueryConverting JSON data to Java objectHow do I convert from int to String?Convert JS object to JSON stringJsonMappingException: No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object@JsonValue on an enum field, when this enum used as map keyJackson Unmarshall custom object instead of LinkedHashMapManipulate a json object in redis using luaThe best way to serialize row JSON in Spring BootHow to deserialize object of specific type from JSON in Java if it was serialized to JSON as Object?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















Whats the difference between using Class.cast to convert an object to a certain type v/s doing the same using ObjectMapper.convertValue.
I am assuming cast also internally uses jackson but I think that's not the case here.



My RedisTemplateConfig:



@Bean
public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(
ReactiveRedisConnectionFactory factory)
StringRedisSerializer keySerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer<Object> valueSerializer =
new Jackson2JsonRedisSerializer<>(Object.class);
RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
RedisSerializationContext.newSerializationContext(keySerializer);
RedisSerializationContext<String, Object> context =
builder.value(valueSerializer).build();

return new ReactiveRedisTemplate<>(factory, context);



SetValueInRedis:



@Override
public <T> Mono<T> setValue(String key, Object value, Class<T> clazz)
return reactiveValueOps.set(key, value,
Duration.ofDays(SESSION_PERSISTENCE_DURATION))
.map(o -> clazz.cast(value));



Working GetValueInRedis:



@Override
public <T> Mono<T> getValue(String key, Class<T> clazz)
return reactiveValueOps.get(key)
.flatMap(val -> Mono.justOrEmpty(objectMapper.convertValue(val, clazz)));



Error version of Get Value:



@Override
public <T> Mono<T> getValue(String key, Class<T> clazz)
return reactiveValueOps.get(key)
.flatMap(o -> Mono.justOrEmpty(clazz.cast(o)));



----EDIT----



If we notice the serializer used for Redis(Jackson2JsonRedisSerializer): while saving the object to redis it works fine. But while reading(get) cast fails and objectMappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command itself?










share|improve this question






























    1















    Whats the difference between using Class.cast to convert an object to a certain type v/s doing the same using ObjectMapper.convertValue.
    I am assuming cast also internally uses jackson but I think that's not the case here.



    My RedisTemplateConfig:



    @Bean
    public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(
    ReactiveRedisConnectionFactory factory)
    StringRedisSerializer keySerializer = new StringRedisSerializer();
    Jackson2JsonRedisSerializer<Object> valueSerializer =
    new Jackson2JsonRedisSerializer<>(Object.class);
    RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
    RedisSerializationContext.newSerializationContext(keySerializer);
    RedisSerializationContext<String, Object> context =
    builder.value(valueSerializer).build();

    return new ReactiveRedisTemplate<>(factory, context);



    SetValueInRedis:



    @Override
    public <T> Mono<T> setValue(String key, Object value, Class<T> clazz)
    return reactiveValueOps.set(key, value,
    Duration.ofDays(SESSION_PERSISTENCE_DURATION))
    .map(o -> clazz.cast(value));



    Working GetValueInRedis:



    @Override
    public <T> Mono<T> getValue(String key, Class<T> clazz)
    return reactiveValueOps.get(key)
    .flatMap(val -> Mono.justOrEmpty(objectMapper.convertValue(val, clazz)));



    Error version of Get Value:



    @Override
    public <T> Mono<T> getValue(String key, Class<T> clazz)
    return reactiveValueOps.get(key)
    .flatMap(o -> Mono.justOrEmpty(clazz.cast(o)));



    ----EDIT----



    If we notice the serializer used for Redis(Jackson2JsonRedisSerializer): while saving the object to redis it works fine. But while reading(get) cast fails and objectMappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command itself?










    share|improve this question


























      1












      1








      1








      Whats the difference between using Class.cast to convert an object to a certain type v/s doing the same using ObjectMapper.convertValue.
      I am assuming cast also internally uses jackson but I think that's not the case here.



      My RedisTemplateConfig:



      @Bean
      public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(
      ReactiveRedisConnectionFactory factory)
      StringRedisSerializer keySerializer = new StringRedisSerializer();
      Jackson2JsonRedisSerializer<Object> valueSerializer =
      new Jackson2JsonRedisSerializer<>(Object.class);
      RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
      RedisSerializationContext.newSerializationContext(keySerializer);
      RedisSerializationContext<String, Object> context =
      builder.value(valueSerializer).build();

      return new ReactiveRedisTemplate<>(factory, context);



      SetValueInRedis:



      @Override
      public <T> Mono<T> setValue(String key, Object value, Class<T> clazz)
      return reactiveValueOps.set(key, value,
      Duration.ofDays(SESSION_PERSISTENCE_DURATION))
      .map(o -> clazz.cast(value));



      Working GetValueInRedis:



      @Override
      public <T> Mono<T> getValue(String key, Class<T> clazz)
      return reactiveValueOps.get(key)
      .flatMap(val -> Mono.justOrEmpty(objectMapper.convertValue(val, clazz)));



      Error version of Get Value:



      @Override
      public <T> Mono<T> getValue(String key, Class<T> clazz)
      return reactiveValueOps.get(key)
      .flatMap(o -> Mono.justOrEmpty(clazz.cast(o)));



      ----EDIT----



      If we notice the serializer used for Redis(Jackson2JsonRedisSerializer): while saving the object to redis it works fine. But while reading(get) cast fails and objectMappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command itself?










      share|improve this question
















      Whats the difference between using Class.cast to convert an object to a certain type v/s doing the same using ObjectMapper.convertValue.
      I am assuming cast also internally uses jackson but I think that's not the case here.



      My RedisTemplateConfig:



      @Bean
      public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(
      ReactiveRedisConnectionFactory factory)
      StringRedisSerializer keySerializer = new StringRedisSerializer();
      Jackson2JsonRedisSerializer<Object> valueSerializer =
      new Jackson2JsonRedisSerializer<>(Object.class);
      RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
      RedisSerializationContext.newSerializationContext(keySerializer);
      RedisSerializationContext<String, Object> context =
      builder.value(valueSerializer).build();

      return new ReactiveRedisTemplate<>(factory, context);



      SetValueInRedis:



      @Override
      public <T> Mono<T> setValue(String key, Object value, Class<T> clazz)
      return reactiveValueOps.set(key, value,
      Duration.ofDays(SESSION_PERSISTENCE_DURATION))
      .map(o -> clazz.cast(value));



      Working GetValueInRedis:



      @Override
      public <T> Mono<T> getValue(String key, Class<T> clazz)
      return reactiveValueOps.get(key)
      .flatMap(val -> Mono.justOrEmpty(objectMapper.convertValue(val, clazz)));



      Error version of Get Value:



      @Override
      public <T> Mono<T> getValue(String key, Class<T> clazz)
      return reactiveValueOps.get(key)
      .flatMap(o -> Mono.justOrEmpty(clazz.cast(o)));



      ----EDIT----



      If we notice the serializer used for Redis(Jackson2JsonRedisSerializer): while saving the object to redis it works fine. But while reading(get) cast fails and objectMappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command itself?







      java json spring-boot jackson






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 9 at 8:53







      Karshit

















      asked Mar 8 at 12:21









      KarshitKarshit

      546618




      546618






















          1 Answer
          1






          active

          oldest

          votes


















          1














          Class.cast and ObjectMapper.convertValue are two totally different mechanisms. Class.cast does not create new object, only returns old reference with new type. Below you can see how Class.cast is implemented:



          public T cast(Object obj) 
          if (obj != null && !isInstance(obj))
          throw new ClassCastException(cannotCastMsg(obj));
          return (T) obj;



          Jackson from other side creates new object from different hierarchy and copy internal structure. For example, can convert Map to POJO and POJO to Map using reflection. But you can not cast reference to Map on reference to POJO.



          Summary: only convertValue method from these two really does conversion from one instance to new one and from one type to new one. cast only tries to change reference type to the same object.



          See also:



          • Java Class.cast() vs. cast operator

          • Convert a Map to a POJO

          • How does Java Object casting work behind the scene?

          • Java casting implementation

          • How does the Java cast operator work?





          share|improve this answer

























          • If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

            – Karshit
            Mar 9 at 8:51











          • Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

            – Karshit
            Mar 9 at 8:58











          • @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

            – Michał Ziober
            Mar 9 at 10:35











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55063144%2fconverting-object-received-from-redis-fails-using-class-cast-and-works-using-obj%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Class.cast and ObjectMapper.convertValue are two totally different mechanisms. Class.cast does not create new object, only returns old reference with new type. Below you can see how Class.cast is implemented:



          public T cast(Object obj) 
          if (obj != null && !isInstance(obj))
          throw new ClassCastException(cannotCastMsg(obj));
          return (T) obj;



          Jackson from other side creates new object from different hierarchy and copy internal structure. For example, can convert Map to POJO and POJO to Map using reflection. But you can not cast reference to Map on reference to POJO.



          Summary: only convertValue method from these two really does conversion from one instance to new one and from one type to new one. cast only tries to change reference type to the same object.



          See also:



          • Java Class.cast() vs. cast operator

          • Convert a Map to a POJO

          • How does Java Object casting work behind the scene?

          • Java casting implementation

          • How does the Java cast operator work?





          share|improve this answer

























          • If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

            – Karshit
            Mar 9 at 8:51











          • Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

            – Karshit
            Mar 9 at 8:58











          • @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

            – Michał Ziober
            Mar 9 at 10:35















          1














          Class.cast and ObjectMapper.convertValue are two totally different mechanisms. Class.cast does not create new object, only returns old reference with new type. Below you can see how Class.cast is implemented:



          public T cast(Object obj) 
          if (obj != null && !isInstance(obj))
          throw new ClassCastException(cannotCastMsg(obj));
          return (T) obj;



          Jackson from other side creates new object from different hierarchy and copy internal structure. For example, can convert Map to POJO and POJO to Map using reflection. But you can not cast reference to Map on reference to POJO.



          Summary: only convertValue method from these two really does conversion from one instance to new one and from one type to new one. cast only tries to change reference type to the same object.



          See also:



          • Java Class.cast() vs. cast operator

          • Convert a Map to a POJO

          • How does Java Object casting work behind the scene?

          • Java casting implementation

          • How does the Java cast operator work?





          share|improve this answer

























          • If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

            – Karshit
            Mar 9 at 8:51











          • Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

            – Karshit
            Mar 9 at 8:58











          • @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

            – Michał Ziober
            Mar 9 at 10:35













          1












          1








          1







          Class.cast and ObjectMapper.convertValue are two totally different mechanisms. Class.cast does not create new object, only returns old reference with new type. Below you can see how Class.cast is implemented:



          public T cast(Object obj) 
          if (obj != null && !isInstance(obj))
          throw new ClassCastException(cannotCastMsg(obj));
          return (T) obj;



          Jackson from other side creates new object from different hierarchy and copy internal structure. For example, can convert Map to POJO and POJO to Map using reflection. But you can not cast reference to Map on reference to POJO.



          Summary: only convertValue method from these two really does conversion from one instance to new one and from one type to new one. cast only tries to change reference type to the same object.



          See also:



          • Java Class.cast() vs. cast operator

          • Convert a Map to a POJO

          • How does Java Object casting work behind the scene?

          • Java casting implementation

          • How does the Java cast operator work?





          share|improve this answer















          Class.cast and ObjectMapper.convertValue are two totally different mechanisms. Class.cast does not create new object, only returns old reference with new type. Below you can see how Class.cast is implemented:



          public T cast(Object obj) 
          if (obj != null && !isInstance(obj))
          throw new ClassCastException(cannotCastMsg(obj));
          return (T) obj;



          Jackson from other side creates new object from different hierarchy and copy internal structure. For example, can convert Map to POJO and POJO to Map using reflection. But you can not cast reference to Map on reference to POJO.



          Summary: only convertValue method from these two really does conversion from one instance to new one and from one type to new one. cast only tries to change reference type to the same object.



          See also:



          • Java Class.cast() vs. cast operator

          • Convert a Map to a POJO

          • How does Java Object casting work behind the scene?

          • Java casting implementation

          • How does the Java cast operator work?






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 8 at 13:41

























          answered Mar 8 at 13:25









          Michał ZioberMichał Ziober

          17.7k1271109




          17.7k1271109












          • If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

            – Karshit
            Mar 9 at 8:51











          • Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

            – Karshit
            Mar 9 at 8:58











          • @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

            – Michał Ziober
            Mar 9 at 10:35

















          • If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

            – Karshit
            Mar 9 at 8:51











          • Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

            – Karshit
            Mar 9 at 8:58











          • @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

            – Michał Ziober
            Mar 9 at 10:35
















          If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

          – Karshit
          Mar 9 at 8:51





          If you notice the serializer used for Redis, while saving the object to redis it works fine. But while reading cast fails and object Mappper works. When I am using Jackson2JsonRedis serializer, shouldn't get command return an object which should be castable using Class.cast command?

          – Karshit
          Mar 9 at 8:51













          Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

          – Karshit
          Mar 9 at 8:58





          Thanks. I understand why ObjectMapper convertValue works because it tries to create a new object from the passed one. But should by Redis Serializer would have done that thereby making my object castable? Or am I missing something here?

          – Karshit
          Mar 9 at 8:58













          @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

          – Michał Ziober
          Mar 9 at 10:35





          @Karshit, what reactiveValueOps.get(key) method returns? Why do we need flatMap. I have never used Redis, just wanted to explain what is the difference between Class.cast and ObjectMapper.convertValue. If you think you should not convert anything create new question with redis tag and ask why do you need to do this. Right now I do not have to much information about your project and knowledge about Redis to give you good answer.

          – Michał Ziober
          Mar 9 at 10:35



















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55063144%2fconverting-object-received-from-redis-fails-using-class-cast-and-works-using-obj%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          1928 у кіно

          Захаров Федір Захарович

          Ель Греко