1. 个人总结

  1. 使用SpringBoot搭建的Soap webService与webClient项目可以参看我写的另外两篇文章:
    (1)webService
    (2)webClient

但是对于上面两篇文章的Spring-Web-Service搭建和使用过程中,我发现有的时候在接收soap请求时总是那么不尽人意,按照教程可以轻松的通过@RequestPayload实现soap请求到java实体类的映射,但是在个人开发中有的时候会碰到各种意想不到的问题。

对于上面遇到的问题,突然想到如果采用传统的接口方式去接收soap是不是可行,下面将描述我采用传统的接口形式去处理soap请求或者其它xml格式请求的过程。

2. 传统接口形式接收xml请求

  1. @RequestMapping指定consumes和produces【即:指定请求的数据类型和返回的数据类型】
  2. 使用JAXB根据xsd文件生成带有XML注解的实体类;
  3. 如果不想采用自动生成实体类的方式接收入参,可以在接收到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)相关推荐

  1. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  2. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  3. xml教程之java解析xml文档

    1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...

  4. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    http://blog.csdn.net/smcwwh/article/details/7183869 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath ...

  5. java解析xml的几种方式

    java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程  第一种:DOM. DOM的全称是Document Object Model,也即文 ...

  6. java解析xml转为Map

    之前开发过一个解析多层级xml文件的工具类,后来处理的时候发现,这种方式得到的map或json集合多一个key标签,在解析的时候会比较麻烦,于是根据需要在原有方法的基础上写出了另外的处理方法,总结记录 ...

  7. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  8. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  9. java解析xml串标签_Java反射解析XML字符串并封装到指定的JavaBean

    在日常的工作中,我们经常需要处理xml格式的字符串,比如:调用第三方接口返回xml信息,需要解析xml获取相应的结果信息,之前自己写过一个利用 Java反射解析XML字符串,并封装到指定的JavaBe ...

  10. java 解析/操作 xml 几种常用方式 xml的增加/删除/修改

    java 解析/操作 xml 几种常用方式 xml的增加/删除/修改 首先,我们先介绍几种常用的xml解析器. 1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方 ...

最新文章

  1. Mac OS 提高工作效率的几个快捷键
  2. Android动画之Animator
  3. Visual Studio 2017常用快捷键(小白入)
  4. 2012 不宜进入的三个技术点(下)
  5. 今日恐慌与贪婪指数为93 贪婪程度有所缓解
  6. vue项目中的跑马灯的使用
  7. 魔方机器人设计中的问题
  8. 使用Air724UG模块拍摄照片并上传至云服务器
  9. LVS的NAT、TUNNEL、Full-NAT模式
  10. You called this URL via POST, but the URL doesn't end in a slash and you hav。。。
  11. ARP协议(三)ARP防御篇
  12. 如何重置Photoshop首选项?ps重置首选项的方法
  13. python登录网页后抓取数据_Python抓取网页数据的终极办法
  14. [附源码]计算机毕业设计springboot自行车租赁管理系统
  15. 浅谈NPM,vm,vm2,Node.js沙盒逃逸
  16. 树莓派js调用C语言,SpiderMonkey js中调用c程序
  17. 读《史蒂夫•乔布斯传》(五)
  18. 2020-12-15激光雷达建模开源汇总
  19. 上海轨道交通规划图(日本版)
  20. Qt编写物联网管理平台50-超强跨平台

热门文章

  1. 微型计算机的 I3 I5是,i3和i5性能差多少?i3和i5处理器的区别 (全文)
  2. Java 8 新特性之 Stream 流(五)映射
  3. Java 开发工程师常用软件和网站
  4. python常用关键字意思_Python 关键字列表及示例
  5. 关于重装系统无法连接网络问题的解决方法
  6. HomeAssistant和Node-Red
  7. 万兆NAS存储网络组建方案
  8. 我讽刺中医把每个养生的都化成了神仙
  9. 真兰仪表通过深交所注册:拟募资17.4亿 上半年净利下降27%
  10. 轻触开关的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告