- java.lang.Object
-
- javax.xml.bind.Binder<XmlNode>
-
public abstract class Binder<XmlNode> extends Object
启用表示相同XML文档的XML信息集节点和JAXB对象之间的同步。此类的实例维护信息集维护视图的XML节点与XML文档的JAXB表示形式之间的关联。 两种视图之间的导航由方法
getXMLNode(Object)和getJAXBNode(Object)提供 。可以对信息保留视图或文档的JAXB表示进行修改,而另一个视图保持未修改。 活页夹能够使用适当的Binder更新方法(
updateXML(Object, Object)或updateJAXB(Object))将修改后的视图中所做的更改同步到其他视图。典型的使用场景如下:
- 将XML文档加载到XML信息集表示中
-
unmarshal(Object)到JAXB视图的XML信息集视图。 (注意节省资源,只能将XML信息集视图的子树解组到JAXB视图。) - 应用程序访问/更新XML文档的JAXB视图。
-
updateXML(Object)将JAXB视图的修改同步到XML信息集视图中。 更新操作保留尽可能多的原始XML信息集(即注释,PI,...)
Binder实例使用出厂方法
JAXBContext.createBinder()或JAXBContext.createBinder(Class)创建 。模板参数
XmlNode是XML信息集维护表示的根接口/类。 要求最小化支持XmlNode值为org.w3c.dom.Node.classBinder实现。 Binder实现可以支持替代的XML信息集保留表示。- 从以下版本开始:
- 1.6,JAXB 2.0
-
-
构造方法摘要
构造方法 Constructor 描述 Binder()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract ValidationEventHandlergetEventHandler()返回当前事件处理程序或默认事件处理程序(如果尚未设置)。abstract ObjectgetJAXBNode(XmlNode xmlNode)获取与给定XML元素关联的JAXB对象。abstract ObjectgetProperty(String name)获取底层实现中的特定属性Binder。abstract SchemagetSchema()获取最后一个Schema对象(包括null),由setSchema(Schema)方法设置。abstract XmlNodegetXMLNode(Object jaxbObject)获取与给定JAXB对象关联的XML元素。abstract voidmarshal(Object jaxbObject, XmlNode xmlNode)将JAXB对象树编组到新的XML文档。abstract voidsetEventHandler(ValidationEventHandler handler)允许申请注册一个ValidationEventHandler。abstract voidsetProperty(String name, Object value)在底层实现中设置特定属性Binder。abstract voidsetSchema(Schema schema)指定marshal,unmarshal和update方法是否对其XML内容执行验证。abstract Objectunmarshal(XmlNode xmlNode)将XML信息集视图解组到JAXB对象树。abstract <T> JAXBElement<T>unmarshal(XmlNode xmlNode, Class<T> declaredType)通过向JAXB对象树提供declaredType解组XML根元素。abstract ObjectupdateJAXB(XmlNode xmlNode)获取一个XML节点并更新其关联的JAXB对象及其后代。abstract XmlNodeupdateXML(Object jaxbObject)获取JAXB对象并更新其关联的XML节点及其后代。abstract XmlNodeupdateXML(Object jaxbObject, XmlNode xmlNode)在其关联的XML解析树中更新JAXB对象树中的更改。
-
-
-
方法详细信息
-
unmarshal
public abstract Object unmarshal(XmlNode xmlNode) throws JAXBException
将XML信息集视图解组到JAXB对象树。该方法类似于
Unmarshaller.unmarshal(Node),其中添加了维护XML节点与生成的JAXB对象之间的关联,从而实现将来的更新操作,updateXML(Object, Object)或updateJAXB(Object)。当
getSchema()不为空时,在此操作期间,验证xmlNode及其后代。此方法抛出
UnmarshalException当粘合剂的JAXBContext不具有XML元素名称或类型的映射,经由可指定@xsi:type,的xmlNode到JAXB映射类。 方法unmarshal(Object, Class)使应用程序能够指定xmlNode应映射到的JAXB映射类。- 参数
-
xmlNode-xmlNodeXML数据的文档/元素。 - 结果
- 新创建的JAXB对象树的根对象。
- 异常
-
JAXBException- 解组时是否发生意外错误 -
UnmarshalException- 如果ValidationEventHandler从其handleEvent方法返回false,或者Binder无法执行XML到Java绑定。 -
IllegalArgumentException- 如果节点参数为空
-
unmarshal
public abstract <T> JAXBElement<T> unmarshal(XmlNode xmlNode, Class<T> declaredType) throws JAXBException
通过向JAXB对象树提供declaredType解组XML根元素。该方法类似于
Unmarshaller.unmarshal(Node, Class),其中添加了维护XML节点和生成的JAXB对象之间的关联,从而实现将来的更新操作,updateXML(Object, Object)或updateJAXB(Object)。当
getSchema()为非空时,xmlNode及其后代在此操作期间被验证。- 参数
-
xmlNode-xmlNodeXML数据的文档/元素。 -
declaredType- 适当的JAXB映射类保存node的XML数据。 - 结果
-
JAXB Element表示
node - 异常
-
JAXBException- 解组时是否发生意外错误 -
UnmarshalException- 如果ValidationEventHandler从其handleEvent方法返回false,或者Binder无法执行XML到Java绑定。 -
IllegalArgumentException- 如果任何输入参数为空 - 从以下版本开始:
- 1.6,JAXB 2.0
-
marshal
public abstract void marshal(Object jaxbObject, XmlNode xmlNode) throws JAXBException
将JAXB对象树编组到新的XML文档。该方法类似于
Marshaller.marshal(Object, Node),添加了维护JAXB对象和生成的XML节点之间的关联,从而实现了未来的更新操作,如updateXML(Object, Object)或updateJAXB(Object)。当
getSchema()为非空时,在此操作期间验证已编组的xml内容。- 参数
-
jaxbObject- 要编组的内容树。 -
xmlNode- 参数必须是接受子节点的节点。 - 异常
-
JAXBException- 如果在编组过程中出现意外问题。 -
MarshalException- 如果ValidationEventHandler从其handleEvent方法返回false,或者Binder无法编组jaxbObject(或任何可从jaxbObject可访问的对象)。 -
IllegalArgumentException- 如果任何方法参数为空
-
getXMLNode
public abstract XmlNode getXMLNode(Object jaxbObject)
获取与给定JAXB对象关联的XML元素。一旦JAXB对象树与XML片段相关联,该方法就可以在两个树之间进行导航。
通过绑定方法和更新方法建立XML元素和JAXB对象之间的关联。 请注意,此关联是部分的; 并不是所有的XML元素都具有关联的JAXB对象,并不是所有的JAXB对象都具有关联的XML元素。
- 参数
-
jaxbObject- 从先前调用返回JAXB对象树的绑定或更新方法可访问的实例。 - 结果
-
如果指定的JAXB对象对于此
Binder不知道,或者如果它不与XML元素相关联, 则为 null。 - 异常
-
IllegalArgumentException- 如果jaxbObject参数为空
-
getJAXBNode
public abstract Object getJAXBNode(XmlNode xmlNode)
获取与给定XML元素关联的JAXB对象。一旦JAXB对象树与XML片段相关联,该方法就可以在两个树之间进行导航。
XML元素和JAXB对象之间的关联是由unmarshal,marshal和update方法建立的。 请注意,此关联是部分的; 并不是所有的XML元素都具有关联的JAXB对象,并不是所有的JAXB对象都具有关联的XML元素。
- 结果
-
如果指定的XML节点不为此
Binder未知 ,或者如果它不与JAXB对象关联,则为null。 - 异常
-
IllegalArgumentException- 如果节点参数为空
-
updateXML
public abstract XmlNode updateXML(Object jaxbObject) throws JAXBException
获取JAXB对象并更新其关联的XML节点及其后代。这是一种方便的方法:
updateXML( jaxbObject, getXMLNode(jaxbObject));- 异常
-
JAXBException- 如果任何意外的问题发生更新对应的XML内容。 -
IllegalArgumentException- 如果jaxbObject参数为空
-
updateXML
public abstract XmlNode updateXML(Object jaxbObject, XmlNode xmlNode) throws JAXBException
在其关联的XML解析树中更新JAXB对象树中的更改。这个操作可以被认为是一个“就地”编组。 不同的是,这个操作不是创建一个全新的XML树,而是更新一个现有的树,同时尽可能地保留XML。
例如,未绑定到JAXB的XML中的未知元素/属性将保持不变(而编组操作将创建不包含任何这些的新树)。
作为副作用,此操作更新XML节点和JAXB对象之间的关联。
- 参数
-
jaxbObject- 可能修改的JAXB对象树的根 -
xmlNode- 更新目标XML解析树的根 - 结果
- 返回更新的XML节点。 通常,这是与xmlNode一样传递的节点,但它可能是一个不同的对象,例如当对象的标签名称已更改时。
- 异常
-
JAXBException- 如果任何意外的问题发生更新对应的XML内容。 -
IllegalArgumentException- 如果任何输入参数为空
-
updateJAXB
public abstract Object updateJAXB(XmlNode xmlNode) throws JAXBException
获取一个XML节点并更新其关联的JAXB对象及其后代。这个操作可以被认为是一个“就地”解组。 不同之处在于,该操作不是创建一个全新的JAXB树,而是更新现有的树,尽可能多地重用JAXB对象。
作为副作用,此操作更新XML节点和JAXB对象之间的关联。
- 结果
-
返回更新的JAXB对象。
通常,这是从早期的
marshal(Object,Object)或updateJAXB(Object)方法调用返回的相同对象,但它可能是一个不同的对象,例如当XML元素的名称已更改时。 - 异常
-
JAXBException- 如果任何意外的问题发生更新相应的JAXB映射内容。 -
IllegalArgumentException- 如果节点参数为空
-
setSchema
public abstract void setSchema(Schema schema)
指定marshal,unmarshal和update方法是否对其XML内容执行验证。- 参数
-
schema- 设置为null以禁用验证。 - 另请参见:
-
Unmarshaller.setSchema(Schema)
-
getSchema
public abstract Schema getSchema()
获取setSchema(Schema)方法设置的最后一个Schema对象(包括null)。- 结果
- 用于验证的Schema对象,如果不存在则为null
-
setEventHandler
public abstract void setEventHandler(ValidationEventHandler handler) throws JAXBException
允许申请注册一个ValidationEventHandler。如果在任何Binder拆组,组织和更新方法的调用期间遇到任何验证错误,则JAXB提供程序将调用
ValidationEventHandler。使用null参数调用此方法将导致Binder恢复为默认的默认事件处理程序。
- 参数
-
handler- 验证事件处理程序 - 异常
-
JAXBException- 如果在设置事件处理程序时遇到错误
-
getEventHandler
public abstract ValidationEventHandler getEventHandler() throws JAXBException
返回当前事件处理程序或默认事件处理程序(如果尚未设置)。- 结果
- 当前的ValidationEventHandler或默认事件处理程序(如果尚未设置)
- 异常
-
JAXBException- 如果在获取当前事件处理程序时遇到错误
-
setProperty
public abstract void setProperty(String name, Object value) throws PropertyException
在底层实现中设置特定属性Binder。 此方法只能用于设置一个标准的JAXB定义的unmarshal / marshal属性,或者为binder,unmarshal或marshal提供特定的属性。 尝试设置未定义的属性将导致抛出PropertyException。 参见Supported Unmarshal Properties和Supported Marshal Properties 。- 参数
-
name- 要设置的属性的名称。 可以使用常数字段或用户提供的字符串指定此值。 -
value- 要设置的属性的值 - 异常
-
PropertyException- 处理给定属性或值时出错 -
IllegalArgumentException- 如果name参数为空
-
getProperty
public abstract Object getProperty(String name) throws PropertyException
获取底层实现中的特定属性Binder。 此方法只能用于获取标准JAXB定义的解组/元数据属性之一或粘合剂,解组或元组的提供者特定属性。 尝试获取未定义的属性将导致抛出PropertyException。 参见Supported Unmarshal Properties和Supported Marshal Properties 。- 参数
-
name- 要检索的属性的名称 - 结果
- 请求的属性的值
- 异常
-
PropertyException- 检索给定属性或值属性名称时出现错误 -
IllegalArgumentException- 如果name参数为空
-
-