X82Test.java 7.2 KB
package com.sy;

import com.sy.model.DxpMsg;
import com.sy.model.X82Feedback;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class X82Test {

    static String dxpmsg="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<DxpMsg ver=\"1.0\" xmlns=\"http://www.chinaport.gov.cn/dxp\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
            "\t<TransInfo>\n" +
            "\t\t<CopMsgId>256afcf4887d49a2840ec24b78ed1755</CopMsgId>\n" +
            "\t\t<SenderId>GJCKK00000000001</SenderId>\n" +
            "\t\t<ReceiverIds>\n" +
            "\t\t\t<ReceiverId>GDXPKK0000000002</ReceiverId>\n" +
            "\t\t</ReceiverIds>\n" +
            "\t\t<CreatTime>2022-08-17T15:00:52</CreatTime>\n" +
            "\t\t<MsgType>JCKK</MsgType>\n" +
            "\t</TransInfo>\n" +
            "\t<Data>4lxLiQICAAAiNDYwNDYwMDAwMDQ2MDQ2MDEwMTFJ/////9oBAAA8Q09NTUFORF9JTkZPIEFSRUFfSUQ9IjQ2MDQ2MDAwMDAiIENITkxfTk89IjQ2MDQ2MDEwMTEiIElfRV9UWVBFPSJJIiBTRVFfTk89IjIwMjIwODE3MTQ0MjE1NjEwMDEwIj4KICAgIDxDSEVDS19SRVNVTFQ+MTEwMDAwMDAwMDAwMDAwMDAwMDA8L0NIRUNLX1JFU1VMVD4KICAgIDxPUF9ISU5UPrbByKGyu7W9tP3R6brLyv2+3TwvT1BfSElOVD4KICAgIDxHUFM+CiAgICAgICAgPFZFX05BTUU+PC9WRV9OQU1FPgogICAgICAgIDxHUFNfSUQ+PC9HUFNfSUQ+CiAgICAgICAgPE9SSUdJTl9DVVNUT01TPjwvT1JJR0lOX0NVU1RPTVM+CiAgICAgICAgPERFU1RfQ1VTVE9NUz48L0RFU1RfQ1VTVE9NUz4KICAgIDwvR1BTPgogICAgPFNFQUw+CiAgICAgICAgPEVTRUFMX0lEPjwvRVNFQUxfSUQ+CiAgICAgICAgPFNFQUxfS0VZPjwvU0VBTF9LRVk+CiAgICA8L1NFQUw+CiAgICA8Rk9STV9JRD48L0ZPUk1fSUQ+CjwvQ09NTUFORF9JTkZPPgr//w==</Data>\n" +
            "\t<AddInfo>\n" +
            "\t\t<FileName>20220817150050391844.dat</FileName>\n" +
            "\t</AddInfo>\n" +
            "</DxpMsg>";

    static String x82 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<GATHER_FEEDBACK xmlns=\"http://rpb.customs.gov.cn/common/FrontEndSchemas/\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n" +
            "    <AREA_ID>123</AREA_ID>\n" +
            "    <CHNL_NO>456</CHNL_NO>\n" +
            "    <SESSION_ID>789</SESSION_ID>\n" +
            "    <RELLIST_TYPE>TypeA</RELLIST_TYPE>\n" +
            "    <RELLIST_ID_TYPE>IDType1</RELLIST_ID_TYPE>\n" +
            "    <RELLIST_ID>001</RELLIST_ID>\n" +
            "    <FEEDBACK_TIME>2022-07-15T14:23:51.4679206+08:00</FEEDBACK_TIME>\n" +
            "    <CHECK_RESULT>Y</CHECK_RESULT>\n" +
            "    <INSTRUCTION>设备A:操作</INSTRUCTION>\n" +
            "    <PROC_ERROR_CODE>100</PROC_ERROR_CODE>\n" +
            "    <PROC_ERROR_DESCRIPTION>Error description</PROC_ERROR_DESCRIPTION>\n" +
            "    <TECH_ERROR_CODE>200</TECH_ERROR_CODE>\n" +
            "    <TECH_ERROR_DESCRIPTION>Technical error</TECH_ERROR_DESCRIPTION>\n" +
            "    <IC_INFO>\n" +
            "        <IC_ID>IC001</IC_ID>\n" +
            "        <IC_NO>123456</IC_NO>\n" +
            "        <IC_TYPE>TypeA</IC_TYPE>\n" +
            "        <IC_EXTENDED_CONTENT>Extended content for IC card</IC_EXTENDED_CONTENT>\n" +
            "    </IC_INFO>\n" +
            "    <VE_INFO>\n" +
            "        <VE_CUSTOMS_NO>7890123</VE_CUSTOMS_NO>\n" +
            "        <VE_LICENSE_NO>ABC123</VE_LICENSE_NO>\n" +
            "        <VE_LICENSE_NO2>XYZ987</VE_LICENSE_NO2>\n" +
            "        <DR_CUSTOMS_NO>4567890</DR_CUSTOMS_NO>\n" +
            "        <DR_NAME>John Doe</DR_NAME>\n" +
            "        <TRAILER_ID>Trailer001</TRAILER_ID>\n" +
            "        <WEIGHT_DIFF>0.5</WEIGHT_DIFF>\n" +
            "        <CHANNEL_WEIGHT>1000.0</CHANNEL_WEIGHT>\n" +
            "        <GROSS_WEIGHT>2000.0</GROSS_WEIGHT>\n" +
            "        <VEHICLE_WEIGHT>1000.0</VEHICLE_WEIGHT>\n" +
            "    </VE_INFO>\n" +
            "    <CONTA_ID>Container001</CONTA_ID>\n" +
            "    <ESEAL_ID>ESeal001</ESEAL_ID>\n" +
            "    <SEAL_ID>Seal001</SEAL_ID>\n" +
            "    <FORM_INFO>\n" +
            "        <FORM_TYPE>TypeA</FORM_TYPE>\n" +
            "        <FORM_ID>Form001</FORM_ID>\n" +
            "        <MASTER_CUSTOMS_CODE>MasterCode</MASTER_CUSTOMS_CODE>\n" +
            "    </FORM_INFO>\n" +
            "    <PACK_NO>10</PACK_NO>\n" +
            "    <DECL_PACK>12</DECL_PACK>\n" +
            "    <DECL_GOODS_WEIGHT>5000.0</DECL_GOODS_WEIGHT>\n" +
            "    <OP_HINT>Operation hint message</OP_HINT>\n" +
            "    <LED_HINT>LED hint message</LED_HINT>\n" +
            "    <EXTENDED_CONTENT>Extended content</EXTENDED_CONTENT>\n" +
            "</GATHER_FEEDBACK>\n";
    public static void main(String[] args) {

        System.out.println(x82);
//        DxpMsg analysis = analysis(dxpmsg);
        X82Feedback x82Feedback = x82analysis(x82);
        System.out.println("OK");

    }

    static DxpMsg analysis(String str) {
        XStream xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("_-", "_")));
        xstream.processAnnotations(DxpMsg.class);
        //对xstream对象设置默认的安全防护
        XStream.setupDefaultSecurity(xstream);
        //对xstream对象设置默认的安全防护时,允许设置类
        xstream.allowTypes(new Class[]{DxpMsg.class});
        return (DxpMsg) xstream.fromXML(str);
    }

    static X82Feedback x82analysis(String str) {
        XStream xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("_-", "_")));
        // 注册自定义转换器
        xstream.registerConverter(new DateConverter());
        xstream.processAnnotations(X82Feedback.class);
        //对xstream对象设置默认的安全防护
        XStream.setupDefaultSecurity(xstream);
        //对xstream对象设置默认的安全防护时,允许设置类
        xstream.allowTypes(new Class[]{X82Feedback.class});
        return (X82Feedback) xstream.fromXML(str);
    }

    public static class DateConverter implements Converter {
        private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX";
        private final SimpleDateFormat dateFormat;

        public DateConverter() {
            this.dateFormat = new SimpleDateFormat(DATE_FORMAT);
        }

        @Override
        public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext context) {
            // Not used for unmarshalling
        }

        @Override
        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
            String dateString = reader.getValue();
            try {
                return dateFormat.parse(dateString);
            } catch (ParseException e) {
                throw new IllegalArgumentException("Error parsing date string: " + dateString, e);
            }
        }

        @Override
        public boolean canConvert(Class aClass) {
            return aClass.equals(Date.class);
        }


    }
}