如何解决org.simpleframework.xml对象替换上的ValueRequiredException
我正在尝试使用here中所述的Simple 2.7.1中的对象替换功能,但是无论我如何尝试都无法使其正常工作。不幸的是,本教程示例对我的技能水平有一定限制。
在下面的示例中,我希望我的TestContainer
从testContainer.xml中反序列化,然后再将每个TestVictim
从其自己的XML中反序列化,然后再将其添加到其集合中。如果我正确理解,对象替换应该允许我这样做。相反,我不断收到以下错误:
Exception in thread "main" org.simpleframework.xml.core.ValuerequiredException: Unable to satisfy @org.simpleframework.xml.Attribute(name="",required=true,empty="") on field 'name' private java.io.File game.test.TestVictim.name for class game.test.TestVictim at line 4
at org.simpleframework.xml.core.Composite.validate(Composite.java:644)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:416)
at org.simpleframework.xml.core.Composite.access$300(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1382)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:144)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:619)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
at org.simpleframework.xml.core.Composite.read(Composite.java:201)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at game.env.xml.XMLHandler.buildTestContainer(XMLHandler.java:72)
at game.test.XMLTest.main(XMLTest.java:26)
设置@Attribute(required = false)
只会导致其他异常。
在测试中,此代码为TestVictim
对象找到并读取了适当的XML,但是遇到了此异常,而不是执行替换。
@Root(name = "TestContainer")
public class TestContainer {
@Element(name = "ContainerName")
private String containerName = "";
@ElementList(name = "Victim",inline = true)
private Dictionary<TestVictim> testVictim = new Dictionary<>();
public TestContainer() {
}
}
...
@Root(name = "Victim")
public class TestVictim implements Entry {
@Element(name = "TestProperty1")
private String testProperty1 = "1";
@Element(name = "TestProperty2")
private String testProperty2 = "2";
@Attribute
private File name;
public TestVictim() {
}
@Override
public String getName() {
return null;
}
@Resolve
public TestVictim resolve() throws Exception {
return new Persister().read(TestVictim.class,name);
}
}
...
<?xml version="1.0" encoding="UTF-8"?>
<TestContainer>
<ContainerName>Test Container</ContainerName>
<Victim name = "resources/test/testvictim1.xml" class = "game.test.TestVictim"></Victim>
</TestContainer>
...
<?xml version="1.0" encoding="UTF-8"?>
<TestVictim>
<TestProperty1>Property1</TestProperty1>
<TestProperty2>Property2</TestProperty2>
</TestVictim>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。