请问谁知道如何从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;
}


}

解决方案 »

  1.   

    Mapping map = new Mapping(); // 创建一个exolab的Mapping对象map.loadMapping("D:/mapping.xml"); //装载我们的mapping.xml配置文件
    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);  //搞定!
      

  2.   

    定义映射
    要让 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 使用这种类型的映射解组数据时,它自动把对象标识符转换为对实际对象的引用。您需要确保标识符的值是真正唯一的,即便是不同类型对象的标识符也不能重复。对于这个示例中的数据,这不是问题:运输商标识符是两个字符,机场标识符是三个字符,所以它们永远也不会相同。当确实有可能冲突的情况发生时,您可以轻易地避开这个问题,只要为每个标识符添加前缀,这个前缀是代表标识符所表示的对象类型的唯一代码。