您的位置:首页 > Web前端 > JavaScript

jaxb实现xml 和 json 之间的转换

2018-02-06 14:57 471 查看

jaxb2 实体类转xml:

public static String toXML(Object obj, String encode, boolean format, boolean fragment) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, encode);           // 编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, format);   // 是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, fragment);         // 是否省略xm头声明信息
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
return writer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}


jaxb2 xml转实体类:

public static <T> T fromXML(String xml, Class<T> valueType) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(valueType);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}


优化:

static Map<String, JAXBContext> jaxbContextMap = new HashMap<String, JAXBContext>();

/**
* java实体类转xml
*/
public static String toXML(Object obj, String encode, boolean format, boolean fragment) {
try {
JAXBContext jaxbContext = jaxbContextMap.get(obj.getClass().getName());
if(jaxbContext == null){
// 如果每次都调用JAXBContext.newInstance方法,会导致性能急剧下降
jaxbContext = JAXBContext.newInstance(obj.getClass());
jaxbContextMap.put(obj.getClass().getName(), jaxbContext);
}

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, encode);           // 编码格式

4000
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, format);   // 是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, fragment);         // 是否省略xm头声明信息
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
return writer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* xml转java实体类
*/

@SuppressWarnings("unchecked")
public static <T> T fromXML(String xml, Class<T> valueType) {
try {
JAXBContext jaxbContext = jaxbContextMap.get(valueType.getName());
if(jaxbContext == null){
jaxbContext = JAXBContext.newInstance(valueType);
jaxbContextMap.put(valueType.getName(), jaxbContext);
}
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: