Cannot create property bug for subclass add set method for property
GoogleCodeExporter opened this issue · 12 comments
GoogleCodeExporter commented
import org.yaml.snakeyaml.Yaml;
public class TestYaml {
public static abstract class BeanA {
public abstract Object getId();
}
public static class BeanA1 extends BeanA {
private Long id;
// @Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
System.out.println("test...");
BeanA1 b = new BeanA1();
b.setId(2l);
b.setName("name1");
Yaml yaml = new Yaml();
String dump = yaml.dump(b);
System.out.println("dump:"+dump);
yaml.load(dump);
dump = "!!scripts.spring.TestYaml$BeanA1 {id: 2, name: name1}";
yaml.load(dump); //BUG:Caused by: org.yaml.snakeyaml.error.YAMLException: Unable to find propert
}
}
Original issue reported on code.google.com by qxodr...@gmail.com
on 3 Jun 2014 at 8:26
GoogleCodeExporter commented
What does the 'dump' variable contain before the re-assignment ?
Original comment by py4fun@gmail.com
on 3 Jun 2014 at 1:00
GoogleCodeExporter commented
[deleted comment]
GoogleCodeExporter commented
The provided code works as expected.
Original comment by py4fun@gmail.com
on 4 Jun 2014 at 6:26
- Changed state: Invalid
GoogleCodeExporter commented
why the exception is ok ?
Caused by: org.yaml.snakeyaml.error.YAMLException: Unable to find property 'id'
on class: TestYaml$BeanA1
import org.yaml.snakeyaml.Yaml;
public class TestYaml {
public static abstract class BeanA {
public abstract Object getId();
}
public static class BeanA1 extends BeanA {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
System.out.println("test...");
BeanA1 b = new BeanA1();
b.setId(2l);
b.setName("name1");
Yaml yaml = new Yaml();
String dump = yaml.dump(b);
System.out.println("dump:"+dump);
yaml.load(dump);
dump = "!!TestYaml$BeanA1 {id: 2, name: name1}"; //BUG : Unable to find property 'id' on class: TestYaml$BeanA1
yaml.load(dump);
}
}
Original comment by qxodr...@gmail.com
on 5 Jun 2014 at 2:06
GoogleCodeExporter commented
1) the code you have given works without exceptions
2) please read the question above and give the answer - what is the contents of
the 'dump' variable before it has been re-assigned
3) what is the SnakeYAML version ?
4) what is the Java version ?
5) to show that your code works without exceptions, tests have been added:
https://code.google.com/p/snakeyaml/source/list
You can see the code here:
https://code.google.com/p/snakeyaml/source/browse/src/test/java/org/yaml/snakeya
ml/issues/issue193/TestYaml.java
Feel free to take the source code and change it in a way it fails.
Original comment by py4fun@gmail.com
on 5 Jun 2014 at 8:11
GoogleCodeExporter commented
Apple 1.6.0_43 ... _60 fails as well.
I think this in related to https://bugs.openjdk.java.net/browse/JDK-6794807
which is duplicates https://bugs.openjdk.java.net/browse/JDK-6528714 which was
not back-ported to Java 6.
I am not even sure we can fix it.
At the moment you can use BeanAccess.FIELD if you you can accept direct field
access for all SnakeYAML processed classes (ignoring setters and getters) :
{{{
Yaml yaml = new Yaml();
yaml.setBeanAccess(BeanAccess.FIELD);
}}}
or you can use BeanAccess.FIELD only for some classes :
{{{
Constructor c = new Constructor();
Representer r = new Representer();
PropertyUtils pu = new PropertyUtils();
c.setPropertyUtils(pu);
r.setPropertyUtils(pu);
pu.getProperties(BeanA1.class, BeanAccess.FIELD);
Yaml yaml = new Yaml(c, r);
}}}
If you need even more control on Bean's properties, you can try my clone. But
at the moment it is a bit out of sync with the master and not yet finalized ;)
Original comment by alexande...@gmail.com
on 6 Jun 2014 at 7:53
GoogleCodeExporter commented
Alex, since you have the best picture of the problem feel free to contribute.
(you may also close it with "WontFix" given the detailed description)
Original comment by py4fun@gmail.com
on 6 Jun 2014 at 8:21
- Changed state: Accepted
GoogleCodeExporter commented
[deleted comment]
GoogleCodeExporter commented
[deleted comment]
GoogleCodeExporter commented
WontFix: see comment 8
Original comment by alexande...@gmail.com
on 29 Aug 2014 at 12:11
GoogleCodeExporter commented
It's jvm problem:(
test SnakeYAML version(1.12 and 1.13)
on oracle(sun) jvm (jdk1.6.0_45) not work,but on oracle jvm(1.7,1.8) work
fine
on IBM jvm 1.5:build pwi32devifx-20100127 (SR11 FP1 ) not work,but on IBM
jvm 1.6 work fine
2014-06-05 16:11 GMT+08:00 <snakeyaml@googlecode.com>:
Original comment by qxodr...@gmail.com
on 6 Jun 2014 at 3:41
GoogleCodeExporter commented
Well, Oracle JVM 1.6 is supported.
I will try to reproduce the issue.
Original comment by py4fun@gmail.com
on 6 Jun 2014 at 4:56
- Changed state: New