关于XStream的Xml转JavaBean对象时的报错
这次不啰嗦那么多,就简单记录一下。
com.thoughtworks.xstream.security.ForbiddenClassException这个错误在我调用fromXML()方法突然就蹦出来了,找了很多解决方法,一个一个尝试了,最终只能大致确定的是:
1. 出现这个问题的绝大多数是XStream的1.4.x版本,升级到1.5.x可能就没这个问题了;
2. 解决这个问题,只需要添加代码,如下:
xstream.setupDefaultSecurity(xstream); // to be removed after 1.5
xstream.allowTypesByWildcard(new String[] {
"test2090715.**"
});
下面附上我在理解XStream时写的简单的xml、Javabean转换小demo。
Test类:
package test2090715;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class Test {
public static void main(String[] args) {
//XStream初始化
XStream xstream = new XStream(new DomDriver("UTF-8"));
xstream.setupDefaultSecurity(xstream); // to be removed after 1.5
xstream.allowTypesByWildcard(new String[] {
"test2090715.**"
});
//JavaBean -> xml
Person person = new Person("hah",15,new Date(),Arrays.asList(new String[] {"a","b","c"}));
String xml = xstream.toXML(person);
System.out.println(xml);
//JavaBean -> xml
Person[] ps = {new Person("hah",15,new Date(),Arrays.asList(new String[] {"a","b","c"})),
new Person("hah",15,new Date(),Arrays.asList(new String[] {"d","e","f"})),
new Person("hah",15,new Date(),Arrays.asList(new String[] {"h","i","j"}))
};
List<Person> list = Arrays.asList(ps);
String xml2 = xstream.toXML(list);
System.out.println(xml2);
//xml -> JavaBean
String xml3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<java.util.Arrays_-ArrayList>\r\n" +
" <a class=\"test2090715.Person-array\">\r\n" +
" <test2090715.Person>\r\n" +
" <name>hah</name>\r\n" +
" <age>15</age>\r\n" +
" <date>2019-07-16 01:51:03.196 UTC</date>\r\n" +
" <arrayList class=\"java.util.Arrays$ArrayList\">\r\n" +
" <a class=\"string-array\">\r\n" +
" <string>a</string>\r\n" +
" <string>b</string>\r\n" +
" <string>c</string>\r\n" +
" </a>\r\n" +
" </arrayList>\r\n" +
" </test2090715.Person>\r\n" +
" <test2090715.Person>\r\n" +
" <name>hah</name>\r\n" +
" <age>15</age>\r\n" +
" <date>2019-07-16 01:51:03.196 UTC</date>\r\n" +
" <arrayList class=\"java.util.Arrays$ArrayList\">\r\n" +
" <a class=\"string-array\">\r\n" +
" <string>d</string>\r\n" +
" <string>e</string>\r\n" +
" <string>f</string>\r\n" +
" </a>\r\n" +
" </arrayList>\r\n" +
" </test2090715.Person>\r\n" +
" <test2090715.Person>\r\n" +
" <name>hah</name>\r\n" +
" <age>15</age>\r\n" +
" <date>2019-07-16 01:51:03.196 UTC</date>\r\n" +
" <arrayList class=\"java.util.Arrays$ArrayList\">\r\n" +
" <a class=\"string-array\">\r\n" +
" <string>h</string>\r\n" +
" <string>i</string>\r\n" +
" <string>j</string>\r\n" +
" </a>\r\n" +
" </arrayList>\r\n" +
" </test2090715.Person>\r\n" +
" </a>\r\n" +
"</java.util.Arrays_-ArrayList>";
List<Person> plist = (List<Person>) xstream.fromXML(xml3);
System.out.println(plist);
}
}
Person类:
package test2090715;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Person {
private String name;
private Integer age;
private Date date;
private List<String> arrayList;
public Person(String name, Integer age, Date date, List<String> arrayList) {
super();
this.name = name;
this.age = age;
this.date = date;
this.arrayList = arrayList;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public List<String> getArrayList() {
return arrayList;
}
public void setArrayList(List<String> arrayList) {
this.arrayList = arrayList;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", date=" + date + ", arrayList=" + arrayList + "]";
}
}

浙公网安备 33010602011771号