审查视图

src/test/java/com/sy/X82Test.java 7.2 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
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);
        }


    }
}