快速业务通道

从XML到Java代码的数据绑定之三 从文本到字节码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
r i = attributes.iterator(); i.hasNext(); ) {          Attribute att = (Attribute)i.next();          // Only want attributes for this namespace          if ((!att.getNamespace().equals(ns)) &&            (!att.getNamespace().equals(Namespace.NO_NAMESPACE))) {            continue;          }          // Determine method to call          String methodName = new StringBuffer()            .append("set")            .append(BindingUtils.initialCaps(att.getName()))            .toString();          // Find the method to call, and its parameter type          for (int j=0; j

找到了根元素的属性,并确定了每个属性的适用方法。然后,就是处理实际的 java.lang.reflect.Method 对象。XML 属性的值已确定,并作为调用的参数传送到方法。但是,需要解决一个映射问题;XML 文档中的所有数据都作为 String 抽取,但传递时必须是适当的 Java 类型。清单 4 将一个方法添加到 DataMapping 辅助类中,以满足转换的需要。

清单 4 将字符串映射成 Java 特定的类型

/**     * * This will take the Stringvalue supplied and convert it * to an Object of the type specified in paramType. * * * @param value String value to convert. * @param paramType Class with type to convert to. * @return Object - value in correct type. */ public static Object getParameter(String value, Class paramType) { Object ob = null; String type = paramType.getName(); if (type.equals("java.lang.String ")) { ob = value; } else if ((type.equals("int")) || (type.equals("java.lang.Integer"))) { ob = Integer.valueOf(value); } else if ((type.equals("long")) || (type.equals("java.lang.Long"))) { ob = Long.valueOf(value); } else if ((type.equals("float")) || (type.equals"java.lang.Float"))) { ob = Float.valueOf(value); } else if ((type.equals("double")) || (type.equals("java.lang.Double"))) { ob = Double.valueOf(value); } else if ((type.equals("boolean")) || (type.equals("java.lang.Boolean"))) { ob = Boolean.valueOf(value); } return ob; }

在清单 4 中,值作为 String 传入,并且还传入了要转换的类和处理类型转换的方法。当然,这里包含的数据类型不多。可以添加更多类型(如 java.util.Date )来支持更复杂的数据映射。

一旦数据转换成适当的类型,可以使用反射调用 accessor 方法,并可传入已转换的数据类型。这就使 XML 文档中的所有属性及其值可以在作为结果的 Java 实例中以方法变量和的值存储。

从XML到Java代码的数据绑定之三 从文本到字节码(3)

时间:2010-12-02

递归对象树

所剩下的将是生成嵌套对象(如 WebServiceConfiguration 对象中的 PortType 对象)。最后,将嵌套对象传递给 accessor 方法,然后将填充了成员变量值和对象引用的顶级对象返回给调用程序。这种方式生成了一棵对象树,其中主对象是该树的主干。每个嵌套对象都形成了本身必须填充的树的分枝。这些分枝可以有它们自己的分枝,带有本身必须填充的的嵌套对象。由此可知,这棵树可能变得非常复杂。

在如果同一操作必须发生不知多少次的情况下,递归几乎总是完成操作的最佳选择。如果是 unma

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号