java xml 简单,java xml技术简单总结

XML概述

XML,就是可扩展标记语言Extensible Markup Language,包括XML/DTD/XSD/XPATH的w3c规范,在webservice方面主要应用有SOAP/WSDL等(WSDL还不是w3c规范)

JAVA规范API统称JAXP,主要有DOM/SAX/STAX/XPATH等标准API,并内置默认实现。并在JAXP的基础上建立了JAXB/JAX-WS等规范

常见的JAXP API(解析器)实现有xerces/crimson/woodstox/xalan等开源实现,也有一些厂商的实现(如IBM)。常用的XML操作库如dom4j/jdom是JAXP API的二次封装(其实也封装了其他一些非规范的实现)

常见的webservice库如axis2/xfire/cxf等,按自己的方式实现了SOAP/WSDL等功能(XML相关功能基于JAXP),由于JAX-WS规范的兴起,这些库也实现了JAX-WS规范

运行期实现类的查找模式都是类似,基本都是参数、配置、SPI、默认实现的顺序。如果有需要(如存在bug/性能问题),可以根据这个查找顺序更换不同的实现方式。

XML标准

平时常用的有校验和查找相关的标准

校验方面主要是DTD(Document Type Definition),后来的XSD(XML Schema Define)则支持更好

查找方面除了通用的DOM模型,常见的就是XPATH了,而不是很常见的XQUERY和XPOINTER是建立在XPATH基础上的

XML常见应用

SOAP Simple Object Access Protocol的首字母缩写,即简单对象访问协议

WSDL 网络服务描述语言,Web Services Description Language

UDDI

RSS Rich Site Summary 简易资讯聚合

WAP无线应用协议(Wireless Application Protocol,WAP)

Java XML相关的API规范

JAXP(Java API for XMLProcessing),定义了处理XML的通用接口,常见的包括DOM/SAX/STAX/XPATH等标准API

JAXB(Java Architecture for XML Binding),基于JAXP,定义了XML和Java对象的映射处理关系

JAX-WS,基于JAXP/JAXB,定义了一套XML webservice的标准接口

上面只是定义了规范,就是标准接口,具体的实现通常是不需要关心的。

下面再介绍一下,在运行期是如何确定采用哪种具体实现的,在定位某些问题的时候有帮助。

以oracle jdk为例,其他jdk实现基本是差不多的,主要是默认实现有所差异。

DOM

首先,有没有系统参数javax.xml.parsers.DocumentBuilderFactory

如果没有找到,就检查JRE/lib/jaxp.properties是否有配置该参数

如果没有找到,就通过SPI机制查找有没有实现: META-INF/services/javax.xml.parsers.DocumentBuilderFactory

如果没有找到,选择默认xerces实现(oracle JDK):com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

SAX

首先,有没有系统参数javax.xml.parsers.SAXParserFactory

如果没有找到,就检查JRE/lib/jaxp.properties是否有配置该参数

如果没有找到,就通过SPI机制查找有没有实现: META-INF/services/javax.xml.parsers.SAXParserFactory

如果没有找到,选择默认xerces实现(oracle JDK):com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl

STAX

和上面有点不同,它是区分输入输出的:javax.xml.stream.XMLInputFactory、javax.xml.stream.XMLOutputFactory

首先,有没有系统参数javax.xml.stream.XMLInputFactory、javax.xml.stream.XMLOutputFactory

如果没有找到,就检查JRE/lib/stax.properties、jaxp.properties是否有配置该参数

如果没有找到,就通过SPI机制查找有没有实现: META-INF/services/javax.xml.stream.XMLInputFactory、javax.xml.stream.XMLOutputFactory

如果没有找到,选择默认内部实现(oracle JDK):com.sun.xml.internal.stream.XMLInputFactoryImpl、com.sun.xml.internal.stream.XMLOutputFactoryImpl

XPATH

首先,有没有系统参数javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom,注意这个是有点特别的

如果没有找到,就检查JRE/lib/jaxp.properties查找javax.xml.xpath.XPathFactory是否有配置该参数

如果没有找到,就通过SPI机制查找有没有实现: META-INF/services/javax.xml.xpath.XPathFactory

如果没有找到,选择默认xalan实现(oracle JDK):com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl

JAXB

首先,检查配置文件jaxb.properties有没有定义javax.xml.bind.context.factory工厂类,通过createContext生成

如果没有找到,就通过SPI机制查找有没有实现: META-INF/services/javax.xml.ws.spi.Provider

如果没有找到,选择默认内部实现(oracle JDK):com.sun.xml.internal.bind.v2.ContextFactory

JAX-WS

首先,通过SPI机制查找有没有实现: META-INF/services/javax.xml.ws.spi.Provider

如果没有找到,选择默认内部实现(oracle JDK):com.sun.xml.internal.ws.spi.ProviderImpl

第三方库实现

开源的解析器(xerces, crimson, woodstox, xalan)主要是实现JAXP中的规范API

还有一些专业厂商的实现,例如IBM的JAXP实现(XL XP-J, XML4J),在websphere的plugins目录就可以找到

非JAXP的实现,如xpp3也实现了类似STAX的pull模式,在android sdk中内置

二次封装库(dom4j, jdom),主要是包装了JAXP,提供统一处理模型(DOM/SAX/STAX等)和简易的用法

WebService(Axis,Axis2,XFire,CXF(XFire升级版)),实现基于SOAP的Web服务,有些库也实现JAX-WS规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值