JAVA返回soap协议的xml,对象转XML
思路一:节点比较少的时候可以直接使用字符串拼接的方式思路二:把文本转对象,再把对象转xml1.把文本转对象文本转对象(上一篇文章)2.改造对象属性的使用@XmlAttribute节点的使用@XmlElement增加get,set ,有参无参构造方法@XmlAccessorType类级别的注解。定义这个类中的何种类型需要映射到XML。解释起来有点拗口,可以通过它的属性值更好理解这个参数的意义。参数
·
思路一:节点比较少的时候可以直接使用字符串拼接的方式
思路二:把文本转对象,再把对象转xml
1.把文本转对象
2.改造对象

属性的使用 @XmlAttribute
节点的使用@XmlElement
增加get,set ,有参无参构造方法
@XmlAccessorType
类级别的注解。定义这个类中的何种类型需要映射到XML。解释起来有点拗口,可以通过它的属性值更好理解这个参数的意义。
参数 value
参数 value 可以接受4个指定值,这几个值是枚举类型,方便调用:
- XmlAccessType.FIELD:映射这个类中的所有字段到XML
- XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
- XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
- XmlAccessType.NONE:不映射
3.解析对象
import lombok.extern.slf4j.Slf4j;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.ByteArrayOutputStream;
public static String AvaFailXml(EnvelopeDTO envelopeDTO) {
try {
// 获取上下文对象
JAXBContext context = JAXBContext.newInstance(EnvelopeDTO.class);
// 根据上下文获取marshaller对象
Marshaller marshaller = context.createMarshaller();
// 设置编码字符集
marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
marshaller.marshal(envelopeDTO, byteArrayOutputStream);
// 生成XML字符串
return new String(byteArrayOutputStream.toByteArray());
} catch (Exception e) {
log.error("XML:解析异常-----" + e.getMessage(), e);
}
return "";
}
public void vation(HttpServletRequest request , HttpServletResponse response) throws IOException {
String result = "";
String xml = IOUtils.toString(request.getInputStream(), "UTF-8");
result =Service.canlBook(xml);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml;charset=UTF-8");
response.getWriter().println(result);
}
优化封装性能相差十倍
package com.shands.reservationcenter.util;
import com.shands.reservationcenter.pojo.request.col.*;
import lombok.extern.slf4j.Slf4j;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.util.concurrent.ConcurrentHashMap;
/**
* 封装了XML转换成object,object转换成XML的代码
*
* @author Steven
*/
@Slf4j
public class XMLUtil {
private static final ConcurrentHashMap<Class, JAXBContext> jaxbContMap = new ConcurrentHashMap<>(8);
public static <T> String objectToXmlStr(T t) {
try {
JAXBContext jaxbContext = jaxbContMap.get(t.getClass());
if (jaxbContext == null) {
synchronized (t.getClass()) {
jaxbContext = JAXBContext.newInstance(t.getClass());
jaxbContMap.put(t.getClass(), jaxbContext);
}
}
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
marshaller.marshal(t, byteArrayOutputStream);
return byteArrayOutputStream.toString();
} catch (JAXBException e) {
log.error("XML:解析异常-----" + e.getMessage(), e);
}
return "";
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)