`
wen866595
  • 浏览: 264615 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Castor XML 映射文件

    博客分类:
  • XML
阅读更多
概述:
Castor 映射是一种隔离Java对象模型因XML文档格式变化而变化的好方法。

映射信息是由一个XML文档来指定的。这个从Java对象的角度来编写,描述了对象的属性如何转换到XML。映射文件的一个约束是,Castor应该能够在解组时无疑议地把给定的XML元素、属性转换到对象模型。

映射文件描述了每个对象的每个字段如何映射到XML。字段是对象属性的抽象。它可以直接等价于一个公有的类变量或简介等价于一个属性,通过获取器方法(setter和getter)。

可以混合使用映射和Castor默认行为:当Castor处理一个对象或XML数据,但找不到有关信息时,它将依赖它的默认行为。Castor将使用Java反射API来内审Java对象来决定做什么。

注意:Castor不能处理所有可能的映射。在一些复杂的情况下,它可能需要依赖一个XSL转换来以更友好的格式生成XML文档。


编组行为:
对于Castor,一个Java类映射为一个XML element。编组一个对象时:
使用任何的映射信息来查找要创建的element的名字,或者;默认地,使用类名作为element名字。
使用映射文件里的fields信息来决定一个对象的给定属性转换到下列中的一种,且仅一种:
一个属性;
一个元素;
文本内容;
空,如果选择忽略一个特定的field。

这种处理是递归的:如果Castor找到一个属性的类型是任何其他映射文件里指定的,它将使用这个信息来编组对象。

默认地,如果Castor没有找到映射文件里类的映射信息,将内省(introspect )类,应用默认的规则来猜测字段,编组它们。默认的规则是:
A.所有基本类型和它们的包装类型编组为属性;
B.所有的对象类型编组为元素,带有文本内容活元素内容。


解组行为:
当Castor解组文档时找到一个元素时,将尝试使用映射信息来决定实例化哪个对象。如果没有映射信息,Castor将使用元素名字来猜测要实例化的类名 (for example, for an element named 'test-element', Castor will try to instantiate a class named 'TestElement' if no information is given in the mapping file)。Castor将使用映射文件里的字段映射信息来处理元素内容。

如果类没有在映射文件里描述,Castor将使用Java 的反射内省类,来判断是否存在getter/setter。这些获取器与名为’xxx-yyy’ 的XML元素/属性。

如果没有获取器,Castor将直接获取,在这种情况下,Castor将查找公有域。



映射文件
<mapping>元素
<mapping>元素是映射文件的根元素,它包含:
A.一个可选的description元素;
B.零个或多个<include>机制来重用映射文件;
C.零个或多个<field-handler>来定义定制的、可配置的field处理器;
D.零个或多个<class>描述,每个类我们希望给出映射信息;
E.零个或多个<key-generator>,没有用于XML映射。

一个映射文件看起来是这样的:
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
castor.org
"http://castor.org/mapping.dtd">
<mapping>
<description>Description of the mapping</description>
<include href="other_mapping_file.xml"/>
<!-- mapping for class 'A' -->
<class name="A">
.........
</class>
<!-- mapping for class 'B' -->
<class name="B">
.........
</class>
</mapping>


<class>元素
<class>元素包含映射一个Java 类到XML的所有信息。<class>的内容主要用来描述映射的字段。
属性描述
属性名 描述
name 要映射的类的全限定类名
extends 父类的全限定类名。这个属性应该仅在这个类继承了其他类时使用。如果没有类映射到父类则不应该使用。
depends 用于JDO
auto-complete 如果为true,类将被内省,来确定属性,映射文件里的fields将覆盖内省发现的属性。
identity JDO
access JDO
key-generator JDO

内容描述
description 可选的描述
cache-type JDO
map-to 如果元素的名字不是类名时使用。默认地,Castor将元素名映射到类名:类名XxxYyy将被转换为xxx-yyyy。如果不希望Castor生成名字,使用<map-to>来指定你希望的名字。<map-to>只用于根元素。
field 零个或多个<field>元素,用于描述被映射Java 类的属性。



<class>元素的例子:
<class name="mypackage.OrderItem>
<map-to xml="item"/>
<field name="id" type="string">
<bind-xml name="identity" node="attribute"/>
</field>
</field name="orderQuantity" type="integer">
<bind-xml name="quantity" node="element"/>
</field>
</class>


<map-to>元素
<map-to>用于指定给定类关联的元素名。<map-to>只能用于根<class>,如果没有指定此元素,Castor将使用默认规则进行匹配。

属性
名字 描述
xml 类关联的元素的名字
ns-uri 命名空间的URI
ns-prefix Desired namespace
Element-definition True if the descriptor as created from a schema definition that was of type element (as opposed to a<complexType> definition). This only is useful in the context of source code generation.
ldap-dn Not used for Castor XML
ldap-oc Not used for Castor XML

举例:
<class name="myPackage.OrderItem">
...
<map-to xml="item" />
...
</class>


<field>元素
<field>用于描述希望编组或解组的Java 对象的属性。他包含:
标识(‘name’),类型(由type和collection推断)、获取方法(由‘direct’、‘get-method’,’set-method’推断)。

为了了确定Castor期望的签名,应用了两个简单的规则:
1.<type>决定。如果没有'collection'属性,type就仅仅是指定的Java类型。Type属性可以是全限定的Java 类名或预定义的简称。
类型名简称
简称 基本类型 Java类
other N java.lang.Object
string N java.lang.String
integer Y java.lang.Integer.TYPE
long Y java.lang.Long.TYPE
boolean Y java.lang.Boolean.TYPE
double Y java.lang.Double.TYPE
float Y java.lang.Float.TYPE
big-decimal N java.lang.BigDecimal
byte Y java.lang.Byte.TYPE
date N java.util.Date
short Y java.lang.Short.TYPE
char Y java.lang.Character.TYPE
bytes N byte[]
chars N char[]
strings N String[]
locale N java.util.Locale


2.如果指定了collectioin属性,使用下表
名字 类型 默认实现
array <type_arrtibute>[] <type_arrtibute>[]
arraylist java.util.List java.util.Arraylist
vector java.util.Vector java.util.Vector
hashtable java.util.Hashtable java.util.Hashtable
collection java.util.Collection java.util.Arraylist
set java.util.Set java.util.Hashset
map java.util.Map java.util.Hashmap
sortedset java.util.SortedSet java.util.TreeSet

Collection里对象的类型是<type-attribute>。默认实现是当对象不为空时用来持有集合的。
For hashtable and maps (since 0.9.5.3), Castor will save both key and values. When marshalling output <key> and <value> elements. These names can be controlled by using a top-level or nested class mapping for the org.exolab.castor.mapping.MapItem class.

当指定类型的元素多于一个时有必要使用集合。

内容描述
在XML映射的情景下,field的内容应该有且仅有一个<bind-xml>元素,描述一个给定的字段如何映射到XML文档。
1.映射构造函数的参数
2.定义定制的字段处理器
3.



Location属性
Location属性允许用户映射嵌套的元素或为给定的元素指定一个包装元素。包装元素是出现在XML实例的简单元素,不直接映射到对象或对象模型的字段。
例如,要映射的下面类的一个实例:
public class Foo {
private Bar bar = null;
public Foo();
public getBar() {
return bar;
}
public void setBar(Bar bar) {
this.bar = bar;
}
}


到这样的一个XML实例:
<?xml version="1.0"?>
<foo>;
<abc>
<bar>...</bar>
</abc>
</foo>

(注意abc不是Bar类的一个字段)应该使用下面的映射:
<?xml version="1.0"?>
...
<class name="Foo">
<field name="bar" type="Bar">
<bind-xml name="bar" location="abc"/>
</field>
</class>
...
</mapping>


注意lcation属性,这个属性的值是包装元素的名字。为了使用多于一个的包装元素,name用/分割:<bind-xml name="bar" location="abc/xyz" />

Note that the name of the element is not part of the location itself and that the location is always relative to the class in which the field is being defined. This works for attributes also:
<bind-xml name="bar" location="abc" node="attribute" />
will produce the following:
<?xml version="1.0"?>
<foo>
<abc bar="..."/>;
</foo>



完整的映射文件可参看 映射模式的示例。

欢迎关注我的微信公众号: coderbee笔记。




  • 大小: 26.3 KB
分享到:
评论

相关推荐

    setuptools-40.7.3-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Centos7-离线安装redis

    Centos7-离线安装redis

    setuptools-39.0.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JSP实现的在线仓库管理系统源码.zip

    这个是一个JSP实现的在线仓库管理系统,管理员角色包含以下功能:仓库管理员登录,货品&amp;类别信息管理,采购信息管理,出库和入库管理,财务信息管理,管理员管理等功能。 本项目实现的最终作用是基于JSP实现的在线仓库管理系统 分为1个角色 第1个角色为管理员角色,实现了如下功能: - 仓库管理员登录 - 出库和入库管理 - 管理员管理 - 财务信息管理 - 货品&类别信息管理 - 采购信息管理

    基于springboot的房屋租赁系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    setuptools-12.0.2-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    备自投tp.pptx

    备自投tp.pptx

    setuptools-36.2.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ai制作动物时装走秀-课程网盘链接提取码下载 .txt

    ai制作动物时装走秀-课程网盘链接提取码下载 .txt

    箱式变压器的基础知识tp.pptx

    箱式变压器的基础知识tp.pptx

    setuptools-0.6b3.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JSP校园二手物品交易信息平台源码.zip

    这个是一个JSP校园二手物品交易信息平台,管理员登录,订单管理,二手交易管理,物品租借管理,物品分类管理,留言板管理,网站公告管理,用户信息管理等功能。用户角色包含以下功能:用户首页,二手物品查看,物品租借查看,优惠活动管理,我的二手交易,加入购物车,查看我的购物车等功能。

    setuptools-25.1.4.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    埃森哲--xx市场营销再造项目gltp.pptx

    埃森哲--xx市场营销再造项目gltp.pptx

    基于SpringBoot网上超市管理系统

    大学生毕业设计、大学生课程设计作业

    setuptools-36.6.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于python+pyqt的实时数据可视化精密加工机床主轴负载实时监控平台+全部资料齐全+部署文档

    【资源说明】 基于python+pyqt的实时数据可视化精密加工机床主轴负载实时监控平台设计与测试具体实现数据采集与处理、实时数据可视化、数据库整合、用户交互等功能+全部资料齐全+部署文档 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-25.1.4-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JAVA班主任管理系统(源代码+LW).zip

    JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).

    setuptools-20.9.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics