最近项目中使用castor进行JAVA对象和XML之间的转换时,出现了一个问题。 有3个需要映射的bean如下:
Java代码
1 package model;
2
3 public class InformConfig {
4
5 private Inform inform;
6 private EmailServer emailServer;
7 public Inform getInform() {
8 return inform;
9 }
10 public void setInform(Inform inform) {
11 this.inform = inform;
12 }
13 public EmailServer getEmailServer() {
14 return emailServer;
15 }
16 public void setEmailServer(EmailServer emailServer) {
17 this.emailServer = emailServer;
18 }
19
20 }
Java代码
21 package model;
22
23 public class EmailServer {
24
25 private String pop3;
26 private String smtp;
27 private String name;
28 private String password;
29 public String getPop3() {
30 return pop3;
31 }
32 public void setPop3(String pop3) {
33 this.pop3 = pop3;
34 }
35 public String getSmtp() {
36 return smtp;
37 }
38 public void setSmtp(String smtp) {
39 this.smtp = smtp;
40 }
41 public String getName() {
42 return name;
43 }
44 public void setName(String name) {
45 this.name = name;
46 }
47 public String getPassword() {
48 return password;
49 }
50 public void setPassword(String password) {
51 this.password = password;
52 }
53
54
55
56 }
Java代码
57 package model;
58
59 public class Inform {
60
61 private String smsContent;
62 private String emailContent;
63 private String smsDest;
64 private String emailDest;
65
66 public String getSmsContent() {
67 return smsContent;
68 }
69 public void setSmsContent(String smsContent) {
70 this.smsContent = smsContent;
71 }
72 public String getEmailContent() {
73 return emailContent;
74 }
75 public void setEmailContent(String emailContent) {
76 this.emailContent = emailContent;
77 }
78 public String getSmsDest() {
79 return smsDest;
80 }
81 public void setSmsDest(String smsDest) {
82 this.smsDest = smsDest;
83 }
84 public String getEmailDest() {
85 return emailDest;
86 }
87 public void setEmailDest(String emailDest) {
88 this.emailDest = emailDest;
89 }
90
91
92
93 }
规则文件mapping.xml配置:
Java代码
94
95
96 "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
97 "http://castor.exolab.org/mapping.dtd">
98
99
100
101 <class name="model.InformConfig" auto-complete="true">
102
103
104
105
106
107
108
109 class>
110
111 <class name="model.Inform">
112
113
114
115
116
117
118
119
120
121
122
123
124 class>
125
126 <class name="model.EmailServer">
127
128
129
130
131
132
133
134
135
136
137
138
139 class>
140
141
测试编组的代码如下:
Java代码
142 Inform inform = new Inform();
143 inform.setEmailContent("email content");
144 inform.setSmsContent("sms content");
145 inform.setEmailDest("fw@163.com");
146 inform.setSmsDest("133********");
147 EmailServer emailServer = new EmailServer();
148 emailServer.setName("fw");
149 emailServer.setPassword("123");
150 emailServer.setPop3("163.pop3.com");
151 emailServer.setSmtp("163.smtp.com");
152 InformConfig informConfig = new InformConfig();
153 informConfig.setEmailServer(emailServer);
154 informConfig.setInform(inform);
155
156 Mapping map = new Mapping();
157 map.loadMapping("mapping.xml");
158 Marshaller ma = new Marshaller(new FileWriter("informConfig.xml"));
159 ma.setMapping(map);
160 ma.marshal(informConfig);
产生的informConfig.xml如下:
Java代码
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
以上均达到了我的要求,但是在解组时获得的InformConfig对象中的属性全部都是NULL,测试解组的代码如下
Java代码
176 Unmarshaller uma = new Unmarshaller(map);
177 //这里获得的InformConfig对象ic中的属性均为NULL
178 InformConfig ic =
179 (InformConfig) uma.unmarshal(InformConfig.class, new FileReader("informConfig.xml"));
¥29.8
¥9.9
¥59.8