mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-07-06 17:25:01 +08:00
257 lines
13 KiB
HTML
257 lines
13 KiB
HTML
<div class="header">
|
||
<div class="subTitle">
|
||
javax.xml.bind.annotation.adapters
|
||
</div>
|
||
<h2 class="title" title="Class XmlAdapter">Class XmlAdapter<ValueType,BoundType></h2>
|
||
</div><div class="contentContainer">
|
||
<ul class="inheritance">
|
||
<li><a href="../../../../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
|
||
<li>
|
||
<ul class="inheritance">
|
||
<li>javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType></li>
|
||
</ul> </li>
|
||
</ul>
|
||
<div class="description">
|
||
<ul class="blockList">
|
||
<li class="blockList">
|
||
<dl>
|
||
<dt>
|
||
<span class="paramLabel">参数类型</span>
|
||
</dt>
|
||
<dd>
|
||
<span><code>BoundType</code> - JAXB不知道如何处理的类型。</span>
|
||
<span>写入适配器以允许这种类型通过<tt>ValueType用作</tt>内存中的<tt>表示</tt> 。</span>
|
||
</dd>
|
||
<dd>
|
||
<code>ValueType</code> - JAXB知道如何处理开箱即用的类型。
|
||
</dd>
|
||
</dl>
|
||
<dl>
|
||
<dt>
|
||
已知直接子类:
|
||
</dt>
|
||
<dd>
|
||
<span><a href="../../../../../javax/xml/bind/annotation/adapters/CollapsedStringAdapter.html" title="javax.xml.bind.annotation.adapters中的类">CollapsedStringAdapter</a> , <a href="../../../../../javax/xml/bind/annotation/adapters/HexBinaryAdapter.html" title="javax.xml.bind.annotation.adapters中的类">HexBinaryAdapter</a> , <a href="../../../../../javax/xml/bind/annotation/adapters/NormalizedStringAdapter.html" title="javax.xml.bind.annotation.adapters中的类">NormalizedStringAdapter</a></span>
|
||
</dd>
|
||
</dl>
|
||
<hr/> <br/> <pre>public abstract class <span class="typeNameLabel">XmlAdapter<ValueType,BoundType></span>
|
||
extends <a href="../../../../../java/lang/Object.html" title="class in java.lang">Object</a></pre>
|
||
<div class="block">
|
||
<span>适应Java类型进行自定义封送。</span>
|
||
<p> <span><b>用法:</b></span> </p>
|
||
<p> <span>某些Java类型不会自然映射到XML表示,例如<tt>HashMap</tt>或其他非JavaBean类。</span> <span>相反,XML表示可以映射到Java类型,但是应用程序可以选择使用另一种Java类型访问XML表示。</span> <span>例如,Java绑定规则的模式将Xs:DateTime默认绑定到XmlGregorianCalendar。</span> <span>但是,应用程序可能希望将xs:DateTime绑定到自定义类型,例如MyXmlGregorianCalendar。</span> <span>在这两种情况下,应用程序访问XML内容的<i>绑定类型</i>与映射到XML表示形式的<i>值类型</i>之间存在不匹配。</span> </p>
|
||
<p> <span>这个抽象类定义了将绑定类型适配为值类型的方法,反之亦然。</span> <span>在编组和解组时,这些方法由JAXB绑定框架调用:</span> </p>
|
||
<ul>
|
||
<li> <span><b>XmlAdapter.marshal(...):</b>在编组期间,JAXB绑定框架调用XmlAdapter.marshal(..)以将绑定类型修改为值类型,然后将其编组为XML表示。</span> </li>
|
||
<li> <span><b>XmlAdapter.unmarshal(...):</b>在解组时,JAXB绑定框架首先将XML表示解组为值类型,然后调用XmlAdapter.unmarshal(..)以将值类型适配为绑定类型。</span> </li>
|
||
</ul>
|
||
<span>因此,编写适配器涉及以下步骤:</span>
|
||
<ul>
|
||
<li> <span>编写一个实现这个抽象类的适配器。</span> </li>
|
||
<li> <span>使用注释<a href="../../../../../javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html" title="javax.xml.bind.annotation.adapters中的注释"><code>XmlJavaTypeAdapter</code></a>安装适配器</span> </li>
|
||
</ul>
|
||
<p> <span><b>示例<tt>:HashMap</tt></b>定制映射</span> </p>
|
||
<p> <span>下面的例子说明了如何使用<tt>@XmlAdapter</tt>和<tt>@XmlJavaTypeAdapter</tt>定制<tt>HashMap</tt>的映射。</span> </p>
|
||
<p> <span><b>步骤1:</b>确定HashMap所需的XML表示形式。</span> </p>
|
||
<pre> <span><hashmap>
|
||
<entry key="id123">this is a value</entry>
|
||
<entry key="id312">this is another value</entry>
|
||
...
|
||
</hashmap></span> </pre>
|
||
<p> <span><b>步骤2:</b>确定上面显示的所需XML表示方式应遵循的模式定义。</span> </p>
|
||
<pre> <span><xs:complexType name="myHashMapType">
|
||
<xs:sequence>
|
||
<xs:element name="entry" type="myHashMapEntryType"
|
||
minOccurs = "0" maxOccurs="unbounded"/>
|
||
</xs:sequence>
|
||
</xs:complexType>
|
||
|
||
<xs:complexType name="myHashMapEntryType">
|
||
<xs:simpleContent>
|
||
<xs:extension base="xs:string">
|
||
<xs:attribute name="key" type="xs:int"/>
|
||
</xs:extension>
|
||
</xs:simpleContent>
|
||
</xs:complexType></span> </pre>
|
||
<p> <span><b>步骤3:</b>编写可以生成上述模式定义的值类型。</span> </p>
|
||
<pre> <span>public class MyHashMapType {
|
||
List<MyHashMapEntryType> entry;
|
||
}
|
||
|
||
public class MyHashMapEntryType {
|
||
@XmlAttribute
|
||
public Integer key;
|
||
|
||
@XmlValue
|
||
public String value;
|
||
}</span> </pre>
|
||
<p> <span><b>步骤4:</b>将适配器的值类型MyHashMapType写入应用程序使用的绑定类型HashMap。</span> </p>
|
||
<pre> <span>public final class MyHashMapAdapter extends
|
||
XmlAdapter<MyHashMapType,HashMap> { ... }</span> </pre>
|
||
<p> <span><b>步骤5:</b>使用适配器。</span> </p>
|
||
<pre> <span>public class Foo {
|
||
@XmlJavaTypeAdapter(MyHashMapAdapter.class)
|
||
HashMap hashmap;
|
||
...
|
||
}</span> </pre>
|
||
<span>上述代码片段将映射到以下模式:</span>
|
||
<pre> <span><xs:complexType name="Foo">
|
||
<xs:sequence>
|
||
<xs:element name="hashmap" type="myHashMapType"
|
||
</xs:sequence>
|
||
</xs:complexType></span> </pre>
|
||
</div>
|
||
<dl>
|
||
<dt>
|
||
<span class="simpleTagLabel">从以下版本开始:</span>
|
||
</dt>
|
||
<dd>
|
||
JAXB 2.0
|
||
</dd>
|
||
<dt>
|
||
<span class="seeLabel">另请参见:</span>
|
||
</dt>
|
||
<dd>
|
||
<span><a href="../../../../../javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html" title="javax.xml.bind.annotation.adapters中的注释"><code>XmlJavaTypeAdapter</code></a></span>
|
||
</dd>
|
||
</dl> </li>
|
||
</ul>
|
||
</div>
|
||
<div class="summary">
|
||
<ul class="blockList">
|
||
<li class="blockList">
|
||
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
|
||
<ul class="blockList">
|
||
<li class="blockList"><a name="constructor.summary">
|
||
<!-- --> </a> <h3>构造方法摘要</h3>
|
||
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Constructor Summary table, listing constructors, and an explanation">
|
||
<caption>
|
||
<span>构造方法</span>
|
||
<span class="tabEnd"> </span>
|
||
</caption>
|
||
<tbody>
|
||
<tr>
|
||
<th class="colFirst" scope="col">Modifier</th>
|
||
<th class="colLast" scope="col">Constructor and Description</th>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><code>protected </code></td>
|
||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html#XmlAdapter--">XmlAdapter</a></span>()</code>
|
||
<div class="block">
|
||
派生类的Do-nothing构造函数。
|
||
</div> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table> </li>
|
||
</ul>
|
||
<!-- ========== METHOD SUMMARY =========== -->
|
||
<ul class="blockList">
|
||
<li class="blockList"><a name="method.summary">
|
||
<!-- --> </a> <h3>方法摘要</h3>
|
||
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
|
||
<caption>
|
||
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
|
||
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
|
||
<span class="tableTab" id="t3"><span><a href="javascript:show(4);">抽象方法</a></span><span class="tabEnd"> </span></span>
|
||
</caption>
|
||
<tbody>
|
||
<tr>
|
||
<th class="colFirst" scope="col">Modifier and Type</th>
|
||
<th class="colLast" scope="col">Method and Description</th>
|
||
</tr>
|
||
<tr class="altColor" id="i0">
|
||
<td class="colFirst"><code>abstract <a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">ValueType</a></code></td>
|
||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html#marshal-BoundType-">marshal</a></span>(<a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">BoundType</a> v)</code>
|
||
<div class="block">
|
||
将绑定类型转换为值类型。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor" id="i1">
|
||
<td class="colFirst"><code>abstract <a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">BoundType</a></code></td>
|
||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html#unmarshal-ValueType-">unmarshal</a></span>(<a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">ValueType</a> v)</code>
|
||
<div class="block">
|
||
将值类型转换为绑定类型。
|
||
</div> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<ul class="blockList">
|
||
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
|
||
<!-- --> </a> <h3>Methods inherited from class java.lang.<a href="../../../../../java/lang/Object.html" title="class in java.lang">Object</a></h3> <code><a href="../../../../../java/lang/Object.html#clone--">clone</a>, <a href="../../../../../java/lang/Object.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../java/lang/Object.html#finalize--">finalize</a>, <a href="../../../../../java/lang/Object.html#getClass--">getClass</a>, <a href="../../../../../java/lang/Object.html#hashCode--">hashCode</a>, <a href="../../../../../java/lang/Object.html#notify--">notify</a>, <a href="../../../../../java/lang/Object.html#notifyAll--">notifyAll</a>, <a href="../../../../../java/lang/Object.html#toString--">toString</a>, <a href="../../../../../java/lang/Object.html#wait--">wait</a>, <a href="../../../../../java/lang/Object.html#wait-long-">wait</a>, <a href="../../../../../java/lang/Object.html#wait-long-int-">wait</a></code></li>
|
||
</ul> </li>
|
||
</ul> </li>
|
||
</ul>
|
||
</div>
|
||
<div class="details">
|
||
<ul class="blockList">
|
||
<li class="blockList">
|
||
<!-- ========= CONSTRUCTOR DETAIL ======== -->
|
||
<ul class="blockList">
|
||
<li class="blockList"><a name="constructor.detail">
|
||
<!-- --> </a> <h3>构造方法详细信息</h3> <a name="XmlAdapter--">
|
||
<!-- --> </a>
|
||
<ul class="blockListLast">
|
||
<li class="blockList"> <h4>XmlAdapter</h4> <pre>protected XmlAdapter()</pre>
|
||
<div class="block">
|
||
派生类的Do-nothing构造函数。
|
||
</div> </li>
|
||
</ul> </li>
|
||
</ul>
|
||
<!-- ============ METHOD DETAIL ========== -->
|
||
<ul class="blockList">
|
||
<li class="blockList"><a name="method.detail">
|
||
<!-- --> </a> <h3>方法详细信息</h3> <a name="unmarshal-java.lang.Object-">
|
||
<!-- --> </a><a name="unmarshal-ValueType-">
|
||
<!-- --> </a>
|
||
<ul class="blockList">
|
||
<li class="blockList"> <h4>unmarshal</h4> <pre>public abstract <a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">BoundType</a> unmarshal(<a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">ValueType</a> v)
|
||
throws <a href="../../../../../java/lang/Exception.html" title="class in java.lang">异常</a></pre>
|
||
<div class="block">
|
||
将值类型转换为绑定类型。
|
||
</div>
|
||
<dl>
|
||
<dt>
|
||
<span class="paramLabel">参数</span>
|
||
</dt>
|
||
<dd>
|
||
<span><code>v</code> - 要转换的值。</span>
|
||
<span>可以为null。</span>
|
||
</dd>
|
||
<dt>
|
||
<span class="throwsLabel">异常</span>
|
||
</dt>
|
||
<dd>
|
||
<span><code><a href="../../../../../java/lang/Exception.html" title="class in java.lang">异常</a></code> - 转换过程中是否有错误。</span>
|
||
<span>来电者负责通过<a href="../../../../../javax/xml/bind/ValidationEventHandler.html" title="javax.xml.bind中的接口"><code>ValidationEventHandler</code></a>向用户<a href="../../../../../javax/xml/bind/ValidationEventHandler.html" title="javax.xml.bind中的接口">报告</a>错误。</span>
|
||
</dd>
|
||
</dl> </li>
|
||
</ul> <a name="marshal-java.lang.Object-">
|
||
<!-- --> </a><a name="marshal-BoundType-">
|
||
<!-- --> </a>
|
||
<ul class="blockListLast">
|
||
<li class="blockList"> <h4>marshal</h4> <pre>public abstract <a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">ValueType</a> marshal(<a href="../../../../../javax/xml/bind/annotation/adapters/XmlAdapter.html" title="type parameter in XmlAdapter">BoundType</a> v)
|
||
throws <a href="../../../../../java/lang/Exception.html" title="class in java.lang">异常</a></pre>
|
||
<div class="block">
|
||
将绑定类型转换为值类型。
|
||
</div>
|
||
<dl>
|
||
<dt>
|
||
<span class="paramLabel">参数</span>
|
||
</dt>
|
||
<dd>
|
||
<span><code>v</code> - 要兑现的价值。</span>
|
||
<span>可以为null。</span>
|
||
</dd>
|
||
<dt>
|
||
<span class="throwsLabel">异常</span>
|
||
</dt>
|
||
<dd>
|
||
<span><code><a href="../../../../../java/lang/Exception.html" title="class in java.lang">异常</a></code> - 转换过程中是否有错误。</span>
|
||
<span>来电者负责通过<a href="../../../../../javax/xml/bind/ValidationEventHandler.html" title="javax.xml.bind中的接口"><code>ValidationEventHandler</code></a>向用户<a href="../../../../../javax/xml/bind/ValidationEventHandler.html" title="javax.xml.bind中的接口">报告</a>错误。</span>
|
||
</dd>
|
||
</dl> </li>
|
||
</ul> </li>
|
||
</ul> </li>
|
||
</ul>
|
||
</div>
|
||
</div> |