`
sys_ks_cnm
  • 浏览: 21438 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

用xstream进行bean和xml转换出现的问题

阅读更多
最近在做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 1.3.1.jar bean对象转换为xml

    **使用XStream进行Bean到XML转换的步骤:** 1. **引入库**:首先,你需要在项目中引入XStream库,这可以通过添加对应的jar文件(如xstream-1.3.1.jar)或者在Maven或Gradle等构建工具中配置依赖完成。 2. **创建...

    xml解析及使用XStream实现javaBean与xml之间的转换

    在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...

    xStream xml to bean

    在Java开发中,数据转换是常见的任务之一,特别是在处理XML数据时。xStream是一个轻量级的库,...通过创建这样一个工具类,开发者可以更方便地在XML数据和Java Bean对象之间进行转换,从而提高代码的可读性和可维护性。

    将对象(java bean)转换为xml字符串

    XStream不仅能够将Java对象转换为XML,还可以反向将XML转换回Java对象,极大地简化了对象与XML之间的序列化和反序列化过程。 XStream库是由Johannes Lehtinen创建的一个开源项目,它是基于Java的,可以处理复杂的...

    xstream+xmlpull xml to bean &&bean to xml

    这个过程使得XML和Java对象之间可以方便地进行双向转换,极大地提升了开发效率和代码的可读性。 在XStream中,你可以定义一个Java类,然后通过XStream实例将其实例化后的对象转换成XML字符串。同样,也可以从XML...

    xstream 让javabean和xml互相转换

    如果需要自定义XML的输出,例如改变元素名或者添加额外的转换规则,可以使用`xstream.alias()`和`xstream.asAttribute()`等方法。 反序列化则是将XML字符串恢复为Java对象的过程。同样以User类为例: ```java User...

    XStream在JavaBean与XML/JSON 之间相互转换

    **XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...

    xstream实现xml和java bean 互相转换

    它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.20 实体类和测试类详见博客 ...

    JavaXml及Bean互转

    在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的示例代码,通过查看和运行这些示例,你可以更好地理解如何在实际项目中应用XStream和JAXB进行XML与Java Bean的互转。无论选择哪种方法,都需要注意处理Java...

    xstream-1.3.1.jar javabean与xml之间的转化

    - **简单易用:**XStream 提供了简洁的 API,使得在 Java 代码中进行 XML 和 Java 对象之间的转换变得非常容易。 - **自定义映射:**如果默认的自动映射不符合需求,可以使用注解或配置文件来自定义字段与 XML 元素...

    xml to bean or bean to xml

    在提供的文件`ClassToXml.java`和`CC.java`中,很可能是实现了XML到Bean或Bean到XML转换的示例代码。具体实现细节需要查看源代码才能理解。通常,这些类会包含对JAXB API的调用,如创建JAXBContext、Unmarshaller和...

    bean2xml.zip

    解压后,我们可以看到一个名为"bean2xml"的文件,这可能是Java源代码或者测试类,用于演示如何使用XStream进行转换。 要使用XStream,首先需要添加XStream库到项目中。如果你使用的是Maven,可以在pom.xml文件中...

    xml和bean之间的相互转换源码

    在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...

    XStream转换

    ### XML转换为Bean XStream也可以反序列化XML字符串回Java对象。以下是相应的代码: ```java String xml = "<user><name>John</name><age>30</age></user>"; User user = (User) xstream.fromXML(xml); ``` 在这里...

    xml与javabean之间的相互转换,很方便,导入即可使用

    使用XStream进行XML与JavaBean的转换非常简单。首先,你需要在项目中引入XStream库,如果是MyEclipse,可以通过右键点击项目 -> Build Path -> Configure Build Path -> Libraries -> Add External JARs,选择...

    Converter between XML and Java Bean

    "Converter between XML and Java Bean"的主题关注的是如何在两者之间进行转换,以方便数据的交换和处理。 在Java世界中,XML与Java Bean之间的转换通常通过序列化和反序列化来实现。序列化是将Java对象转换为XML的...

    XML2Bean

    // 实现将XML转换为指定类型的Bean } public static String toXML(Object obj) { // 实现将Java对象转换为XML字符串 } } ``` 这个工具对于需要频繁在XML和Java对象之间转换的项目非常有用,比如在Web服务或者...

    xstream-1.4.3

    在本文中,我们将深入探讨XStream的核心功能、如何使用它进行Java Bean到XML以及JSON的转换,并了解其在项目中的实际应用。 XStream的核心在于它的能力,将Java对象直接转化为XML或JSON字符串,反之亦然。这种功能...

    XML、JAVA、JSON多种方式互相转换

    通过创建对应的Java类并使用`Marshaller`和`Unmarshaller`接口进行操作。 - Jackson库的`ObjectMapper`类可以将Java对象直接序列化为JSON字符串,或者反序列化JSON字符串为Java对象。 - Gson库同样提供了类似的`to...

    java类与xml之间相互转换实例

    接下来,我们将使用XStream进行XML的序列化和反序列化。首先,创建一个XStream实例并配置它: ```java import com.thoughtworks.xstream.XStream; XStream xstream = new XStream(); xstream.alias("person", ...

Global site tag (gtag.js) - Google Analytics