關於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