请问谁知道如何从java bean声称castor的mapping文件? xdoclet和myeclipse好像都可以,请给个详细答案,使用什么工具,应该怎么操作。比如说这个bean:
public class UserInfo implements Serializable{ /**
*
*/
private static final long serialVersionUID = 601351124780208554L; private long pkId; private Date lastUpdated;
private String name;
private String value; private User parentUser; public long getPkId() {
return pkId;
} public void setPkId(long pkId) {
this.pkId = pkId;
} public Date getLastUpdated() {
return lastUpdated;
} public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} public User getParentUser() {
return parentUser;
} public void setParentUser(User parentUser) {
this.parentUser = parentUser;
}
}
public class UserInfo implements Serializable{ /**
*
*/
private static final long serialVersionUID = 601351124780208554L; private long pkId; private Date lastUpdated;
private String name;
private String value; private User parentUser; public long getPkId() {
return pkId;
} public void setPkId(long pkId) {
this.pkId = pkId;
} public Date getLastUpdated() {
return lastUpdated;
} public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} public User getParentUser() {
return parentUser;
} public void setParentUser(User parentUser) {
this.parentUser = parentUser;
}
}
解决方案 »
- webservice客户端调用服务端时,需要考虑服务端webservice的实现方式吗
- Error creating bean with name 'sumBo' defined in ServletContext resource [/WEB-I
- Struts2中validate(),和 execute() 的问题
- 用Struts完成能让PPC IE 访问的BS系统
- 急:axis2 如何部署到 websphere?(
- spring+hibernate+struct程序运行报错,请各位指点该如何解决?
- 怎么用nested:iterate显示Action里面查询到的数据?
- EntityBean 查询不到数据问题
- jboss3中的瓶劲,插入关系表字段重复列名
- 动态代理模式
- Spring 事务问题?来者撒分
- 调试的时候报错,请大家指教
File file = new File("D:/test.xml");
Writer writer = new FileWriter(file);
Marshaller marshaller = new Marshaller(writer);
marshaller.setMapping(map); //设置按map配置进行映射
//注意这里使用的是marshaller对象的方法,而不是类的静态方法
marshaller.marshal(person); //搞定!
要让 Castor 使用这种格式而不用缺省的格式,首先需要定义一个描述这种格式的映射。映射描述本身就是(非常惊讶吧)一个 XML 文档。清单 3 显示了把 bean 组织为以前显示的格式的映射。清单 3. 用来压缩格式的映射
<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN "
"http://castor.exolab.org/mapping.dtd ">
<mapping>
<description>Basic mapping example</description>映射引用
您将需要使用映射文档的其它一些功能来支持您正在组织和解组的对象间的引用。清单 7 显示了完整的映射:清单 7. 整个时间表的映射
<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN "
"http://castor.exolab.org/mapping.dtd ">
<mapping>
<description>Reference mapping example</description>
<class name= "TimeTableBean ">
<map-to xml= "timetable "/>
<field name= "carriers " type= "CarrierBean " collection= "collection ">
<bind-xml name= "carrier "/>
MegaEntry 网络社区与信息交流平台!</field>
<field name= "airports " type= "AirportBean " collection= "collection ">
<bind-xml name= "airport "/>
</field>
<field name= "routes " type= "RouteBean " collection= "collection ">
<bind-xml name= "route "/>
</field>
</class>
<class name= "CarrierBean " identity= "ident " auto-complete= "true ">
<field name= "ident ">
<bind-xml name= "ident " node= "attribute "/>
</field>
</class>
<class name= "AirportBean " identity= "ident " auto-complete= "true ">
<field name= "ident ">
<bind-xml name= "ident " node= "attribute "/>
文章版权归原作者所有! (www.hehe.com)</field>
</class>
<class name= "RouteBean ">
<field name= "from " type= "AirportBean ">
<bind-xml name= "from " node= "attribute " reference= "true "/>
</field>
<field name= "to " type= "AirportBean ">
<bind-xml name= "to " node= "attribute " reference= "true "/>
</field>
<field name= "flights " type= "FlightBean " collection= "collection ">
<bind-xml name= "flight "/>
</field>
</class>
<class name= "FlightBean " auto-complete= "true ">
<field name= "carrier ">
<bind-xml name= "carrier " node= "attribute " reference= "true "/>
MegaEntry 网络社区与信息交流平台!</field>
<field name= "departureTime ">
<bind-xml name= "depart " node= "attribute "/>
</field>
<field name= "arrivalTime ">
<bind-xml name= "arrive " node= "attribute "/>
</field>
</class>
</mapping>
除被添加的 bean 之外,这里重要的改变是添加了 identity 和 reference 属性。class 元素的 identity 属性告诉 Castor 已命名的属性是该类的一个实例的唯一标识符。这里,我让 CarrierBean 和 AirportBean 都把它们的 ident 属性定义为标识符。bind-xml 元素的 reference 属性提供 Castor 进行映射所需的链接信息的另一部分。reference 设置为 true 的映射告诉 Castor 为引用的对象组织标识符,而不要对象自身的副本。我已经为路线两端从 RouteBean 到链接的 AirportBean 的引用,以及从 FlightBean 到链接的 CarrierBean 的引用使用了这种技术。当 Castor 使用这种类型的映射解组数据时,它自动把对象标识符转换为对实际对象的引用。您需要确保标识符的值是真正唯一的,即便是不同类型对象的标识符也不能重复。对于这个示例中的数据,这不是问题:运输商标识符是两个字符,机场标识符是三个字符,所以它们永远也不会相同。当确实有可能冲突的情况发生时,您可以轻易地避开这个问题,只要为每个标识符添加前缀,这个前缀是代表标识符所表示的对象类型的唯一代码。