XStream-无法构造java.util.Collection:java.util.Collection

XStream-无法构造java.util.Collection:java.util.Collection,java,xstream,Java,Xstream,我需要用java提取XML文档的信息。我正在尝试XStream,但我面临一个问题。这是第一次使用xStream,我不知道发生了什么。我非常感激任何帮助 这是XML的一个示例: <annotation> <filename>sun_ajrhlpqweporzeoa.jpg</filename> <folder> users/antonio/static_sun_database/c/coast </folder> <sou

我需要用java提取XML文档的信息。我正在尝试XStream,但我面临一个问题。这是第一次使用xStream,我不知道发生了什么。我非常感激任何帮助


这是XML的一个示例:

    <annotation>
<filename>sun_ajrhlpqweporzeoa.jpg</filename>
<folder>
users/antonio/static_sun_database/c/coast
</folder>
<source>
<sourceImage>
Aude Oliva and Antonio Torralba, IJCV 2001, vol 42(3).
</sourceImage>
<sourceAnnotation>
LabelMe Webtool
</sourceAnnotation>
</source>
<object>
<name>
sky
</name>
<deleted>
0
</deleted>
<verified>
0
</verified>
<date>
06-Oct-2006 10:01:51
</date>
<id>
0
</id>
<polygon>
<username>
anonymous
</username>
<pt>
<x>
2
</x>
<y>
40
</y>
</pt>
<pt>
<x>
2
</x>
<y>
2
</y>
</pt>
<pt>
<x>
71
</x>
<y>
69
</y>
</pt>
<pt>
<x>
65
</x>
<y>
58
</y>
</pt>
<pt>
<x>
56
</x>
<y>
55
</y>
</pt>
<pt>
<x>
43
</x>
<y>
50
</y>
</pt>
<pt>
<x>
27
</x>
<y>
46
</y>
</pt>
<pt>
<x>
17
</x>
<y>
43
</y>
</pt>
<pt>
<x>
8
</x>
<y>
44
</y>
</pt>
</polygon>
</object>

</annotation>

sun_ajrhlpqweporzeoa.jpg
用户/antonio/static\u sun\u数据库/c/coast
奥德·奥利瓦和安东尼奥·托拉尔巴,《国际期刊期刊》,2001年,第42卷(3)。
LabelMe网络工具
天空
0
0
06-Oct-2006 10:01:51
0
匿名的
2.
40
2.
2.
71
69
65
58
56
55
43
50
27
46
17
43
8.
44
这是我的代码:

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import doutorado.imagem.annotation;
import doutorado.imagem.imagesize;
import doutorado.imagem.object;
import doutorado.imagem.polygon;
import doutorado.imagem.pt;
import java.io.FileNotFoundException;
import java.io.FileReader;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.ArrayList;
import java.util.Collection;


public class ImportXML {

    public static void main(String[] args) {
        lerXml();
    }

    private static void lerXml() {
        FileReader reader = null;
        try {

            reader = new FileReader(
                    "Imagens\\coast1.xml"
            );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        XStream xStream = new XStream(new DomDriver());

        xStream.alias("annotation", doutorado.imagem.annotation.class);
        xStream.processAnnotations(annotation.class);

        annotation imagem = (annotation) xStream.fromXML(reader);
        System.out.println(imagem.toString());
    }
}


@XStreamAlias("annotation")
public class annotation {
    private String filename;
    private String folder;
    @XStreamAlias("source")
    private source fonte;
    @XStreamAlias("object")
    private Collection<object> objetos = new ArrayList<>();
    @XStreamAlias("imagesize")
    private imagesize tamanho;

    //...{Getters and Setters}
}

@XStreamAlias("object")
public class object {
    private String name;
    private int deleted;
    private int verified;
    private String date;
    private int id;
    @XStreamAlias("polygon")
    private Collection<polygon> poligonos = new ArrayList<>();

    //...{Getters and Setters}
}

@XStreamAlias("imagesize")
public class imagesize {
    private int nrows;
    private int ncols;

    //...{Getters and Setters}
}

@XStreamAlias("polygon")
public class polygon {

    private String username;
    @XStreamAlias("pt")
    private Collection<pt> pontos = new ArrayList<>();

    //...{Getters and Setters}
}

@XStreamAlias("pt")
public class pt {
    private int x;
    private int y;

    //...{Getters and Setters}
}

@XStreamAlias("source")
public class source {
    private String sourceImage;
    private String sourceAnnotation;

    //...{Getters and Setters}
}
import com.thoughtworks.xstream.xstream;
导入com.thoughtworks.xstream.io.xml.DomDriver;
导入doutorado.imagem.annotation;
导入doutorado.imagem.imagesize;
导入doutorado.imagem.object;
导入doutorado.imagem.polygon;
导入doutorado.imagem.pt;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入com.thoughtworks.xstream.annotations.XStreamAlias;
导入java.util.ArrayList;
导入java.util.Collection;
公共类导入XML{
公共静态void main(字符串[]args){
lerXml();
}
私有静态XML(){
FileReader=null;
试一试{
reader=新文件读取器(
“Imagens\\coast1.xml”
);
}catch(filenotfounde异常){
e、 printStackTrace();
}
XStream XStream=newxstream(newdomdriver());
别名(“annotation”,doutorado.imagem.annotation.class);
processAnnotations(annotation.class);
注释imagem=(注释)xStream.fromXML(读取器);
System.out.println(imagem.toString());
}
}
@XStreamAlias(“注释”)
公共类注释{
私有字符串文件名;
私有字符串文件夹;
@XStreamAlias(“来源”)
私人来源方特;
@XStreamAlias(“对象”)
private Collection objetos=new ArrayList();
@XStreamAlias(“图像大小”)
塔曼霍私人酒店;
//…{getter和setter}
}
@XStreamAlias(“对象”)
公共类对象{
私有字符串名称;
删除私有int;
私人int验证;
私有字符串日期;
私有int-id;
@XStreamAlias(“多边形”)
private Collection poligonos=new ArrayList();
//…{getter和setter}
}
@XStreamAlias(“图像大小”)
公共类图像大小{
私人住宅;
私人国际非政府组织;
//…{getter和setter}
}
@XStreamAlias(“多边形”)
公共类多边形{
私有字符串用户名;
@XStreamAlias(“pt”)
private Collection pontos=new ArrayList();
//…{getter和setter}
}
@XStreamAlias(“pt”)
公务舱{
私人INTX;
私营企业;
//…{getter和setter}
}
@XStreamAlias(“来源”)
公共类源{
私有字符串源图像;
私有字符串源注释;
//…{getter和setter}
}

问题在于XStream查看Java类,发现对象字段是一个
Java.util.Collection
,它无法实例化,因为它是一个接口。最简单的解决方案是将类型更改为
java.util.ArrayList
。如果需要,setter和getter仍然可以是
Collection
类型,因为XStream默认情况下直接使用字段

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import doutorado.imagem.annotation;
import doutorado.imagem.imagesize;
import doutorado.imagem.object;
import doutorado.imagem.polygon;
import doutorado.imagem.pt;
import java.io.FileNotFoundException;
import java.io.FileReader;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.ArrayList;
import java.util.Collection;


public class ImportXML {

    public static void main(String[] args) {
        lerXml();
    }

    private static void lerXml() {
        FileReader reader = null;
        try {

            reader = new FileReader(
                    "Imagens\\coast1.xml"
            );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        XStream xStream = new XStream(new DomDriver());

        xStream.alias("annotation", doutorado.imagem.annotation.class);
        xStream.processAnnotations(annotation.class);

        annotation imagem = (annotation) xStream.fromXML(reader);
        System.out.println(imagem.toString());
    }
}


@XStreamAlias("annotation")
public class annotation {
    private String filename;
    private String folder;
    @XStreamAlias("source")
    private source fonte;
    @XStreamAlias("object")
    private Collection<object> objetos = new ArrayList<>();
    @XStreamAlias("imagesize")
    private imagesize tamanho;

    //...{Getters and Setters}
}

@XStreamAlias("object")
public class object {
    private String name;
    private int deleted;
    private int verified;
    private String date;
    private int id;
    @XStreamAlias("polygon")
    private Collection<polygon> poligonos = new ArrayList<>();

    //...{Getters and Setters}
}

@XStreamAlias("imagesize")
public class imagesize {
    private int nrows;
    private int ncols;

    //...{Getters and Setters}
}

@XStreamAlias("polygon")
public class polygon {

    private String username;
    @XStreamAlias("pt")
    private Collection<pt> pontos = new ArrayList<>();

    //...{Getters and Setters}
}

@XStreamAlias("pt")
public class pt {
    private int x;
    private int y;

    //...{Getters and Setters}
}

@XStreamAlias("source")
public class source {
    private String sourceImage;
    private String sourceAnnotation;

    //...{Getters and Setters}
}