用JAXB将xml报文生成java实体类

本文介绍了一种将XML报文转换为Java实体类的方法,首先使用XMLSpy等工具从XML生成XSD文件,再利用JAXB工具将XSD文件转换为JavaBean,简化了开发过程中的手动编码工作。

前言

  在开发ws接口,或者需要用到xml做载体的时候,经常需要将客户提供的测试xml报文,转化成我们java应用的实体类,不管实体类的字段多还是少,如果手工去写我都觉得非常麻烦,非常浪费时间,(而且实际的开发过程中,接口所需的字段也不可能少),所以最好就是能用工具去帮我们解决这个问题。

  之前已经有过一次用JAXB将xml报文转成java实体类的经历了,但是做完之后也没有做个笔记 ,导致再一次遇到这个问题的时候,虽然知道方法,但已经想不起当时踩过的坑。尽管如此,还是要做个笔记,亡羊补牢,为时不晚。

1.先通过xml生成xsd文件

  先用工具,将xml报文生成一份xsd出来(xsd文件就是xml的约束文件),我用的工具是 XMLSpy ,如下图,在 “文件” 处,选择新建或打开你的xml报文之后,点击 DTD/Schema 这一项菜单项

xmlspy生成xsd-1

  然后如下图,选择 生成DTD/Schema 这一项,

xmlspy生成xsd-2

  之后会弹出如下图的对话框,因为目的是要生成 xsd文件 ,就要选择 W3C Schema 这一项,其他的项默认就可以了,然后点击确定

xmlspy生成xsd-3

​   最后,会弹出让你保存的目录的对话框,找到自己方便的目录,点击确定保存即可

xmlspy生成xsd-4

2.通过JAXB将xsd文件生成java实体类

  获得上一步生成 xsd文件 之后,用 java 自带的 JAXB 工具去生成 java实体类

  在你的 xsd文件 的目录,打开命令行窗口,执行 xjc xxxx.xsd 指令,即可生成 xsd 对应的 javaBean

JAXB生成java实体类1

  最终生成的 javaBean 如下,

JAXB生成java实体类2

Java中,将实体对象与XML报文相互转换是一项常见的需求,尤其在数据交换和配置管理中。以下是一些常用的工具类和库,可以帮助实现这一功能: 1. **JAXB (Java Architecture for XML Binding)**: JAXBJava提供的一个标准API,用于将Java对象与XML进行绑定。它可以将Java对象序列化为XML,也可以将XML反序列化为Java对象。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.StringReader; import java.io.StringWriter; public class JAXBExample { public static void main(String[] args) throws JAXBException { // 创建JAXB上下文 JAXBContext context = JAXBContext.newInstance(YourClass.class); // 序列化对象为XML Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); StringWriter sw = new StringWriter(); marshaller.marshal(new YourClass(), sw); String xmlContent = sw.toString(); System.out.println(xmlContent); // 反序列化XML为对象 Unmarshaller unmarshaller = context.createUnmarshaller(); StringReader sr = new StringReader(xmlContent); YourClass object = (YourClass) unmarshaller.unmarshal(sr); System.out.println(object); } } ``` 2. **Jackson**: Jackson是一个流行的Java库,主要用于JSON处理,但也可以处理XML。它提供了灵活的API来序列化和反序列化对象。 ```java import com.fasterxml.jackson.dataformat.xml.XmlMapper; import java.io.IOException; public class JacksonXMLExample { public static void main(String[] args) throws IOException { XmlMapper xmlMapper = new XmlMapper(); // 序列化对象为XML YourClass object = new YourClass(); String xmlContent = xmlMapper.writeValueAsString(object); System.out.println(xmlContent); // 反序列化XML为对象 YourClass deserializedObject = xmlMapper.readValue(xmlContent, YourClass.class); System.out.println(deserializedObject); } } ``` 3. **XStream**: XStream是一个简单的库,用于将Java对象序列化为XML并反序列化回来。它不需要任何映射文件或注释。 ```java import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import java.io.StringReader; import java.io.StringWriter; public class XStreamExample { public static void main(String[] args) { XStream xstream = new XStream(new DomDriver()); // 序列化对象为XML YourClass object = new YourClass(); String xmlContent = xstream.toXML(object); System.out.println(xmlContent); // 反序列化XML为对象 YourClass deserializedObject = (YourClass) xstream.fromXML(xmlContent); System.out.println(deserializedObject); } } ``` 这些工具类各有优缺点,选择哪一个取决于具体需求和项目环境。JAXBJava的标准解决方案,Jackson在处理JSON和XML时都非常强大,而XStream则以其简单性和灵活性著称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值