正 文

JAXP的演进


www.7dspace.com  更新日期:2005-10-27 2:39:10  七度空间


      XML和java数据类型间的映射

      Datatypes 在XMLSchema1.0的时候就很流行了,被很多其他XML规范所应用,像 XPath,XQuery,WSDL等。大部分的数据类型可以映射到java的基本数据类型或包装过的数据类型。其他的类型如:dataTime, duration

      可以被映射到新的java数据类型: javax.xml.datatype.XMLGregorianCalendar,javax.xml.datatype.Duration, and javax.xml.namespace.QName. 这样XMLSchema1.0  XPath 2.0 和XQuery 1.0中所有数据类型,JAVA中都有对应的类型存在。

      从可用性角度看,如果DatatypeFactory有方法能够生成一个对应WXS中数据类型的java对象,并且这个java对象拥有方法能根据facets限制数据类型和根据值来校验数据类型,这样就非常好了。

      一个使用Oracle's XDK的例子:

        import oracle.xml.parser.schema.*;
        . . .

        //create a simpleType object
        XSDSimpleType st = XSDSimpleType.getPrimitiveType(XSDSimpleType.iSTRING);

        //set a constraining facet on the simpleType
        st.setFacet(XSDSimpleType.LENGTH, "5");

        //validate value
        st.validateValue("hello");

      底层实现间的切换

      一个JAXP的实现通常包括一个默认的解析器,转换器,xpath引擎和schema校验器,但是就像文章开始的时候所提到的那样,JAXP是一个可插拔的API,我们可以插入我们自己的处理器来替换JAXP默认的处理器。要实现这样的切换,我们可以通过设置属性 javax.xml.xxx.yyyFactory的值来指定一个合格的factory的实现类。当yyyFactory.newInstance()被调用的时候,JAXP使用如下的顺序查找需要装载的具体的实现类:

1.使用javax.xml.xxx.yyyFactory属性指定的值.
2.使用 JRE 目录下lib/jaxp.properties 属性文件。Jaxp.properties文件只被读入一次,它的值会被缓存已被将来所用。如果第一次尝试去读这个文件而此文件不存在的话,以后就不会尝试着去检查此文件是否存在。jaxp.properties里面的值第一次读过之后,就不可能被修改了。
3.如果可以地话,可以使用 Services API(在JAR的规范里有详细的信息)来决定哪个实现类被载入。Services API会在runtime时存在的jars的META-INF/services/javax.xml.xxx.yyyFactory里寻找那个 classname。
4.使用平台默认的javax.xml.xxx.yyyFactory 实例。

javax.xml.xxx.yyyFactory 可是下面其中的一个:

javax.xml.parsers.SAXParserFactory
javax.xml.parsers.DocumentBuilderFactory
javax.xml.transform.TransformerFactory
javax.xml.xpath.XPathFactory
javax.xml.validation.SchemaFactory:schemaLanguage (schemaLanguage 是调用SchemaFactory的newInstance函数时所提供的参数)

例如:想在JAXP中使用SAX解析器,你可以用上面提到的4个方法中的任何一个把javax.xml.parsers.SAXParserFactory设为org.apache.xerces.jaxp.SAXParserFactoryImpl。
其中的一个方法如下:

     java -Djavax.xml.parsers.SAXParserFactory=
          org.apache.xerces.jaxp.SAXParserFactoryImpl MyApplicationProgram

8页,页码:[1] [2] [3] [4] [5] [6] [7] [8] 

上一篇:快速了解IDS和IPS的区别
下一篇:AS3.0概要–了解AS3.0的改变
作者:  来源:Matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐