marcusaram / snakeyaml

Automatically exported from code.google.com/p/snakeyaml
Apache License 2.0
1 stars 0 forks source link

Typed setters for the entities #45

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Не знаю, баг это или фича, но мне очень не 
нравится, что SnakeYAML 
вмешивается во внутреннюю логику 
сущностей.

Допустим есть класс:

<code>
class Entity {
    private int id;

    public Entity setId( int id ) {
       this.id = id;
       return this;
    }
}
</code>

Если написать фикстуры и попытаться 
синтезировать объект для данной 
сущности, мы получим ошибку о том, что поле 
`id` не было найдено. В тоже 
время при возвращаемом *setId* типе *void* - всё 
работает замечательно.

Original issue reported on code.google.com by LoRd1990 on 20 Jan 2010 at 2:25

GoogleCodeExporter commented 9 years ago
Question: 
SnakeYAML does not work properly with the above class.
This is because setter returns an object instead of void.
==============================
Answer: 
this is not a SnakeYAML issue. This class violates the JavaBean spec.
I can imagine this was possibly desired by someone to implement a "chaining" 
style of 
coding, but this is no longer a correct JavaBean. The JavaBean spec requires 
that the 
return type of set* functions be 'void', and various tools and frameworks 
enforce 
this requirement. (XmlEncoder for instance)
If a chaining-style setter is desired, I'd recommend making this a separate 
method on 
the bean rather than replacing the standard setter.

Original comment by py4fun@gmail.com on 20 Jan 2010 at 3:06

GoogleCodeExporter commented 9 years ago
py4fun is correct and naming things in a way spec says gives you (almost) what 
you want  out of the box.
But if you still need this one to work you may try to create corresponding 
BeanInfo class and provide correct 
PropertyDescriptor for the id giving setId as a setter name.

so it will be EntityBeanInfo in the same package as Entity or you have to set 
up Introspector BeanInfo paths and 
so on. 

(consult JavaBeans spec. 8 Introspection)

Original comment by alexande...@gmail.com on 20 Jan 2010 at 7:37

GoogleCodeExporter commented 9 years ago
It is also possible to provide your own Constructor and Representer to work 
with the
Entity class.

Original comment by aso...@gmail.com on 22 Jan 2010 at 9:28