Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleXML解析忽略@Root name参数_Java_Android_Xml Parsing_Simple Framework - Fatal编程技术网

Java SimpleXML解析忽略@Root name参数

Java SimpleXML解析忽略@Root name参数,java,android,xml-parsing,simple-framework,Java,Android,Xml Parsing,Simple Framework,图书馆有问题。它忽略@Root name。下面是测试代码: 类别: @Root(name = "res", strict = true) @Data @NoArgsConstructor @AllArgsConstructor class Response { @Attribute(name = "a") private Integer a; @Attribute(name = "i") privat

图书馆有问题。它忽略@Root name。下面是测试代码:

类别:

@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);

    }
测试:

@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);

    }
@测试
公共void detectXml(){
Serializer Serializer=new Persister();
字符串xml=”“;
响应res=null;
试一试{
res=serializer.read(Response.class,xml);
}捕获(例外e){
e、 printStackTrace();
}
资产不为空(res);
}
无论xml ie中的第一个标记是什么,测试都会通过。。。。。。。。 @转换(Response.ResponseConverter.class) 班级反应{ ........... 公共静态类ResponseConverter实现转换器{ 公共响应测试读取(InputNode节点)引发异常{ 字符串rootAnnotation=ResponseTest.class.getAnnotation(Root.class.name(); 如果(!node.getName().equals(rootAnnotation)&&node.isRoot()){ 返回null; } 返回新的ResponseTest(); } ................. } } @试验 公共void detectXml(){ Serializer Serializer=new Persister(); 字符串xml=”“; responsetestres=null; 试一试{ StringReader StringReader=新的StringReader(xml); res=newpersister(newannotationstrategy()).read(ResponseTest.class,NodeBuilder.read(stringReader)); 如果(res!=null){ res=serializer.read(ResponseTest.class,xml); } 系统输出打印项次(res); }捕获(例外e){ e、 printStackTrace(); } Assert.assertNotNull(res); }
您可以使用@Converter annotation重写read方法,并通过获取注释值来验证根名称。

这非常有效,但现在在read()中,反序列化必须手动完成,甚至是属性“o”的“必需”注释检查在responseconverter.read()方法中的@Root节点比较之后,是否可以继续自动反序列化?有一些间接的方法可以做到这一点,只需检查编辑后的答案。