java.lang.Object javax.xml.bind.Binder<XmlNode>
public abstract class Binder<XmlNode>
在 XML 信息集节点和表示相同 XML 文档的 JAXB 对象之间启用同步。
此类的实例维护了保留视图的信息集的 XML 节点与 XML 文档的 JAXB 表示形式之间的关联。两个视图之间的导航由方法 getXMLNode(Object)
和 getJAXBNode(Object)
提供。
可以在其他视图保持不变的情况下,对保留视图的信息集或文档的 JAXB 表示形式进行修改。Binder 能够使用适当的 Binder 更新方法(updateXML(Object, Object)
或 updateJAXB(Object)
)将在修改视图中所做的更改同步到其他视图中。
下面是一个典型的使用场景:
unmarshal(Object)
XML 信息集视图加载到 JAXB 视图。(注意保存资源,可以只将 XML 信息集视图的子树解组为 JAXB 视图。)updateXML(Object)
可将对 JAXB 视图的修改同步到 XML 信息集视图中。更新操作将尽可能多地保留原始 XML 信息集(如注释、PI 等等) Binder 实例是使用工厂方法 JAXBContext.createBinder()
或 JAXBContext.createBinder(Class)
创建的。
模板参数 XmlNode
是保留表示形式的 XML 信息集的根接口/类。Binder 实现至少需要支持 org.w3c.dom.Node.class
的一个 XmlNode
值。Binder 实现可以支持保留表示形式的备用 XML 信息集。
构造方法摘要 | |
---|---|
Binder() |
方法摘要 | ||
---|---|---|
abstract ValidationEventHandler |
getEventHandler() 当前的事件处理程序;如果没有设置,则返回默认事件处理程序。 |
|
abstract Object |
getJAXBNode(XmlNode xmlNode) 获取与给定 XML 元素关联的 JAXB 对象。 |
|
abstract Object |
getProperty(String name) 获取 Binder 的基础实现中的特定属性。 |
|
abstract Schema |
getSchema() 获取 setSchema(Schema) 方法设置的最后一个 Schema 对象(包括 null)。 |
|
abstract XmlNode |
getXMLNode(Object jaxbObject) 获取与给定 JAXB 对象关联的 XML 元素。 |
|
abstract void |
marshal(Object jaxbObject, XmlNode xmlNode) 将 JAXB 对象树编组为新的 XML 文档。 |
|
abstract void |
setEventHandler(ValidationEventHandler handler) 允许应用程序注册 ValidationEventHandler。 |
|
abstract void |
setProperty(String name, Object value) 设置 Binder 的基础实现中的特定属性。 |
|
abstract void |
setSchema(Schema schema) 指定 marshal、unmarshal 和 update 方法是否在其 XML 内容上执行验证。 |
|
abstract Object |
unmarshal(XmlNode xmlNode) 将 XML 信息集视图解组为 JAXB 对象树。 |
|
abstract
|
unmarshal(XmlNode xmlNode, Class<T> declaredType) 根据提供的 declaredType 将 XML 根元素解组为 JAXB 对象树。 |
|
abstract Object |
updateJAXB(XmlNode xmlNode) 取一个 XML 节点,并更新与其关联的 JAXB 对象和该对象的子级。 |
|
abstract XmlNode |
updateXML(Object jaxbObject) 取一个 JAXB 对象,并更新与其关联的 XML 节点和该节点的子级。 |
|
abstract XmlNode |
updateXML(Object jaxbObject, XmlNode xmlNode) JAXB 对象树中所做的更改在与其关联的 XML 解析树中得到更新。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public Binder()
方法详细信息 |
---|
public abstract Object unmarshal(XmlNode xmlNode) throws JAXBException
此方法类似于添加了维持 XML 节点与生成的 JAXB 对象之间关联功能的 Unmarshaller.unmarshal(Node)
,它还支持未来更新操作,如 updateXML(Object, Object)
或 updateJAXB(Object)
。
当 getSchema()
为非 null 时,可以在执行此操作期间验证 xmlNode
及其子节点。
当 Binder 的 JAXBContext
不存在将 xmlNode 的 XML 元素名称或类型(通过 @xsi:type 指定)映射到 JAXB 映射类的映射关系时,此方法抛出 UnmarshalException
。unmarshal(Object, Class)
方法使应用程序能够指定 xmlNode 应该映射到哪个 JAXB 映射类。
xmlNode
- 要解组其中的 XML 数据的文档/元素。
JAXBException
- 如果进行解组期间发生不可预料的错误
UnmarshalException
- 如果
ValidationEventHandler
从其
handleEvent 方法返回 false,或者
Binder 不能执行 XML 到 Java 的绑定。
IllegalArgumentException
- 如果节点参数为 null
public abstract <T> JAXBElement<T> unmarshal(XmlNode xmlNode, Class<T> declaredType) throws JAXBException
此方法类似于添加了维持 XML 节点与生成的 JAXB 对象之间关联功能的 Unmarshaller.unmarshal(Node, Class)
,它还支持未来更新操作,如 updateXML(Object, Object)
或 updateJAXB(Object)
。
当 getSchema()
为非 null 时,可以在执行此操作期间验证 xmlNode
及其子节点。
xmlNode
- 要解组其中的 XML 数据的文档/元素。
declaredType
- 用来保存
node 的 XML 数据的适当 JAXB 映射类。
JAXBException
- 如果进行解组期间发生不可预料的错误
UnmarshalException
- 如果
ValidationEventHandler
从其
handleEvent 方法返回 false,或者
Binder 不能执行 XML 到 Java 的绑定。
IllegalArgumentException
- 如果任何输入参数为 null
public abstract void marshal(Object jaxbObject, XmlNode xmlNode) throws JAXBException
此方法类似于添加了维持 JAXB 对象和产生的 XML 节点之间关联功能的 Marshaller.marshal(Object, Node)
,它还支持未来更新操作,如 updateXML(Object, Object)
或 updateJAXB(Object)
。
当 getSchema()
为非 null 时,可在执行此操作期间验证已编组的 xml 内容。
jaxbObject
- 将被编组的内容树。
xmlNode
- 该参数必须是一个接受子节点的节点。
JAXBException
- 如果进行解组期间发生不可预料的错误。
MarshalException
- 如果
ValidationEventHandler
从其
handleEvent 方法返回 false,或者
Binder 不能编组
jaxbObject(或任何可从
jaxbObject 获得的对象)。
IllegalArgumentException
- 如果任何方法的参数为 null
public abstract XmlNode getXMLNode(Object jaxbObject)
一旦 JAXB 对象树与 XML 片段关联,此方法将在两树之间启用导航。
XML 元素与 JAXB 对象之间的关联是通过 bind 方法和 update 方法建立的。注意,此关联是片面的;并不是所有 XML 元素都有关联的 JAXB 对象,也不是所有 JAXB 对象都有关联的 XML 元素。
jaxbObject
- 可从以前对返回 JAXB 对象树的 bind 或 update 方法的调用中获得的实例。
Binder
为未知对象,或者该对象与 XML 元素没有任何关联,则返回 null。
IllegalArgumentException
- 如果 jaxbObject 参数为 null
public abstract Object getJAXBNode(XmlNode xmlNode)
一旦 JAXB 对象树与 XML 片段关联,此方法将在两树之间启用导航。
XML 元素和 JAXB 对象之间的关联是通过 unmarshal、marshal 和 update 方法建立的。注意,此关联是片面的;并不是所有 XML 元素都有关联的 JAXB 对象,也不是所有 JAXB 对象都有关联的 XML 元素。
Binder
为未知节点,或者该节点与 JAXB 对象没有任何关联,则返回 null。
IllegalArgumentException
- 如果节点参数为 null
public abstract XmlNode updateXML(Object jaxbObject) throws JAXBException
这是如下调用的一种便捷方法:
updateXML( jaxbObject, getXMLNode(jaxbObject));
JAXBException
- 如果更新相应的 XML 内容时出现任何不可预料的问题。
IllegalArgumentException
- 如果 jaxbObject 参数为 null
public abstract XmlNode updateXML(Object jaxbObject, XmlNode xmlNode) throws JAXBException
可将此操作视为“原地(in-place)”编组。不同点在于,此操作不是创建一个全新的 XML 树,而是在试图尽可能多地保留 XML 的同时更新现有的树。
例如,没有绑定到 JAXB 的 XML 中的未知元素/属性将保持不变(而编组操作将创建一个不包含任何元素/属性的新树。)
另一方面,此操作会更新 XML 节点与 JAXB 对象之间的关联。
jaxbObject
- 可能已修改的 JAXB 对象树的根
xmlNode
- 更新目标 XML 解析树的根
JAXBException
- 如果更新相应 XML 内容时出现任何不可预料的问题。
IllegalArgumentException
- 如何任何输入参数为 null
public abstract Object updateJAXB(XmlNode xmlNode) throws JAXBException
可将此操作视为“原地”解组。不同点在于,此操作不是创建一个全新 JAXB 树,而是更新现有的树,尽可能多地重用 JAXB 对象。
另一方面,此操作会更新 XML 节点与 JAXB 对象之间的关联。
marshal(Object,Object)
或
updateJAXB(Object)
方法调用中返回的同一对象,但可以是不同的对象,例如在 XML 元素的名称发生更改时。
JAXBException
- 如果更新相应的 JAXB 映射内容时出现任何不可预料的问题。
IllegalArgumentException
- 如果节点参数为 null
public abstract void setSchema(Schema schema)
schema
- 可将此参数设置为 null 来禁用验证。
Unmarshaller.setSchema(Schema)
public abstract Schema getSchema()
setSchema(Schema)
方法设置的最后一个
Schema
对象(包括 null)。
public abstract void setEventHandler(ValidationEventHandler handler) throws JAXBException
如果在调用任何 Binder 的 unmarshal、marshal 和 update 方法期间遇到验证错误,JAXB 提供者将调用 ValidationEventHandler。
调用带有 null 参数的此方法将导致 Binder 转而调用默认事件处理程序。
handler
- 验证事件处理程序
JAXBException
- 如果在设置事件处理程序时发生错误
public abstract ValidationEventHandler getEventHandler() throws JAXBException
JAXBException
- 如果获取当前的事件处理程序时发生错误
public abstract void setProperty(String name, Object value) throws PropertyException
name
- 要设置的属性的名称。此值可以使用一个常量字段来指定,也可以是一个用户提供的字符串。
value
- 要设置的属性值
PropertyException
- 如果处理给定属性或值时发生错误
IllegalArgumentException
- 如果 name 参数为 null
public abstract Object getProperty(String name) throws PropertyException
name
- 将检索的属性名称
PropertyException
- 如果检索给定属性或值属性名称时发生错误
IllegalArgumentException
- 如果 name 参数为 null