xml报文转Java实体

公众号推广:

目前CSDN进行VIP可见,文章可在微信公众号进行免费的阅读。

文章内容经过认证实践,比较的清晰易懂,适合初次接触的人员。

请关注微信公众号:菜鸟编程踩坑之路,进入公众号搜索关键词 xml转实体

需求场景:

因为需要对接一些比较老的系统接口,他们的请求方式不是JSON数据结构,一般会采用xml数据结构来作为数据的入参和返参。因为我们的系统是通过JSON数据进行交互的突然接入xml数据结构的会比较的麻烦,麻烦的体现在xml数据结构比较复杂,同时如果采用字符串拼接的话会比较的难以维护。

解决方案:

将xml转为Java实体进行实体对象的操作

实现方案:

通过JAXBContext来将xml字符串转为Java实体或者把Java实体转为xml字符串

实现步骤:

1、根据xml文件生成xsd文件 

首先需要准备一个jar包来帮助我们将xml文件转为xsd文件,jar下载地址可以通过公众号获取。

 通过命令java -jar trang.jar test.xml test.xsd 生成xsd文件,如下图所示:

 

 2、通过JDK将xsd文件转为实体

执行指令xjc -p com.bean test.xsd -d C:\Users\root\Desktop\test可以将test.xsd转成Java实体,文件的生成目录为C:\Users\root\Desktop\test,如下图所示:

 

 3、Java工具类实现

  /**
     * 功能说明:把xml字符串解析为实体类的对象
     * 修改说明:
     *
     * @param xml 要解析的xml字符串
     * @param c   解析的目标类型
     * @return 返回对应T类型的对象
     * @throws JAXBException
     */
    @SneakyThrows
    public static <T> T xmlToEntity(String xml, Class<T> c) {
        JAXBContext context = JAXBContext.newInstance(c);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        T result = (T) unmarshaller.unmarshal(new StringReader(xml));
        return result;
    }

    /**
     * 实体转XML
     *
     * @param clazz
     * @param object
     * @return
     */
    @SneakyThrows
    public static String EntityToXml(Object object, Class clazz) {
        JAXBContext context = JAXBContext.newInstance(clazz);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(object, writer);
//        System.out.println(writer.toString());
        return writer.toString();
    }

4、测试工具类

  @SneakyThrows
    public static void main(String[] args) {
        String xmlParamSttr = "<OTA_AirTicketReShopRQ>\n" +
                "    <POS>\n" +
                "        <Source>\n" +
                "            <PseudoCityCode>BJS191</PseudoCityCode>\n" +
                "            <airlinecode>CA</airlinecode>\n" +
                "            <CityCode>BJS</CityCode>\n" +
                "            <iatacode>08000001</iatacode>\n" +
                "        </Source>\n" +
                "    </POS>\n" +
                "    <FlightSegments>\n" +
                "        <FlightSegment>\n" +
                "            <departure LocationCode=\"SHA\" />\n" +
                "            <arrival LocationCode=\"PEK\" />\n" +
                "            <equipment AirEquipType=\"744\" />\n" +
                "            <marketingCarrier Code=\"CA\" />\n" +
                "            <operationCarrier Code=\"CA\" />\n" +
                "            <flightno>CA1858</flightno>\n" +
                "            <departureTime>2017-10-26T07:00:00</departureTime>\n" +
                "            <type>NORMAL</type>\n" +
                "            <cabin>Y</cabin>\n" +
                "            <changed>true</changed>\n" +
                "            <actionCode>HK</actionCode>\n" +
                "            <TicketNumber_Before>999-5789885497</TicketNumber_Before>\n" +
                "            <IsInfant>false</IsInfant>\n" +
                "            <PassName>ZHANG/JIANXIN</PassName>\n" +
                "            <PassID>P1</PassID>\n" +
                "            <PassCount>1</PassCount>\n" +
                "            <InvoluntaryIdentifier>false</InvoluntaryIdentifier>\n" +
                "            <querydepdate>20171026</querydepdate>\n" +
                "        </FlightSegment>\n" +
                "    </FlightSegments>\n" +
                "</OTA_AirTicketReShopRQ>";
        OTAAirTicketReShopRQ otaAirTicketReShopRQ = xmlToEntity(xmlParamSttr, OTAAirTicketReShopRQ.class);
        System.out.println(JSON.toJSONString(otaAirTicketReShopRQ));
        String xmlResp = EntityToXml(otaAirTicketReShopRQ, OTAAirTicketReShopRQ.class);
        System.out.println(xmlResp);
    }

测试结果如下所示:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要解析XML并将其转换Java实体,可以使用JAXB(Java Architecture for XML Binding)库。以下是解析XML并将其转换Java实体的一般步骤: 1. 首先,需要根据XML文件生成相应的XSD文件,该文件定义了XML的结构和约束。可以使用Trang工具通过以下命令生成XSD文件:java -jar trang.jar test.xml test.xsd。 2. 接下来,使用JAXBContext来创建一个上下文对象,该对象用于处理XMLJava实体之间的转换关系。 3. 定义Java实体类,它们对应于XML中的元素和属性。 4. 使用JAXBUnmarshaller将XML文件解析为Java对象,并将其转换Java实体。可以使用unmarshal方法来完成这一步骤。 5. 现在,您可以使用Java对象来访问和操作XML中的数据。 以下是一个示例代码,展示了如何解析XML并将其转换Java实体: ```java // 创建JAXBContext对象 JAXBContext jaxbContext = JAXBContext.newInstance(YourEntity.class); // 创建Unmarshaller对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 使用unmarshal方法解析XML,并将其转换Java实体 YourEntity entity = (YourEntity) unmarshaller.unmarshal(new File("your_xml_file.xml")); ``` 请将"YourEntity"替换为您要转换实体类的名称,并将"your_xml_file.xml"替换为您要解析的XML文件的路径。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [xml报文Java实体](https://blog.csdn.net/h_j_c_123/article/details/130869378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值