uTools-Manuals/docs/java/javax/net/ssl/TrustManagerFactory.html

466 lines
24 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">
compact1, compact2, compact3
</div>
<div class="subTitle">
javax.net.ssl
</div>
<h2 class="title" title="Class TrustManagerFactory">Class TrustManagerFactory</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.net.ssl.TrustManagerFactory</li>
</ul> </li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr/> <br/> <pre>public class <span class="typeNameLabel">TrustManagerFactory</span>
extends <a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></pre>
<div class="block">
<span>该类作为基于信任资料来源的信托经理的工厂。</span>
<span>每个信任管理器管理特定类型的信任资料供安全套接字使用。</span>
<span>信托资料是基于KeyStore和/或提供商的具体来源。</span>
</div>
<dl>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.4
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/net/ssl/TrustManager.html" title="javax.net.ssl中的接口"><code>TrustManager</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/net/ssl/TrustManagerFactory.html#TrustManagerFactory-javax.net.ssl.TrustManagerFactorySpi-java.security.Provider-java.lang.String-">TrustManagerFactory</a></span>(<a href="../../../javax/net/ssl/TrustManagerFactorySpi.html" title="class in javax.net.ssl">TrustManagerFactorySpi</a> factorySpi, <a href="../../../java/security/Provider.html" title="class in java.security">Provider</a> provider, <a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm)</code>
<div class="block">
创建一个TrustManagerFactory对象。
</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="t1"><span><a href="javascript:show(1);">静态方法</a></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="t4"><span><a href="javascript:show(8);">具体的方法</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><a href="../../../java/lang/String.html" title="class in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getAlgorithm--">getAlgorithm</a></span>()</code>
<div class="block">
返回此
<code>TrustManagerFactory</code>对象的算法名称。
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>static <a href="../../../java/lang/String.html" title="class in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getDefaultAlgorithm--">getDefaultAlgorithm</a></span>()</code>
<div class="block">
获取默认的TrustManagerFactory算法名称。
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>static <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getInstance-java.lang.String-">getInstance</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm)</code>
<div class="block">
返回一个
<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。
</div> </td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>static <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getInstance-java.lang.String-java.security.Provider-">getInstance</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm, <a href="../../../java/security/Provider.html" title="class in java.security">Provider</a> provider)</code>
<div class="block">
返回一个
<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。
</div> </td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>static <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getInstance-java.lang.String-java.lang.String-">getInstance</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm, <a href="../../../java/lang/String.html" title="class in java.lang">String</a> provider)</code>
<div class="block">
返回一个
<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。
</div> </td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code><a href="../../../java/security/Provider.html" title="class in java.security">Provider</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getProvider--">getProvider</a></span>()</code>
<div class="block">
返回此
<code>TrustManagerFactory</code>对象的提供者。
</div> </td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code><a href="../../../javax/net/ssl/TrustManager.html" title="interface in javax.net.ssl">TrustManager</a>[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#getTrustManagers--">getTrustManagers</a></span>()</code>
<div class="block">
为每种类型的信任资料返回一位信托管理员。
</div> </td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#init-java.security.KeyStore-">init</a></span>(<a href="../../../java/security/KeyStore.html" title="class in java.security">KeyStore</a> ks)</code>
<div class="block">
使用证书颁发机构和相关信托资料来源初始化该工厂。
</div> </td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/net/ssl/TrustManagerFactory.html#init-javax.net.ssl.ManagerFactoryParameters-">init</a></span>(<a href="../../../javax/net/ssl/ManagerFactoryParameters.html" title="interface in javax.net.ssl">ManagerFactoryParameters</a> spec)</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="TrustManagerFactory-javax.net.ssl.TrustManagerFactorySpi-java.security.Provider-java.lang.String-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>TrustManagerFactory</h4> <pre>protected TrustManagerFactory(<a href="../../../javax/net/ssl/TrustManagerFactorySpi.html" title="class in javax.net.ssl">TrustManagerFactorySpi</a> factorySpi,
<a href="../../../java/security/Provider.html" title="class in java.security">Provider</a> provider,
<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm)</pre>
<div class="block">
创建一个TrustManagerFactory对象。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>factorySpi</code> - 代表
</dd>
<dd>
<code>provider</code> - 提供商
</dd>
<dd>
<code>algorithm</code> - 算法
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="getDefaultAlgorithm--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getDefaultAlgorithm</h4> <pre>public static final <a href="../../../java/lang/String.html" title="class in java.lang">String</a> getDefaultAlgorithm()</pre>
<div class="block">
<span>获取默认的TrustManagerFactory算法名称。</span>
<p> <span>通过将<code>ssl.TrustManagerFactory.algorithm</code>安全属性的值设置为所需的算法名称可以在运行时更改默认的TrustManager。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>ssl.TrustManagerFactory.algorithm</code>安全属性指定的默认算法名称,如果没有此类属性,则为特定于实现的默认值。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/security/Security.html" title="java.security中的类"><code>security properties</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getAlgorithm--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getAlgorithm</h4> <pre>public final <a href="../../../java/lang/String.html" title="class in java.lang">String</a> getAlgorithm()</pre>
<div class="block">
<span>返回此<code>TrustManagerFactory</code>对象的算法名称。</span>
<p> <span>这是在创建此<code>TrustManagerFactory</code>对象的<code>getInstance</code>呼叫之一中指定的<code>getInstance</code></span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>TrustManagerFactory</code>对象的算法名称
</dd>
</dl> </li>
</ul> <a name="getInstance-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a> getInstance(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm)
throws <a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></pre>
<div class="block">
<span>返回一个<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。</span>
<p> <span>此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。</span> <span>返回从支持指定算法的第一个Provider中封装TrustManagerFactorySpi实现的新的TrustManagerFactory对象。</span> </p>
<p> <span>请注意,注册提供商的列表可以通过<a href="../../../java/security/Security.html#getProviders--"><code>Security.getProviders()</code></a>方法<a href="../../../java/security/Security.html#getProviders--">检索</a></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>algorithm</code> - 所请求的信任管理算法的标准名称。</span>
<span><a href="../../../../technotes/guides/security/jsse/JSSERefGuide.html">Java Secure Socket Extension Reference Guide</a>有关标准算法名称的信息。</span>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的
<code>TrustManagerFactory</code>对象。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果没有提供者支持指定算法的TrustManagerFactorySpi实现。
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果算法为空。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getInstance-java.lang.String-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a> getInstance(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm,
<a href="../../../java/lang/String.html" title="class in java.lang">String</a> provider)
throws <a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a>,
<a href="../../../java/security/NoSuchProviderException.html" title="class in java.security">NoSuchProviderException</a></pre>
<div class="block">
<span>返回一个<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。</span>
<p> <span>返回从指定提供程序封装KeyManagerFactorySpi实现的新KeyManagerFactory对象。</span> <span>指定的提供者必须在安全提供程序列表中注册。</span> </p>
<p> <span>请注意,注册提供商的列表可以通过<a href="../../../java/security/Security.html#getProviders--"><code>Security.getProviders()</code></a>方法<a href="../../../java/security/Security.html#getProviders--">检索</a></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>algorithm</code> - 请求的信任管理算法的标准名称。</span>
<span><a href="../../../../technotes/guides/security/jsse/JSSERefGuide.html">Java Secure Socket Extension Reference Guide</a>有关标准算法名称的信息。</span>
</dd>
<dd>
<code>provider</code> - 提供者的名称。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的
<code>TrustManagerFactory</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果指定算法的TrustManagerFactorySpi实现从指定的提供程序不可用。
</dd>
<dd>
<code><a href="../../../java/security/NoSuchProviderException.html" title="class in java.security">NoSuchProviderException</a></code> - 如果指定的提供程序未在安全提供程序列表中注册。
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果提供者名称为空或为空。
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果算法为空。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getInstance-java.lang.String-java.security.Provider-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../../javax/net/ssl/TrustManagerFactory.html" title="class in javax.net.ssl">TrustManagerFactory</a> getInstance(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> algorithm,
<a href="../../../java/security/Provider.html" title="class in java.security">Provider</a> provider)
throws <a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></pre>
<div class="block">
<span>返回一个<code>TrustManagerFactory</code>对象,作为信任管理器的工厂。</span>
<p> <span>返回从指定的Provider对象封装TrustManagerFactorySpi实现的新TrustManagerFactory对象。</span> <span>请注意指定的Provider对象不必在提供者列表中注册。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>algorithm</code> - 所请求的信任管理算法的标准名称。</span>
<span><a href="../../../../technotes/guides/security/jsse/JSSERefGuide.html">Java Secure Socket Extension Reference Guide</a>有关标准算法名称的信息。</span>
</dd>
<dd>
<code>provider</code> - 提供者的一个实例。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的
<code>TrustManagerFactory</code>对象。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果指定的算法的TrustManagerFactorySpi实现从指定的Provider对象中不可用。
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果提供程序为空。
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果算法为空。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getProvider--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getProvider</h4> <pre>public final <a href="../../../java/security/Provider.html" title="class in java.security">Provider</a> getProvider()</pre>
<div class="block">
返回此
<code>TrustManagerFactory</code>对象的提供者。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>TrustManagerFactory</code>对象的提供者
</dd>
</dl> </li>
</ul> <a name="init-java.security.KeyStore-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(<a href="../../../java/security/KeyStore.html" title="class in java.security">KeyStore</a> ks)
throws <a href="../../../java/security/KeyStoreException.html" title="class in java.security">KeyStoreException</a></pre>
<div class="block">
<span>使用证书颁发机构和相关信托资料来源初始化该工厂。</span>
<p> <span>提供商通常使用KeyStore作为进行信任决策的基础。</span> </p>
<p> <span>为了更灵活的初始化,请参阅<a href="../../../javax/net/ssl/TrustManagerFactory.html#init-javax.net.ssl.ManagerFactoryParameters-"><code>init(ManagerFactoryParameters)</code></a></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>ks</code> - 密钥库或null
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/KeyStoreException.html" title="class in java.security">KeyStoreException</a></code> - 如果此操作失败
</dd>
</dl> </li>
</ul> <a name="init-javax.net.ssl.ManagerFactoryParameters-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(<a href="../../../javax/net/ssl/ManagerFactoryParameters.html" title="interface in javax.net.ssl">ManagerFactoryParameters</a> spec)
throws <a href="../../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></pre>
<div class="block">
<span>使用提供商特定的信任资料来源初始化该工厂。</span>
<p> <span>在某些情况下,供应商可能需要除密钥库之外的初始化参数。</span> <span>预期该特定提供商的用户将通过提供商定义的相应<code>ManagerFactoryParameters</code>的实现。</span> <span>然后提供者可以调用指定的方法<code>ManagerFactoryParameters</code>实施方案以获得所需的信息。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>spec</code> - 提供者特定参数规范的实现
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></code> - 如果遇到错误
</dd>
</dl> </li>
</ul> <a name="getTrustManagers--">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>getTrustManagers</h4> <pre>public final <a href="../../../javax/net/ssl/TrustManager.html" title="interface in javax.net.ssl">TrustManager</a>[] getTrustManagers()</pre>
<div class="block">
为每种类型的信任资料返回一位信托管理员。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
信托经理
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果工厂没有初始化。
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>