package com.sunac.ocims.entity.esb;
import jdk.internal.org.xml.sax.SAXException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Source;
import javax.xml.transform.sax.SAXSource;
import java.io.*;
public class XmlUtils {
private static final Logger log = LoggerFactory.getLogger(XmlUtils.class);
public static String convertToXml(Object obj) {
String resultXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
return resultXml + convertToXml(obj, "utf-8");
}
public static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
log.error("转换XML失败:" + e.getMessage());
}
return result;
}
/**
* 将对象根据路径转换成xml文件
*
* @param obj
* @param path
* @return
*/
public static void convertToXmlFile(Object obj, String path) {
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
// 创建输出流
FileWriter fw = null;
try {
fw = new FileWriter(path);
} catch (IOException e) {
e.printStackTrace();
}
marshaller.marshal(obj, fw);
} catch (JAXBException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
/**
* 将String类型的xml转换成对象
*/
public static <V> V convertXmlStrToObject(Class<V> clazz, String xmlStr) {
String resultXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
V xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 进行将Xml转成对象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(resultXml + xmlStr);
xmlObject = (V)unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
@SuppressWarnings("unchecked")
/**
* 将file类型的xml转换成对象
*/
public static Object convertXmlFileToObject(Class clazz, String xmlPath) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileReader fr = null;
try {
fr = new FileReader(xmlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xmlObject = unmarshaller.unmarshal(fr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
/**
* xml装换成JavaBean
*
* @param t
* @param xml
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T converyToJavaBean(Class<T> t, String xml) {
// 如果xml参数中有以下协议,则不需要再重复加
String resultXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
T obj = null;
SAXParserFactory sax = null;
StringReader reader = null;
try {
JAXBContext context = JAXBContext.newInstance(t);
Unmarshaller unmarshaller = context.createUnmarshaller();
reader = new StringReader(resultXml + xml);
sax = SAXParserFactory.newInstance();
// sax.setXIncludeAware(false);
sax.setValidating(false);
// 忽略命名空间
sax.setNamespaceAware(false);
XMLReader xmlReader = sax.newSAXParser().getXMLReader();
Source source = new SAXSource(xmlReader, new InputSource(reader));
obj = (T) unmarshaller.unmarshal(source);
return obj;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
} finally {
if (reader != null) {
reader.close();
}
}
}
/**
* xml文件配置转换为对象
* @param xmlPath xml文件路径
* @param load java对象.Class
* @return java对象
* @throws JAXBException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static <T> T xmlToBean(String xmlPath, Class<T> load) throws Exception {
JAXBContext context = JAXBContext.newInstance(load);
Unmarshaller unmarshaller = context.createUnmarshaller();
SAXSource saxSource = newSAxSource(xmlPath);
return (T) unmarshaller.unmarshal(saxSource);
}
protected static SAXSource newSAxSource(String xml) throws FileNotFoundException, ParserConfigurationException, SAXException, org.xml.sax.SAXException {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setNamespaceAware(false);
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
SAXSource saxSource = new SAXSource(xmlReader, new InputSource(new ByteArrayInputStream(xml.getBytes())));
return saxSource;
}
}
xml 工具类
照片怎么加不上2024-02-01 23:42
相关推荐
海石3 小时前
📱随时随地大小编:TraeSolo 移动端初体验爱滑雪的码农4 小时前
详细说说React大型项目结构以及日常开发核心语法七牛开发者5 小时前
HTML is the new Markdown:来自 Claude Code 团队的实践@大迁世界5 小时前
43.HTML 事件处理和 React 事件处理有什么区别?CloneCello5 小时前
AI时代程序员认知调整指南庞轩px5 小时前
第七篇:Spring扩展点——如何优雅地介入Bean的创建流程ZC跨境爬虫6 小时前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)@大迁世界7 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?tongluowan0077 小时前
一个请求在Spring MVC 中是怎么流转的千叶风行7 小时前
Text-to-SQL 技术设计与注意事项