`
uule
  • 浏览: 6337926 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

castor - xml与java对象转换-(Unmarshaller.unmarshal)

 
阅读更多

Castor简单介绍

Castor功能与应用参考-XML框架

Castor实现XML与Java的互转

IBM:XML 与 Java 技术: 用 Castor 进行数据绑定

浅析Castor数据绑定1.2.3

实现 Castor 数据绑定

用Castor 处理XML文档

 

实现 Castor 数据绑定

 

StringReader reader=null;
try
{
	//strXML为XML文件内容
	reader=new StringReader(strXML);
	MyJavaBean bean = (MyJavaBean)(Unmarshaller.unmarshal(MyJavaBean.class, reader));
	return bean;
}
finally
{
	if(reader!=null)
	{
		try
		{
			reader.close();
		}
		catch(Exception e)
		{//TODO 日志
			logger.error("fromXML:"+e.getMessage(),e);
		}
	}
}

 

 

castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定,在XML数据交换方面很有用。

 

在业务开发中,我们曾试过这样的方法来让XML数据与JAVA对象进行转化:

Alarm.xml

<?xml version="1.0" encoding="GB2312"?>
<alarm>
    <alarmType>
        外部告警
    </alarmType>
    <detailContent>
        告警正文
    </detailContent>
</alarm>

 

Alarm.java

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
 
// 告警实体类
public class Alarm
{
       private String alarmType = null;
 
       private String detailContent = null;
 
       public Alarm(){ }
 
       public Alarm(String alarmType, String detailContent)
       {
              this.alarmType = alarmType;
              this.detailContent = detailContent;
       }
 
       public String getAlarmType()
       {
              return alarmType;
       }
 
       public void setAlarmType(String alarmType)
       {
              this.alarmType = alarmType;
       }
 
       public String getDetailContent()
       {
              return detailContent;
       }
 
       public void setDetailContent(String detailContent)
       {
              this.detailContent = detailContent;
       }
 
       public String toString()
       {
              ToStringBuilder builder = new ToStringBuilder(this);
              ToStringBuilder.setDefaultStyle(ToStringStyle.SIMPLE_STYLE);
              builder.append("alarmType", alarmType);
              builder.append("detailContent", detailContent);
              return builder.toString();
       } 
} 

  
Parser.java

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
 
// 将XML数据转换为业务对象
// 方法一
public class Parser
{
       public Alarm xml2Alarm(String xmlFileName)
       {
              Alarm alarm = null;
              String alarmType = null;
              String detailContent = null;
              SAXBuilder builder = new SAXBuilder();
              Document doc = null;
              try
              {
                     doc = builder.build(xmlFileName);
              } catch (JDOMException e)
              {
                     e.printStackTrace();
              }
              Element root = doc.getRootElement();
              alarmType = root.getChildTextNormalize("alarmType");
              detailContent = root.getChildTextNormalize("detailContent");
              alarm = new Alarm();
              alarm.setAlarmType(alarmType);
              alarm.setDetailContent(detailContent);
              return alarm;
       }
 
       public static void main(String[] args)
       {
              Parser parser = new Parser();
 
              Alarm alarm = parser.xml2Alarm("d:/Alarm.xml");
 
              System.out.println(alarm);
       }
}

 

 这种将XML数据转换到JAVA对象的过程可以表示为:XML文件->提取数据->填充业务对象。开发过程首先要用XML API对XML文件的结构和数据进行操作,获取其中的具体数据,然后再将其填充到具体对象中,产生业务对象。这样面对数据操作的方法对于复杂的业务对象(比如20、30个属性的业务对象很常见)将需要很大的开发工作量,并且容易出错,维护困难。再来看看另一种方法:
 
Parser2.java 

import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import org.xml.sax.InputSource;
 
// 将XML数据转换为业务对象
// 方法二
public class Parser2
{
       public Alarm xml2Alarm(String xmlFileName)
       {
              Alarm alarm = null;
              try
              {
                     alarm = (Alarm) Unmarshaller.unmarshal(Alarm.class,
                                   new InputSource(xmlFileName));
                    
              } catch (MarshalException e)
              {
                     e.printStackTrace();
              } catch (ValidationException e)
              {
                     e.printStackTrace();
              }
              return alarm;
       }
      
       public static void main (String[] args)
       {
              Parser2 parser = new Parser2();
             
              Alarm  alarm = parser.xml2Alarm("d:/Alarm.xml");
             
              System.out.println(alarm);
             
       }
}

  
第二种将XML文件转换为JAVA对象的过程可以表示为:XML数据->业务对象。开发过程直接将XML文件解组为业务对象,编码简洁,不需要做更多的转换或填充。这种由一套API直接将XML文档转换为JAVA对象的方法,我们称之为XML数据绑定。可以实现数据绑定的API或软件包在JAVA领域有很多种,比如SUN的JAXB、Exolab的Castor,还有Quick、Zeus。这里我主要以Castor为例。


 

分享到:
评论

相关推荐

    castor解析xml与xsd校验xml

    4. **解析XML到Java对象**:使用`Unmarshaller`接口实例化的对象,调用`unmarshal()`方法,传入XML文件或输入流,即可将XML转换为Java对象。例如: ```java File xmlFile = new File("path/to/xml/file.xml"); ...

    castor :Java与xml互转示例---代码

    Castor是基于Java的,它通过生成Java类来解析XML文档,或者将Java对象转换为XML。它的核心功能包括: - **XML到Java对象的绑定(XML Binding)**:将XML文档解析成Java对象模型。 - **Java对象到XML的序列化**:将...

    Castor的使用,如何将java object转换为xml

    2. **验证**:在将Java对象转换为XML时,可以使用Castor的验证功能检查数据是否符合预设的约束。 3. **JDBC支持**:Castor可以读取数据库的结果集并将其转换为XML,反之亦然。 4. **性能优化**:Castor提供了缓存...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具

    3. **Java对象的序列化与反序列化**:调用Castor提供的API,实现XML与Java对象之间的转换。 例如,如果你有一个`User`类,一个对应的XML结构,以及一个映射文件,你可以通过以下方式使用Castor: ```java import ...

    《用Castor 处理XML文档》学习笔记

    相反,使用`Unmarshaller`将Java对象转换为XML文档: ```java Unmarshaller unmarshaller = new Unmarshaller(Person.class); unmarshaller.setMappingDir("path/to/mapping/xml"); File xmlFile = new File(...

    解决Castor使用时根节点问题

    Castor,全称为Java Content Repository (JCR) API的实现之一,它是一个强大的Java对象到XML数据绑定库,常用于将Java对象序列化为XML,或者反序列化XML到Java对象。在处理XML数据时,根节点是XML文档中至关重要的...

    Castor.docx

    2. **自动序列化和反序列化**:Castor能够自动将Java对象转换为XML字符串,反之亦然。这在处理XML数据交换时非常有用,例如在Web服务或数据存储中。 3. **支持复杂数据类型**:Castor不仅支持基本类型的转换,还...

    XML与Java对象互相转化Demo(Eclipse)

    此外,还可以使用第三方库如Apache Commons Digester或Castor来完成XML与Java对象的转化,它们提供了更灵活的配置和更强大的功能。 总结,这个示例项目主要教授了如何在Java中使用JAXB进行XML与Java对象的互转,这...

    javabean到XML的转换

    Castor是一个强大的Java对象到XML绑定框架,它可以自动将Java对象转换为XML文档,反之亦然。以下是如何使用Castor进行JavaBean到XML转换的步骤: 1. **引入Castor依赖**:首先,你需要在项目中引入Castor库。如果是...

    xml 绑定 binding

    在`BindingExample.java`中,会有一段代码用来加载映射文件,初始化Castor的上下文(Context),然后进行XML到Java对象的反序列化(Deserialization)或者Java对象到XML的序列化(Serialization)。例如: ```java ...

    Castor使用例子

    3. **序列化**:将Java对象转换为XML的过程称为序列化。通过调用`Marshaller.marshal()`方法,你可以将Java对象写入XML文件或XML字符串。这在保存数据、传输数据或生成XML报告时非常有用。 4. **反序列化**:相反,...

    Java与XML数据绑定

    Java与XML数据绑定是将XML文档中的数据结构映射到Java对象的过程,反之亦然。这一技术使得在Java应用程序中处理XML数据变得更加便捷,避免了手动解析和构建XML字符串的繁琐工作。本篇将深入探讨Java中XML数据绑定的...

    xsd生成javaBean

    Castor库还提供了序列化和反序列化的功能,使得XML与Java对象之间的转换更加便捷。 以下是一段简单的示例代码,展示如何使用Castor将XML数据转化为JavaBean: ```java import org.exolab.castor.xml....

    Castor、digester实例

    Castor是一个开放源码的Java库,它提供了XML绑定功能,允许Java对象与XML文档之间的自动转换。这种转换可以是将Java对象序列化为XML,或者将XML数据反序列化为Java对象。Castor的核心功能在于它的Mapping API,它...

    XML_与_Java_技术_用_Castor_进行数据绑定

    同样,创建一个`Unmarshaller`实例,然后调用`unmarshal()`方法,传入Java对象和XML输出目标。 5. **自动映射**:Castor提供自动映射功能,即根据Java类的名称和结构尝试自动创建XML映射。但这可能不适用于所有复杂...

    spring-oxm源码

    1. **Unmarshaller接口**:`Unmarshaller`接口定义了反序列化的基本操作,如`unmarshal`方法,将XML输入流或节点转换为Java对象。它的实现类如`Jaxb2Unmarshaller`会调用JAXB的相应API完成反序列化过程。 2. **...

Global site tag (gtag.js) - Google Analytics