【问题标题】:XStream converter for XMLList (similar to Jaxb)XMLList 的 XStream 转换器(类似于 Jaxb)
【发布时间】:2013-07-26 02:59:39
【问题描述】:

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序列化为逗号分隔列表。

【问题讨论】:

    标签: java xml jaxb xstream xmllist


    【解决方案1】:

    您可以创建自定义 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&lt;Integer&gt; 是一个通用接口这一事实使事情变得有点复杂。 canConvert 的这种实现将为包含除整数以外的其他内容的列表提供误报。我不确定 clazz 参数是否包含足够的信息来确定泛型类型参数。所以最安全的可能是将转换器仅分配给该单个字段:

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

    此外,fromString 的这种实现将始终生成一个 ArrayList,但我怀疑应该没问题。

    【讨论】:

    • 我最终做了同样的事情!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2014-05-24
    • 2012-08-22
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多