javax.xml.bind.helpers

java.lang.Object
  继承者 javax.xml.bind.helpers.AbstractUnmarshallerImpl
所有已实现的接口:
Unmarshaller

public abstract class AbstractUnmarshallerImpl
     
extends Object
implements Unmarshaller

部分默认 Unmarshaller 实现。

此类提供 Unmarshaller 接口的部分默认实现。

JAXB 提供者必须实现 5 个方法:getUnmarshallerHandler、unmarshal(Node)、unmarshal(XMLReader,InputSource)、unmarshal(XMLStreamReader) 和 unmarshal(XMLEventReader)。

从以下版本开始:
JAXB1.0
另请参见:
Unmarshaller

嵌套类摘要
 
从接口 javax.xml.bind.Unmarshaller 继承的嵌套类/接口
Unmarshaller.Listener
 
字段摘要
protected  boolean validating
          指示 Unmarshaller 是否将执行验证。
 
构造方法摘要
AbstractUnmarshallerImpl()
           
 
方法摘要
protected  UnmarshalException createUnmarshalException(SAXException e)
          从 SAXException 创建 UnmarshalException。
<A extends XmlAdapter>
A
getAdapter(Class<A> type)
          获取与指定类型关联的适配器。
 AttachmentUnmarshaller getAttachmentUnmarshaller()
           
 ValidationEventHandler getEventHandler()
          返回当前的事件处理程序,如果没有设置该处理程序,则返回默认的事件处理程序。
 Unmarshaller.Listener getListener()
          返回向此 Unmarshaller 注册的 Unmarshaller.Listener
 Object getProperty(String name)
          由于没有必需的属性,getProperty 方法的默认实现总是抛出 PropertyException。
 Schema getSchema()
          获取用于执行解组时验证的 JAXP 1.3 Schema 对象。
protected  XMLReader getXMLReader()
          获取配置好的 XMLReader。
 boolean isValidating()
          指示 Unmarshaller 是否被配置为在执行解组操作期间进行验证。
<A extends XmlAdapter>
void
setAdapter(Class<A> type, A adapter)
          将已配置的 XmlAdapter 实例与此 unmarshaller 关联。
 void setAdapter(XmlAdapter adapter)
          将已配置的 XmlAdapter 实例与此 unmarshaller 关联。
 void setAttachmentUnmarshaller(AttachmentUnmarshaller au)
          将解析 cid(内容 id URI)的上下文与作为附件传递的二进制数据关联。
 void setEventHandler(ValidationEventHandler handler)
          允许应用程序注册一个验证事件处理程序。
 void setListener(Unmarshaller.Listener listener)
           向此 Unmarshaller 注册解组事件回调 Unmarshaller.Listener
 void setProperty(String name, Object value)
          由于没有必需的属性,setProperty 方法的默认实现总是抛出 PropertyException。
 void setSchema(Schema schema)
          指定应用作验证后续解组操作依据的 JAXP 1.3 Schema 对象。
 void setValidating(boolean validating)
          指定 Unmarshaller 是否应该在执行解组操作期间进行验证。
 Object unmarshal(File f)
          从指定的文件解组 XML 数据并返回得到的内容树。
 Object unmarshal(InputSource source)
          从指定的 SAX InputSource 解组 XML 数据并返回得到的内容树。
 Object unmarshal(InputStream is)
          从指定的 InputStream 解组 XML 数据并返回得到的内容树。
<T> JAXBElement<T>
unmarshal(Node node, Class<T> expectedType)
          通过 JAXB 映射的 declaredType 解组 XML 数据并返回得到的内容树。
 Object unmarshal(Reader reader)
          从指定的 Reader 解组 XML 数据并返回得到的内容树。
 Object unmarshal(Source source)
          从指定的 XML Source 解组 XML 数据并返回得到的内容树。
<T> JAXBElement<T>
unmarshal(Source source, Class<T> expectedType)
          从 declaredType 指定的 XML Source 解组 XML 数据并返回得到的内容树。
 Object unmarshal(URL url)
          从指定的 URL 解组 XML 数据并返回得到的内容树。
 Object unmarshal(XMLEventReader reader)
          从指定的 pull 解析器解组 XML 数据并返回得到的内容树。
<T> JAXBElement<T>
unmarshal(XMLEventReader reader, Class<T> expectedType)
          将根元素解组到 JAXB 映射的 declaredType 并返回得到的内容树。
protected abstract  Object unmarshal(XMLReader reader, InputSource source)
          使用指定的 XMLReader 和 InputSource 解组对象。
 Object unmarshal(XMLStreamReader reader)
          从指定的 pull 解析器解组 XML 数据并返回得到的内容树。
<T> JAXBElement<T>
unmarshal(XMLStreamReader reader, Class<T> expectedType)
          将根元素解组到 JAXB 映射的 declaredType 并返回得到的内容树。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
从接口 javax.xml.bind.Unmarshaller 继承的方法
getUnmarshallerHandler, unmarshal
 

字段详细信息

validating

protected boolean validating
指示 Unmarshaller 是否将执行验证。

构造方法详细信息

AbstractUnmarshallerImpl

public AbstractUnmarshallerImpl()
方法详细信息

getXMLReader

protected XMLReader getXMLReader()
                          throws JAXBException
获取配置好的 XMLReader。 此方法在客户端指定的 SAXSource 对象没有 XMLReader 时使用。 Unmarshaller 不可重入,因此我们只能使用一个 XMLReader 实例。

抛出:
JAXBException

unmarshal

public Object unmarshal(Source source)
                 throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 XML Source 解组 XML 数据并返回得到的内容树。

实现解组全局根元素

SAX 2.0 解析器的可插入性

客户端应用程序可以选择不使用随 JAXB 提供者一起提供的默认解析器机制。任何兼容 SAX 2.0 的解析器都可以取代 JAXB 提供者的默认机制。要实现这一点,客户端应用程序必须正确配置一个包含 XMLReaderSAXSource,并且该 XMLReader 是由 SAX 2.0 解析器提供者实现的。如果 XMLReader 有一个向它注册的 org.xml.sax.ErrorHandler,则将使用 JAXB 提供者替换它,以便通过 JAXB 的 ValidationEventHandler 机制报告验证错误。如果 SAXSource 不包含 XMLReader,则将使用 JAXB 提供者的默认解析器机制。

也可以使用此解析器替换机制来替换 JAXB 提供者的解组时验证引擎。客户端应用程序必须正确配置其兼容 SAX 2.0 的解析器来执行验证(如上例所示)。解析器在解组操作期间遇到的任何 SAXParserExceptions 都将由 JAXB 提供者处理,并将其转换为 JAXB ValidationEvent 对象,这些对象将通过已经向 Unmarshaller 注册的 ValidationEventHandler 报告给客户端。注: 在为了实现解组而指定一个替换验证 SAX 2.0 解析器时,无需替换 JAXB 提供者使用的验证引擎来执行按需应变的验证。

客户端应用程序指定将在解组期间使用的替换解析器机制的唯一方法是通过 unmarshal(SAXSource) API。所有其他形式的 unmarshal 方法(文件、URL、Node 等等)将使用 JAXB 提供者的默认解析器和验证器机制。

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
source - 将从中解组 XML 数据的 XML Source(提供者只需支持 SAXSource、DOMSource 和 StreamSource)
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据
另请参见:
Unmarshaller.unmarshal(javax.xml.transform.Source, Class)

unmarshal

protected abstract Object unmarshal(XMLReader reader,
                                    InputSource source)
                             throws JAXBException
使用指定的 XMLReader 和 InputSource 解组对象。 被调用者应调用 XMLReader 的 setErrorHandler 方法,这样错误才能传递给客户端指定的 ValidationEventHandler。

抛出:
JAXBException

unmarshal

public final Object unmarshal(InputSource source)
                       throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 SAX InputSource 解组 XML 数据并返回得到的内容树。

实现解组全局根元素

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
source - 将从中解组 XML 数据的输入源
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据

unmarshal

public final Object unmarshal(URL url)
                       throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 URL 解组 XML 数据并返回得到的内容树。

实现解组全局根元素

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
url - 将从中解组 XML 数据的 URL
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据

unmarshal

public final Object unmarshal(File f)
                       throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的文件解组 XML 数据并返回得到的内容树。

实现解组全局根元素

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
f - 将从中解组 XML 数据的文件
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或着 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据

unmarshal

public final Object unmarshal(InputStream is)
                       throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 InputStream 解组 XML 数据并返回得到的内容树。使用这种形式的 unmarshal API 时,验证事件位置信息可能不完整。

实现解组全局根元素

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
is - 将从中解组 XML 数据的 InputStream
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据

unmarshal

public final Object unmarshal(Reader reader)
                       throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 Reader 解组 XML 数据并返回得到的内容树。使用这种形式的 unmarshal API 时,验证事件位置信息可能不完整,这是因为 Reader 不提供系统 ID。

实现解组全局根元素

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
reader - 将从中解组 XML 数据的 Reader
返回:
新创建的 java 内容树的根对象
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据

isValidating

public boolean isValidating()
                     throws JAXBException
指示 Unmarshaller 是否被配置为在执行解组操作期间进行验证。

注: 为了与 JAXP 保持一致,我将该方法命名为 isValidating(),而不是 getValidating()。

指定者:
接口 Unmarshaller 中的 isValidating
返回:
如果 Unmarshaller 被配置为在执行解组操作期间进行验证,则返回 true,否则返回 false
抛出:
JAXBException - 如果检索验证标志时发生错误

setEventHandler

public void setEventHandler(ValidationEventHandler handler)
                     throws JAXBException
允许应用程序注册一个验证事件处理程序。

如果在调用任一 unmarshal 方法期间发生验证错误,则 JAXB 提供者将调用验证事件处理程序。如果在调用解组方法之前客户端应用程序没有注册验证事件处理程序,那么将忽略所有验证事件,并有可能导致不可预料的行为。

指定者:
接口 Unmarshaller 中的 setEventHandler
参数:
handler - 验证事件处理程序
抛出:
JAXBException - 如果在设置事件处理程序时发生错误

setValidating

public void setValidating(boolean validating)
                   throws JAXBException
指定 Unmarshaller 是否应该在执行解组操作期间进行验证。默认情况下, Unmarshaller 不进行验证。

此方法仅在调用某一解组方法之前或之后调用。

指定者:
接口 Unmarshaller 中的 setValidating
参数:
validating - 如果 Unmarshaller 应该在执行解组操作期间进行验证,则该参数为 true,否则为 false
抛出:
JAXBException - 如果在执行解组操作期间启用或禁用验证时发生错误

getEventHandler

public ValidationEventHandler getEventHandler()
                                       throws JAXBException
返回当前的事件处理程序,如果没有设置该处理程序,则返回默认的事件处理程序。

指定者:
接口 Unmarshaller 中的 getEventHandler
返回:
当前 ValidationEventHandler,如果没有设置该处理程序,则返回默认的事件处理程序
抛出:
JAXBException - 如果获取当前事件处理程序时发生错误

createUnmarshalException

protected UnmarshalException createUnmarshalException(SAXException e)
从 SAXException 创建 UnmarshalException。 这是一个为派生类提供的实用方法。

当提供者实现的 ContentHandler 希望抛出 JAXBException 时,它需要通过 SAXException 包装该异常。如果 unmarshaller 实现盲目地使用 JAXBException 包装 SAXException ,则异常将是用另一个 JAXBException 包装的 SAXException 包装的 JAXBException。这样做很不明智。

此方法检查 SAXException 的嵌套异常并可减少过多的包装。

返回:
得到的 UnmarshalException

setProperty

public void setProperty(String name,
                        Object value)
                 throws PropertyException
由于没有必需的属性,setProperty 方法的默认实现总是抛出 PropertyException。如果提供商需要处理其他属性,则应该在派生类中重写此方法。

指定者:
接口 Unmarshaller 中的 setProperty
参数:
name - 要设置的属性的名称。此值可以使用一个常量字段来指定,也可以是一个用户提供的字符串。
value - 要设置的属性值
抛出:
PropertyException - 如果处理给定属性或值时发生错误

getProperty

public Object getProperty(String name)
                   throws PropertyException
由于没有必需的属性,getProperty 方法的默认实现总是抛出 PropertyException。如果提供者需要处理其他属性,则应该在派生类中重写此方法。

指定者:
接口 Unmarshaller 中的 getProperty
参数:
name - 要检索的属性的名称
返回:
所请求属性的值
抛出:
PropertyException - 如果检索给定属性或值属性名称时发生错误

unmarshal

public Object unmarshal(XMLEventReader reader)
                 throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 pull 解析器解组 XML 数据并返回得到的内容树。

此方法是一个解组全局根方法

此方法假定该解析器处于 START_DOCUMENT 或 START_ELEMENT 事件上。解组将从起始事件开始,到相应的终止事件结束。如果此方法成功返回,则 reader 将指向终止事件后面的标记。

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
reader - 要读取的解析器。
返回:
新创建的 java 内容树的根对象。
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据
另请参见:
Unmarshaller.unmarshal(javax.xml.stream.XMLEventReader, Class)

unmarshal

public Object unmarshal(XMLStreamReader reader)
                 throws JAXBException
从接口 Unmarshaller 复制的描述
从指定的 pull 解析器解组 XML 数据并返回得到的内容树。

实现解组全局根元素

此方法假定该解析器处于 START_DOCUMENT 或 START_ELEMENT 事件上。解组将从起始事件开始,到相应的终止事件结束。如果此方法成功返回,则 reader 将指向终止事件后面的标记。

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
reader - 要读取的解析器。
返回:
新创建的 java 内容树的根对象。
抛出:
JAXBException - 如果在解组时发生不可预料的错误
UnmarshalException - 如果 ValidationEventHandler 从其 handleEvent 方法返回 false 或者 Unmarshaller 不能执行 XML 到 Java 的绑定。请参阅 解组 XML 数据
另请参见:
Unmarshaller.unmarshal(javax.xml.stream.XMLStreamReader, Class)

unmarshal

public <T> JAXBElement<T> unmarshal(Node node,
                                    Class<T> expectedType)
                         throws JAXBException
从接口 Unmarshaller 复制的描述
通过 JAXB 映射的 declaredType 解组 XML 数据并返回得到的内容树。

实现借助声明的类型进行解组

指定者:
接口 Unmarshaller 中的 unmarshal
参数:
node - 从中解组 XML 数据的文档/元素。调用者至少必须支持 Document 和 Element。
expectedType - 用来保存 node 的 XML 数据的适当 JAXB