簡體   English   中英

用於XMLList的XStream轉換器(類似於Jaxb)

[英]XStream converter for XMLList (similar to Jaxb)

XStream是否支持類似於JAXB的xml列表?( https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlList.html

例如:

 @XmlRootElement
 public class MyClass {
     @XmlElement
     @XmlList
     List<Integer> values;
     //+ getter & setters
 }

產生:

 <myClass>
   <values>1 2 3 4 5</values>
 </myClass>

我找不到任何執行此操作的轉換器。 實際上,似乎有一個轉換器com.thoughtworks.xstream.converters.collections.BitSetConverter ,可將BitSet序列化為逗號分隔列表。

您可以創建一個自定義SingleValueConverter來轉換列表:

public class IntegerListConverter implements SingleValueConverter {
    @Override
    public boolean canConvert(Class clazz) {
        return List.class.isAssignableFrom(clazz);
    }

    @Override
    public Object fromString(String arg0) {
        Collection<Integer> collection = new ArrayList<Integer>();
        String[] integerStrings = arg0.split(" ");
        for (int i = 0; i < integerStrings.length; i++) {
            collection.add(Integer.valueOf(integerStrings[i]));
        }
        return collection;
    }

    @Override
    public String toString(Object arg0) {
        List collection = (List) arg0;
        StringBuffer sb = new StringBuffer();
        boolean first = true;
        for (Object object : collection) {
            if (first) {
                first = false;
            } else {
                sb.append(' ');
            }
            sb.append(object.toString());
        }
        return sb.toString();
    }
}

List<Integer>是通用接口這一事實使事情變得有些復雜。 canConvert此實現將對包含Integers之外的其他內容的List給出誤報。 我不確定clazz參數是否包含足夠的信息來確定泛型類型參數。 因此,最安全的方法可能是將轉換器僅分配給該單個字段:

public class MyClass {
     @XStreamConverter(IntegerListConverter.class)
     List<Integer> values;
     //+ getter & setters
}

同樣, fromString此實現將始終生成ArrayList,但我懷疑應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM