Java解析XML的一些个人总结及感悟。(webService、xml、xsd)
1. 个人总结
- 使用SpringBoot搭建的Soap webService与webClient项目可以参看我写的另外两篇文章:
(1)webService
(2)webClient
但是对于上面两篇文章的Spring-Web-Service搭建和使用过程中,我发现有的时候在接收soap请求时总是那么不尽人意,按照教程可以轻松的通过@RequestPayload实现soap请求到java实体类的映射,但是在个人开发中有的时候会碰到各种意想不到的问题。
对于上面遇到的问题,突然想到如果采用传统的接口方式去接收soap是不是可行,下面将描述我采用传统的接口形式去处理soap请求或者其它xml格式请求的过程。
2. 传统接口形式接收xml请求
- @RequestMapping指定consumes和produces【即:指定请求的数据类型和返回的数据类型】
- 使用JAXB根据xsd文件生成带有XML注解的实体类;
- 如果不想采用自动生成实体类的方式接收入参,可以在接收到xml字符串之后,采用dom4j、JDOM等其它的工具包进行解析处理(这些jar包需要单独引入)
以下是部分代码
package com.qs.parentchild2springbootstudy.util;import lombok.extern.slf4j.Slf4j;import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;/*** jaxb实体类与xml的映射工具** @author QuS* @date 2022/3/21 13:52*/
@Slf4j
public class JaxbXmlUtils {/*** 将xml字符串转换成实体类** @param xml 传入的xml字符串* @param clazz 需要转换的实体类* @param <T>* @return*/public static <T> T xml2Object(String xml, Class<T> clazz) throws JAXBException {try {JAXBContext jc = JAXBContext.newInstance(clazz);Unmarshaller unmarshaller = jc.createUnmarshaller();//将xml字符串转换成流StringReader reader = new StringReader(xml);return (T) unmarshaller.unmarshal(reader);} catch (JAXBException e) {// logger.trace(e);throw e;}}/*** 从xml文件中读取xml数据,转换成java实体类** @param dataStream xml格式的文件流* @param clazz 映射的实体类* @param <T>* @return* @throws JAXBException*/public static <T> T xml2Object(InputStream dataStream, Class<T> clazz) throws JAXBException {try {JAXBContext jc = JAXBContext.newInstance(clazz);Unmarshaller u = jc.createUnmarshaller();return (T) u.unmarshal(dataStream);} catch (JAXBException e) {// logger.trace(e);throw e;}}/*** 将实体类转换成xml** @param t 传入的实体类* @param clazz 实体类型* @param <T>* @return* @throws JAXBException*/public static <T> String object2Xml(T t, Class<T> clazz) throws JAXBException {JAXBContext context = JAXBContext.newInstance(clazz);Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");StringWriter writer = new StringWriter();marshaller.marshal(t, writer);return writer.toString();}
}
package com.qs.parentchild2springbootstudy.controller;import com.alibaba.fastjson.JSONObject;
import com.qs.parentchild2springbootstudy.xml.response.ResponseXML;
import com.qs.parentchild2springbootstudy.xml.test.ROOT;
import com.qs.parentchild2springbootstudy.util.JaxbXmlUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.web.bind.annotation.*;import javax.xml.bind.JAXBException;
import java.io.StringReader;
import java.util.Iterator;/*** 解析xml的请求** @author QuS* @date 2022/3/21 13:35*/
@Slf4j
@RestController
@RequestMapping(value = "xml")
public class TestXMLPhraseController {@PostMapping(value = "phrase", consumes = "application/xml", produces = "application/xml")public ResponseXML phraseXml(@RequestBody String requestXml) throws JAXBException {log.info("请求参数为:{}", requestXml);//这里会将requestXml映射成ROOT实体类,此ROOT实体类是用jaxb插件根据xsd文件生成的System.out.println(JSONObject.toJSONString(JaxbXmlUtils.xml2Object(requestXml, ROOT.class)));ResponseXML responseXML = new ResponseXML();responseXML.setCode("0");responseXML.setMessage("success");responseXML.setData("成功");return responseXML;}
}
3. 根据xml生成xsd的工具
上面提到根据xml自动生成实体类需要借助jaxb, jaxb又需要xsd文件,那么如何将xml文件转换成xsd文件呢?如果自己足够自信,你可以自己手写;如果想偷懒,可以采用工具trang.jar去生成【可以在网络上自行搜索该jar包进行下载,如果找不见,可以在评论区留言,我可以发百度云链接】
执行如下命令即可根据xml生成xsd文件【jar包和xml文件需要在同一个目录下】
java -jar trang.jar xxxxx.xml xxxxx.xsd
5. Soap UI可以在添加WSDL后,然后自动生成soap请求
Java解析XML的一些个人总结及感悟。(webService、xml、xsd)相关推荐
- 详解Java解析XML的四种方法
http://developer.51cto.com 2009-03-31 13:12 cnlw1985 javaeye 我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...
- xml教程之java解析xml文档
1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
http://blog.csdn.net/smcwwh/article/details/7183869 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath ...
- java解析xml的几种方式
java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程 第一种:DOM. DOM的全称是Document Object Model,也即文 ...
- java解析xml转为Map
之前开发过一个解析多层级xml文件的工具类,后来处理的时候发现,这种方式得到的map或json集合多一个key标签,在解析的时候会比较麻烦,于是根据需要在原有方法的基础上写出了另外的处理方法,总结记录 ...
- java 解析并生成 XML
在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- java解析xml串标签_Java反射解析XML字符串并封装到指定的JavaBean
在日常的工作中,我们经常需要处理xml格式的字符串,比如:调用第三方接口返回xml信息,需要解析xml获取相应的结果信息,之前自己写过一个利用 Java反射解析XML字符串,并封装到指定的JavaBe ...
- java 解析/操作 xml 几种常用方式 xml的增加/删除/修改
java 解析/操作 xml 几种常用方式 xml的增加/删除/修改 首先,我们先介绍几种常用的xml解析器. 1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方 ...
最新文章
- Mac OS 提高工作效率的几个快捷键
- Android动画之Animator
- Visual Studio 2017常用快捷键(小白入)
- 2012 不宜进入的三个技术点(下)
- 今日恐慌与贪婪指数为93 贪婪程度有所缓解
- vue项目中的跑马灯的使用
- 魔方机器人设计中的问题
- 使用Air724UG模块拍摄照片并上传至云服务器
- LVS的NAT、TUNNEL、Full-NAT模式
- You called this URL via POST, but the URL doesn't end in a slash and you hav。。。
- ARP协议(三)ARP防御篇
- 如何重置Photoshop首选项?ps重置首选项的方法
- python登录网页后抓取数据_Python抓取网页数据的终极办法
- [附源码]计算机毕业设计springboot自行车租赁管理系统
- 浅谈NPM,vm,vm2,Node.js沙盒逃逸
- 树莓派js调用C语言,SpiderMonkey js中调用c程序
- 读《史蒂夫•乔布斯传》(五)
- 2020-12-15激光雷达建模开源汇总
- 上海轨道交通规划图(日本版)
- Qt编写物联网管理平台50-超强跨平台
热门文章
- 微型计算机的 I3 I5是,i3和i5性能差多少?i3和i5处理器的区别 (全文)
- Java 8 新特性之 Stream 流(五)映射
- Java 开发工程师常用软件和网站
- python常用关键字意思_Python 关键字列表及示例
- 关于重装系统无法连接网络问题的解决方法
- HomeAssistant和Node-Red
- 万兆NAS存储网络组建方案
- 我讽刺中医把每个养生的都化成了神仙
- 真兰仪表通过深交所注册:拟募资17.4亿 上半年净利下降27%
- 轻触开关的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告