java.lang.Objectjavax.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