快速业务通道

使用CMP2和XML处理动态数值对象 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ML文件?我们可以使用一个基于用于创建不同的类型的DOM组件的方法的工厂;然而,这将创建过多的“工场”组件,并且你可能需要添加新的"工场"组件作为你的实体模型扩展。我们需要的是一个可以使用实体局部对象,引导容器管理关系和创建动态DOM构架的公用程序。这个公用程序将负责在双向关系中循环引用,以避免无限的循环和深入导航关系元素。

使用CMP2和XML处理动态数值对象(2)

时间:2010-12-21

接下来我们将演示一个可以提供这个功能的公用程序类。

package ws.business.service.util; 导入JAXP类。 import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; 导入DOM类 import org.w3c.dom.Document; import org.w3c.dom.Element; 导入EJB类 import javax.ejb.EJBLocalObject; 导入Collection类。 import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; 导入bean内省类。<0} import java.beans.Introspector; import java.beans.BeanInfo; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; 导入reflection类 import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; public class DOMGenerator { 生成的文件 private Document doc; 用户定义的深度∶ private int drillDownDepth; 存储循环引用的私有实例变量∶ private ArrayList _circularRef = new ArrayList(); 存储当前深度的私有实例变量∶ private int _currentDepth; 方法getEJBLocalHome,getLocalHandle,getClass和getPrimaryKey不必 被处理。 private static String RESERVED = "EJBLocalHome^localHandle^class^primaryKey";    public DOMGenerator(String docElementName, int drillDownDepth) {    try { 使用标准JAXP调用来创建一个DOM并把它存储为一个实例变量。 DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = fact.newDocumentBuilder(); doc = builder.newDocument(); }catch(ParserConfigurationException ex) { throw new RuntimeChainedException(ex); } 存储drilldown深度。 this.drillDownDepth = drillDownDepth; 以用户定义的名称创建文件元素。 doc.appendChild(doc.createElement(docElementName));    } 创建传递DOM的局部引用的方法。    public Document getDOM(EJBLocalObject local) {    try { 调用把容器管理持久性与关系域填充到元素中以便传递局部引用的方 法。 populateElement(doc.getDocumentElement(), local); 返回DOM。 return doc; }catch(IntrospectionException ex) { throw new RuntimeException(ex.getMessage());    }catch(IllegalAccessException ex) { throw new RuntimeException(ex.getMessage()); }catch(InvocationTargetException ex) { throw new RuntimeException(ex.getMessage()); }    }    private void populateElement(Element parent, EJBLocalObject local) throws IntrospectionException, IllegalAccessException, InvocationTargetException {    把当前的局部引用添加到连接引用列表中。 _circularRef.add(local); 增加当前的drilldown深度。 _currentDepth++; 取得当前的局部引用的bean组件信息。 BeanInfo info = Introspector.getBeanInfo(local.getClass()); 取得属性描述信息列表并重复数组。 PropertyDescriptor properties[] = info.getPropertyDescriptors();   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号