257 lines
13 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
javax.xml.bind.annotation.adapters
</div>
<h2 class="title" title="Class XmlAdapter">Class XmlAdapter&lt;ValueType,BoundType&gt;</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&lt;ValueType,BoundType&gt;</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&lt;ValueType,BoundType&gt;</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绑定规则的模式将XsDateTime默认绑定到XmlGregorianCalendar。</span> <span>但是应用程序可能希望将xsDateTime绑定到自定义类型例如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>&lt;hashmap&gt;
&lt;entry key="id123"&gt;this is a value&lt;/entry&gt;
&lt;entry key="id312"&gt;this is another value&lt;/entry&gt;
...
&lt;/hashmap&gt;</span> </pre>
<p> <span><b>步骤2</b>确定上面显示的所需XML表示方式应遵循的模式定义。</span> </p>
<pre> <span>&lt;xs:complexType name="myHashMapType"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="entry" type="myHashMapEntryType"
minOccurs = "0" maxOccurs="unbounded"/&gt;
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;
&lt;xs:complexType name="myHashMapEntryType"&gt;
&lt;xs:simpleContent&gt;
&lt;xs:extension base="xs:string"&gt;
&lt;xs:attribute name="key" type="xs:int"/&gt;
&lt;/xs:extension&gt;
&lt;/xs:simpleContent&gt;
&lt;/xs:complexType&gt;</span> </pre>
<p> <span><b>步骤3</b>编写可以生成上述模式定义的值类型。</span> </p>
<pre> <span>public class MyHashMapType {
List&lt;MyHashMapEntryType&gt; 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&lt;MyHashMapType,HashMap&gt; { ... }</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>&lt;xs:complexType name="Foo"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="hashmap" type="myHashMapType"
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;</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>