java - Jaxb Arraylist 输出流

标签 java jaxb

我的 Xml 应该是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<results>
<version>1.0</version>
<status>ok</status>
<lastUpdate>2011-11-21 09:23:59.0</lastUpdate>
<total>2</total>
<row>
<areaId></areaId>
<nameEng></nameEng>
<nameGer></nameGer>
</row>
 … more <row></row> blocks …
</results>

我怎样才能做到这一点......? 目前我有以下内容……但我不知道如何将 album2 作为字符串返回到输出流……

List<Row> rows = new ArrayList<Row>();

        while(rs.next()){
            int albumId = rs.getInt(1);
            int bookDocId = rs.getInt(2);
            String picUrl = rs.getString(3);
            String descEng = rs.getString(4);
            String descGer = rs.getString(5);

            Row row = new Row();
            row.setAlbumId(albumId);
            row.setBookDocId(bookDocId);
            row.setPicUrl(picUrl);
            row.setDescEng(descEng);
            row.setDescGer(descGer);

            rows.add(row);
        }

        Album album = new Album();
        album.setRows(rows);

        File file = new File("album.xml");
        JAXB.marshal(album, file);

        Album album2 = JAXB.unmarshal(file, Album.class);

        file.deleteOnExit();

编辑:

@XmlRootElement
public class Album {

    private List<Row> rows = new ArrayList<Row>();

    @XmlElement(name="row")
    public List<Row> getRows(){
        return this.rows;
    }

    public void setRows(List<Row> rows){
        this.rows = rows;
    }

行类:

public class Row {
    private int albumId;
    private int bookDocId;
    private String picUrl;
    private String descEng;
    private String descGer; 

    public int getAlbumId() {
        return albumId;
    }
    public int getBookDocId() {
        return bookDocId;
    }
    public String getPicUrl() {
        return picUrl;
    }
    public String getDescEng() {
        return descEng;
    }
    public String getDescGer() {
        return descGer;
    }
    public void setAlbumId(int albumId) {
        this.albumId = albumId;
    }
    public void setBookDocId(int bookDocId) {
        this.bookDocId = bookDocId;
    }
    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }
    public void setDescEng(String descEng) {
        this.descEng = descEng;
    }
    public void setDescGer(String descGer) {
        this.descGer = descGer;
    }
}
}

最佳答案

这是我的代码,效果很好

@javax.xml.bind.annotation.XmlType
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
public class Album 
{
   long version;

   String status;

   java.util.List<Row> rows;

}  


@javax.xml.bind.annotation.XmlType
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
public class Row 
{
   String areaId;

   String nameEng;

   String nameGer;
}  

测试

public static void main(final String[] args) throws IOException
   {
      Album al = new Album();
      List<Row> rows = new ArrayList<Row>();
      final Row row1 = new Row();
      row1.areaId = "area1";
      row1.nameEng = "eng1";
      row1.nameGer = "ger1";
      final Row row2 = new Row();
      row2.areaId = "area2";
      row2.nameEng = "eng2";
      row2.nameGer = "ger2";
      rows.add(row2);
      rows.add(row1);
      al.status = "stat";
      al.rows = rows;
      final File file = new File("D:/test.xml");
      final FileOutputStream out = new FileOutputStream(file);

      JAXB.marshal(al, out);  

      final Album after = JAXB.unmarshal(file, Album.class);
      assert after.status.equals(al.status);
      assert after.rows.size() == al.rows.size();
   }  

您可以更改对private 的访问并添加getters、setters

要像 String 那样返回,请使用

  ByteArrayOutputStream output = new ByteArrayOutputStream();
  JAXB.marshal(al, output); 
  output.toString();

关于java - Jaxb Arraylist 输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046025/

相关文章:

java - 如何使 JDK 7 默认必须在 Mac OS X 10.9+ 上使用?

java - 如何使用 xsd :sequence? 允许元素按任意顺序排列

java - JAXB 是否可以将两个或多个元素编码到一个域对象字段中?

jaxb - 如何在 jaxws 中使用 wsimport 生成 equals() 和 hashcode() 方法

java - WebSphere 8.5.5.3 中的 JAXB 编码导致 SOAP 响应 XML 中的接口(interface)元素

java - exec-maven-plugin 说不能运行指定的程序,即使它在 PATH 上

Java getter/setter 风格问题

java - 使用 Android FirebaseListAdapter 时如何使用两种布局?

java - Java 中的 move/复制文件操作

Jaxb EclipseLink/MOXy : Is it possible to specify the names of get/set methods