【问题标题】:Java: Generic JAXB SerializationJava:通用 JAXB 序列化
【发布时间】:2010-08-23 15:57:39
【问题描述】:

我正在寻找一种使用 JAXB XML 序列化在 Java 中序列化对象的通用方法。我想要这样的东西:

public static <T> String serializeUsingJAXB(T entity) {
    JAXBContext context = JAXBContext.newInstance(T.class);
    // ...
}

但是,由于类型擦除,T.class 似乎不起作用。

什么会?

【问题讨论】:

    标签: java generics serialization jaxb


    【解决方案1】:

    试试entity.getClass()

    【讨论】:

    • @Jason:确保在您的要求中entity 永远不是null。如果是这样,您将获得 NPE。
    • 是的,我一定会这样做的。谢谢。
    • 您也可以使用 JAXB 类并保存一两行代码,请参阅 stackoverflow.com/questions/3549334/…
    【解决方案2】:
    public static <T> String serializeUsingJAXB(
        T entity,
        Class< ? extends T> clazz
    )
    {
        JAXBContext context = JAXBContext.newInstance( clazz );
        // ...
    }
    

    【讨论】:

    • @Tom。它可以,但我不知道这个方法的其余部分是什么样的。这是非常通用的泛型编程技术。
    • 方法的其余部分是什么都没关系。
    【解决方案3】:

    您也可以考虑:

    public static <T> String serializeUsingJAXB(T entity) { 
        StringWriter writer = new StringWriter();
        javax.xml.bind.JAXB.marshal(entity, writer);
        return writer.toString();
    } 
    

    有关更多信息,请参阅javax.xml.bind.JAXB

    【讨论】:

    • 谢谢,很高兴知道。我不介意长时间这样做,因为我可以将 Marshaller 的 JAXB_FORMATTED_OUTPUT 属性设置为 false。
    【解决方案4】:

    显而易见的答案是:

    public static String serializeUsingJAXB(Object entity, JAXBContext context) {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2012-08-06
      相关资源
      最近更新 更多