最近在做xstream对bean和xml进行转化的小例子,在xml转化成bean时出现一个问题。话不多说,先贴代码:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
public class XStreamTest {
private XStream xstream=null;
private ObjectOutputStream out = null;
private ObjectInputStream in = null;
private Stuent stu=null;
@Before
public void init(){
xstream =new XStream();
stu =new Stuent();
stu.setAddress("china");
stu.setEmail("chen@126.com");
stu.setName("chen");
stu.setId(1);
Profile p =new Profile("软件工程师", "15850539386", "XXXXX");
stu.setProfile(p);
}
@After
public void destory() {
xstream = null;
stu = null;
try {
if (out != null) {
out.flush();
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
System.gc();
}
@Test
public void writeBean2XML() {
try {
System.out.println("------------Bean->XML------------");
System.out.println(xstream.toXML(stu));
System.out.println("-----------重命名后的XML----------");
//类重命名
xstream.alias("account", Stuent.class);
xstream.alias("message", Profile.class);
//属性重命名
xstream.aliasField("编号", Stuent.class, "id");
xstream.aliasField("邮件", Stuent.class, "email");
xstream.aliasField("姓名", Stuent.class, "name");
xstream.aliasField("地址", Stuent.class, "address");
xstream.aliasField("工作", Profile.class, "job");
xstream.aliasField("电话", Profile.class, "tel");
xstream.aliasField("备注", Profile.class, "remark");
FileOutputStream ops = new FileOutputStream(new File("d:\\111.xml"));
xstream.toXML(stu, ops);
ops.close();
System.out.println(xstream.toXML(stu));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void readXML2Bean(){
try {
FileInputStream ops = new FileInputStream(new File("d:\\111.xml"));
xstream.fromXML(ops,stu);
stu.getName();
stu.getId();
stu.getAddress();
stu.getEmail();
stu.getProfile();
System.out.println(stu.getName());
System.out.println(stu.getId());
System.out.println(stu.getAddress());
System.out.println( stu.getEmail());
System.out.println( stu.getProfile());
ops.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我添加了红色字体部分的,对类及属性进行别名处理,不加别名时,xml是可以解析成bean的,加了之后解析就报错了;
com.thoughtworks.xstream.mapper.CannotResolveClassException: account : account
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:49)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.XStream11XmlFriendlyMapper.realClass(XStream11XmlFriendlyMapper.java:23)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:72)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:60)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:76)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:34)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:113)
at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:826)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:813)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:796)
at test.XStreamTest.readXML2Bean(XStreamTest.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
小弟愚钝,还请大家赐教啊~~~
分享到:
相关推荐
**使用XStream进行Bean到XML转换的步骤:** 1. **引入库**:首先,你需要在项目中引入XStream库,这可以通过添加对应的jar文件(如xstream-1.3.1.jar)或者在Maven或Gradle等构建工具中配置依赖完成。 2. **创建...
在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...
在Java开发中,数据转换是常见的任务之一,特别是在处理XML数据时。xStream是一个轻量级的库,...通过创建这样一个工具类,开发者可以更方便地在XML数据和Java Bean对象之间进行转换,从而提高代码的可读性和可维护性。
XStream不仅能够将Java对象转换为XML,还可以反向将XML转换回Java对象,极大地简化了对象与XML之间的序列化和反序列化过程。 XStream库是由Johannes Lehtinen创建的一个开源项目,它是基于Java的,可以处理复杂的...
这个过程使得XML和Java对象之间可以方便地进行双向转换,极大地提升了开发效率和代码的可读性。 在XStream中,你可以定义一个Java类,然后通过XStream实例将其实例化后的对象转换成XML字符串。同样,也可以从XML...
如果需要自定义XML的输出,例如改变元素名或者添加额外的转换规则,可以使用`xstream.alias()`和`xstream.asAttribute()`等方法。 反序列化则是将XML字符串恢复为Java对象的过程。同样以User类为例: ```java User...
**XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...
它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.20 实体类和测试类详见博客 ...
在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的示例代码,通过查看和运行这些示例,你可以更好地理解如何在实际项目中应用XStream和JAXB进行XML与Java Bean的互转。无论选择哪种方法,都需要注意处理Java...
- **简单易用:**XStream 提供了简洁的 API,使得在 Java 代码中进行 XML 和 Java 对象之间的转换变得非常容易。 - **自定义映射:**如果默认的自动映射不符合需求,可以使用注解或配置文件来自定义字段与 XML 元素...
在提供的文件`ClassToXml.java`和`CC.java`中,很可能是实现了XML到Bean或Bean到XML转换的示例代码。具体实现细节需要查看源代码才能理解。通常,这些类会包含对JAXB API的调用,如创建JAXBContext、Unmarshaller和...
解压后,我们可以看到一个名为"bean2xml"的文件,这可能是Java源代码或者测试类,用于演示如何使用XStream进行转换。 要使用XStream,首先需要添加XStream库到项目中。如果你使用的是Maven,可以在pom.xml文件中...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...
### XML转换为Bean XStream也可以反序列化XML字符串回Java对象。以下是相应的代码: ```java String xml = "<user><name>John</name><age>30</age></user>"; User user = (User) xstream.fromXML(xml); ``` 在这里...
使用XStream进行XML与JavaBean的转换非常简单。首先,你需要在项目中引入XStream库,如果是MyEclipse,可以通过右键点击项目 -> Build Path -> Configure Build Path -> Libraries -> Add External JARs,选择...
"Converter between XML and Java Bean"的主题关注的是如何在两者之间进行转换,以方便数据的交换和处理。 在Java世界中,XML与Java Bean之间的转换通常通过序列化和反序列化来实现。序列化是将Java对象转换为XML的...
// 实现将XML转换为指定类型的Bean } public static String toXML(Object obj) { // 实现将Java对象转换为XML字符串 } } ``` 这个工具对于需要频繁在XML和Java对象之间转换的项目非常有用,比如在Web服务或者...
在本文中,我们将深入探讨XStream的核心功能、如何使用它进行Java Bean到XML以及JSON的转换,并了解其在项目中的实际应用。 XStream的核心在于它的能力,将Java对象直接转化为XML或JSON字符串,反之亦然。这种功能...
通过创建对应的Java类并使用`Marshaller`和`Unmarshaller`接口进行操作。 - Jackson库的`ObjectMapper`类可以将Java对象直接序列化为JSON字符串,或者反序列化JSON字符串为Java对象。 - Gson库同样提供了类似的`to...
接下来,我们将使用XStream进行XML的序列化和反序列化。首先,创建一个XStream实例并配置它: ```java import com.thoughtworks.xstream.XStream; XStream xstream = new XStream(); xstream.alias("person", ...