codecamp

静态方法提供者 JAXB

javax.xml.bind.JAXB是2.1版本新增的工具类,其中所有的 public 方法均为静态方法,可以直接通过类名调用。它存在的意义就是帮助使用者简单,快速上手JAXB。

JAXBContext

被缓存的JAXBContext,为了性能上的考虑,将会对JAXBContext做缓存,不过缓存使用到了WeakReference,不用担心 GC 问题。

每次在创建JAXBContext实例时,JAXBContext内部都需要维护好Java类和XML之间的映射关系,这个操作十分消耗性能。不过JAXBContext是线程安全的,可以共享。一种较好的做法是,在程序初始化时,传入所有的Class,在使用时直接调用创建好的JAXBContext实例,而不是在每次使用时创建。

JAXBContext 是线程安全的,但是Marshaller, Unmarshaller, 和 Validator都不是线程安全的。

在多线程环境下,应该使用类似下面的方式来初识化JAXBContext

class MyServlet extends HttpServlet {
    static final JAXBContext context = initContext();


    private static JAXBContext initContext() {
        return JAXBContext.newInstance("....", MyServlet.class.getClassLoader());
    }
}

同时,在使用JAXB时,可以类似下面的方式获取Unmarshaller/Marshaller/Validator

public void doGet(HttpServletRequest req, HttpServletResponse resp) {
    Unmarshaller u = context.createUnmarshaller();
    u.unmarshal(...);
}

JAXB.unmarshal(...)

有很多重载的方法,方便使用者传入不同类型的参数。使用者不需要关心实现的细节,传入你需要转换的数据,加上需要生成的类,就能得到需要的数据。

public static <T> T unmarshal( URI xml, Class<T> type ) {}

返回值使用的是泛型T,可以得到任意对象

JAXB.marshal(...)

同样有很多重载的方法,方便使用者传入不同类型的参数。

public static void marshal( Object jaxbObject, URL xml ) {}

第一个参数是对象Obj,可以传入任意对象

JAXBContext API
XmlRootElement
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

JAXB 简单转化案例

JAXB 之 Trang

简单XML生成——Marshaller数据源

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }