在不进行包装类的情况下,如何封送Jaxb元素列表?

麦克风

没有实际组成一个编写器并将每个元素附加到字符串上。有没有一种方法可以让JAXB编组器编组对象列表,而我可以在上面给出顶层元素的名称?

我觉得我已经很接近了

//http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html
public <T> String jaxb(Collection<T> o, Class<T> clazz, String plural){
    try {
        ArrayList<T> al = new ArrayList<T>(o.size());
        al.addAll(o);
        JAXBContext jc = JAXBContext.newInstance(ArrayList.class);
        JAXBElement<ArrayList> amenity = new JAXBElement(new QName(plural), ArrayList.class, al);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(amenity, writer);
        return writer.toString();
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

但结果仍然是一个空列表

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pluralName/>

有没有一种方法,而不仅仅是手动将xml字符串粘贴在一起?

更新

从迈克尔Glavassevich [我已一些帮助能有一点需要注意做到这一点,各个元素是<Item>小号

//http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html
@SuppressWarnings({ "unchecked", "rawtypes" })
public <T> String jaxb(Collection<T> elements, Class<T> elementClass, String plural){
    try {
        T[] array = (T[]) Array.newInstance(elementClass, elements.size());
        elements.toArray(array);
        JAXBContext jc = JAXBContext.newInstance(array.getClass());
        JAXBElement<T[]> topElement = new JAXBElement(new QName(plural), array.getClass(), array);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(topElement, writer);
        return writer.toString();
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

结果变成

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Basketballs>
    <item>basketball one</item>
    <item>basketball two</item>
</Basketballs>
迈克尔·格拉瓦瑟维奇

如果您不想创建包装器类,则可以将集合转换为数组,将该数组放入a中JAXBElement,然后将其封送。

例如:

public class JAXBArrayWriter {

    public static class Item {
        @XmlValue
        protected String value;

        public Item() {}

        public Item(String value) {
            this.value = value;
        }
    }

    public static void main (String [] args) throws Exception {
        List<Item> items = new ArrayList<Item>();
        items.add(new Item("one"));
        items.add(new Item("two"));
        JAXBContext jc = JAXBContext.newInstance(Item[].class);
        JAXBElement<Item[]> root = new JAXBElement<Item[]>(new QName("items"), 
                Item[].class, items.toArray(new Item[items.size()]));
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(root, writer);
        System.out.println(writer.toString());
    }
}

产生以下文档:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items>
    <item>one</item>
    <item>two</item>
</items>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在没有JAXBElement包装器的情况下以JSON封送JAXBElement包装的响应?

来自分类Dev

Jersey + Moxy + JAXB-如何在不使用注释的情况下封送XML

来自分类Dev

如何在不进行迭代的情况下从数组中访问特定元素?

来自分类Dev

如何在不进行字符串比较的情况下获取类函数的MethodInfo

来自分类Dev

如何在不进行硬编码的情况下获取C ++中类数组的长度?

来自分类Dev

如何在不进行配置的情况下启动tmux?

来自分类Dev

如何在不进行迁移的情况下卸载 macports?

来自分类Dev

如何在没有标签值的情况下封送映射到xml

来自分类Dev

JAXB封送处理-列表

来自分类Dev

如何在不对列表进行排序的情况下找到列表的第k个最小元素?

来自分类Dev

如何在不进行后续git编辑的情况下进行重命名?

来自分类Dev

如何在不进行操作的情况下对熊猫数据框进行分组或聚合

来自分类Dev

如何在不进行组合爆炸的情况下进行多个支撑扩展?

来自分类Dev

如何在不进行“静音应用”操作的情况下进行持续的可穿戴设备通知

来自分类Dev

如何使Webkit控制台仅在不进行UI解析的情况下进行记录?

来自分类Dev

如何在不进行高频交易的合计交易的情况下进行之前的报价汇总

来自分类Dev

如何在不为其分配类/ID 的情况下访问列表元素?

来自分类Dev

如何在不进行剪切的情况下在PROLOG中对匹配的包装变量进行模式匹配?

来自分类Dev

如何在不进行硬编码的情况下获取方法名?

来自分类Dev

如何在不进行重新分区和copyMerge的情况下合并Spark结果文件?

来自分类Dev

如何在不进行外部缓存的情况下将“ this”传递到Promise中?

来自分类Dev

如何在不进行身份验证的情况下公开Swagger UI?

来自分类Dev

如何在不进行保存舞蹈的情况下以猫鼬保存关联?

来自分类Dev

如何在不进行类型转换的情况下将flatten实现为数组的扩展?

来自分类Dev

如何在不进行强制转换的情况下取消引用void变量

来自分类Dev

如何在不进行非规范化的情况下优化数据库查询?

来自分类Dev

如何在不进行依赖检查的情况下使用R CMD Install?

来自分类Dev

角度1.2,路由器如何在不进行呼叫的情况下加载视图?

来自分类Dev

如何在不进行2向绑定的情况下将ngModel传递给AngularJS组件?

Related 相关文章

  1. 1

    如何在没有JAXBElement包装器的情况下以JSON封送JAXBElement包装的响应?

  2. 2

    Jersey + Moxy + JAXB-如何在不使用注释的情况下封送XML

  3. 3

    如何在不进行迭代的情况下从数组中访问特定元素?

  4. 4

    如何在不进行字符串比较的情况下获取类函数的MethodInfo

  5. 5

    如何在不进行硬编码的情况下获取C ++中类数组的长度?

  6. 6

    如何在不进行配置的情况下启动tmux?

  7. 7

    如何在不进行迁移的情况下卸载 macports?

  8. 8

    如何在没有标签值的情况下封送映射到xml

  9. 9

    JAXB封送处理-列表

  10. 10

    如何在不对列表进行排序的情况下找到列表的第k个最小元素?

  11. 11

    如何在不进行后续git编辑的情况下进行重命名?

  12. 12

    如何在不进行操作的情况下对熊猫数据框进行分组或聚合

  13. 13

    如何在不进行组合爆炸的情况下进行多个支撑扩展?

  14. 14

    如何在不进行“静音应用”操作的情况下进行持续的可穿戴设备通知

  15. 15

    如何使Webkit控制台仅在不进行UI解析的情况下进行记录?

  16. 16

    如何在不进行高频交易的合计交易的情况下进行之前的报价汇总

  17. 17

    如何在不为其分配类/ID 的情况下访问列表元素?

  18. 18

    如何在不进行剪切的情况下在PROLOG中对匹配的包装变量进行模式匹配?

  19. 19

    如何在不进行硬编码的情况下获取方法名?

  20. 20

    如何在不进行重新分区和copyMerge的情况下合并Spark结果文件?

  21. 21

    如何在不进行外部缓存的情况下将“ this”传递到Promise中?

  22. 22

    如何在不进行身份验证的情况下公开Swagger UI?

  23. 23

    如何在不进行保存舞蹈的情况下以猫鼬保存关联?

  24. 24

    如何在不进行类型转换的情况下将flatten实现为数组的扩展?

  25. 25

    如何在不进行强制转换的情况下取消引用void变量

  26. 26

    如何在不进行非规范化的情况下优化数据库查询?

  27. 27

    如何在不进行依赖检查的情况下使用R CMD Install?

  28. 28

    角度1.2,路由器如何在不进行呼叫的情况下加载视图?

  29. 29

    如何在不进行2向绑定的情况下将ngModel传递给AngularJS组件?

热门标签

归档