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);
}
}
}