关于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 + "]";
	}
	
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM