如何解决SimpleXML 解析忽略@Root 名称参数
SimpleXML 库有问题。它忽略@Root 名称。这是带有测试的代码:
班级:
@Root(name = "res",strict = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
class Response {
@Attribute(name = "a")
private Integer a;
@Attribute(name = "i")
private Integer i;
@Attribute(name = "o",required = false)
private Integer o;
}
测试:
@Test
public void detectXml() {
Serializer serializer = new Persister();
String xml = "<xxx a=\"1\" i=\"1\"/>";
Response res = null;
try {
res = serializer.read(Response.class,xml);
} catch (Exception e) {
e.printstacktrace();
}
assertNotNull(res);
}
解决方法
........
@Convert(Response.ResponseConverter.class)
class Response {
...........
public static class ResponseConverter implements Converter<Response> {
public ResponseTest read(InputNode node) throws Exception {
String rootAnnotation = ResponseTest.class.getAnnotation(Root.class).name();
if (!node.getName().equals(rootAnnotation) && node.isRoot()) {
return null;
}
return new ResponseTest();
}
.................
}
}
@Test
public void detectXml() {
Serializer serializer = new Persister();
String xml = "<xxx a=\"1\" i=\"1\"/>";
ResponseTest res = null;
try {
StringReader stringReader = new StringReader(xml);
res = new Persister(new AnnotationStrategy()).read(ResponseTest.class,NodeBuilder.read(stringReader));
if (res != null) {
res = serializer.read(ResponseTest.class,xml);
}
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
}
Assert.assertNotNull(res);
}
您可以使用@Converter 注释覆盖读取方法,并通过获取注释值来验证根名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。