blob: b4acebd57f477b1def9d09db17120a709a9f5534 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>JavaTest (Apache JMeter dist API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.jmeter.protocol.java.test, class: JavaTest">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<div class="about-language"><b>Apache JMeter</b></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.jmeter.protocol.java.test</a></div>
<h1 title="Class JavaTest" class="title">Class JavaTest</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="../sampler/AbstractJavaSamplerClient.html" title="class in org.apache.jmeter.protocol.java.sampler">org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient</a>
<div class="inheritance">org.apache.jmeter.protocol.java.test.JavaTest</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a></code>, <code><a href="../sampler/JavaSamplerClient.html" title="interface in org.apache.jmeter.protocol.java.sampler">JavaSamplerClient</a></code>, <code><a href="../../../samplers/Interruptible.html" title="interface in org.apache.jmeter.samplers">Interruptible</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">JavaTest</span>
<span class="extends-implements">extends <a href="../sampler/AbstractJavaSamplerClient.html" title="class in org.apache.jmeter.protocol.java.sampler">AbstractJavaSamplerClient</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a>, <a href="../../../samplers/Interruptible.html" title="interface in org.apache.jmeter.samplers">Interruptible</a></span></div>
<div class="block">The <code>JavaTest</code> class is a simple sampler which is intended for
use when developing test plans. The sampler generates results internally, so
does not need access to any external resources such as web, ftp or LDAP
servers. In addition, because the exact values of most of the SampleResult
can be directly set, it is possible to easily test most Assertions that use
the sample results.
<p>
During each sample, this client will sleep for some amount of time. The
amount of time to sleep is determined from the two parameters Sleep_Time and
Sleep_Mask using the formula:
<pre>
totalSleepTime = Sleep_Time + (System.currentTimeMillis() % Sleep_Mask)
</pre>
Thus, the Sleep_Mask provides a way to add a random component to the sleep
time.
<p>
The sampler is able to define the precise values of:
<pre>
- responseCode
- responseMessage
- Label
- success/fail status
</pre>
The elapsed time and end-time cannot be directly controlled.
<p>
Note: this class was derived from <a href="SleepTest.html" title="class in org.apache.jmeter.protocol.java.test"><code>SleepTest</code></a>.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../serialized-form.html#org.apache.jmeter.protocol.java.test.JavaTest">Serialized Form</a></li>
</ul>
</dd>
</dl>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static final long</code></div>
<div class="col-second even-row-color"><code><a href="#DEFAULT_SLEEP_MASK" class="member-name-link">DEFAULT_SLEEP_MASK</a></code></div>
<div class="col-last even-row-color">
<div class="block">The default value of the SleepMask parameter.</div>
</div>
<div class="col-first odd-row-color"><code>static final long</code></div>
<div class="col-second odd-row-color"><code><a href="#DEFAULT_SLEEP_TIME" class="member-name-link">DEFAULT_SLEEP_TIME</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The default value of the SleepTime parameter, in milliseconds.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">JavaTest</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Default constructor for <code>JavaTest</code>.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../../../config/Arguments.html" title="class in org.apache.jmeter.config">Arguments</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getDefaultParameters()" class="member-name-link">getDefaultParameters</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Provide a list of parameters which this test supports.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#interrupt()" class="member-name-link">interrupt</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Interrupt the current operation if possible.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../../../samplers/SampleResult.html" title="class in org.apache.jmeter.samplers">SampleResult</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#runTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)" class="member-name-link">runTest</a><wbr>(<a href="../sampler/JavaSamplerContext.html" title="class in org.apache.jmeter.protocol.java.sampler">JavaSamplerContext</a>&nbsp;context)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Perform a single sample.<br>
In this case, this method will simply sleep for some amount of time.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setupTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)" class="member-name-link">setupTest</a><wbr>(<a href="../sampler/JavaSamplerContext.html" title="class in org.apache.jmeter.protocol.java.sampler">JavaSamplerContext</a>&nbsp;context)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Do any initialization required by this client.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient">Methods inherited from class&nbsp;org.apache.jmeter.protocol.java.sampler.<a href="../sampler/AbstractJavaSamplerClient.html" title="class in org.apache.jmeter.protocol.java.sampler">AbstractJavaSamplerClient</a></h3>
<code><a href="../sampler/AbstractJavaSamplerClient.html#getNewLogger()">getNewLogger</a>, <a href="../sampler/AbstractJavaSamplerClient.html#teardownTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">teardownTest</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="DEFAULT_SLEEP_TIME">
<h3>DEFAULT_SLEEP_TIME</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name">DEFAULT_SLEEP_TIME</span></div>
<div class="block">The default value of the SleepTime parameter, in milliseconds.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.jmeter.protocol.java.test.JavaTest.DEFAULT_SLEEP_TIME">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="DEFAULT_SLEEP_MASK">
<h3>DEFAULT_SLEEP_MASK</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name">DEFAULT_SLEEP_MASK</span></div>
<div class="block">The default value of the SleepMask parameter.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.jmeter.protocol.java.test.JavaTest.DEFAULT_SLEEP_MASK">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>JavaTest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">JavaTest</span>()</div>
<div class="block">Default constructor for <code>JavaTest</code>.
The Java Sampler uses the default constructor to instantiate an instance
of the client class.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="setupTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">
<h3>setupTest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">setupTest</span><wbr><span class="parameters">(<a href="../sampler/JavaSamplerContext.html" title="class in org.apache.jmeter.protocol.java.sampler">JavaSamplerContext</a>&nbsp;context)</span></div>
<div class="block">Do any initialization required by this client.
There is none, as it is done in runTest() in order to be able to vary the
data for each sample.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../sampler/JavaSamplerClient.html#setupTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">setupTest</a></code>&nbsp;in interface&nbsp;<code><a href="../sampler/JavaSamplerClient.html" title="interface in org.apache.jmeter.protocol.java.sampler">JavaSamplerClient</a></code></dd>
<dt>Overrides:</dt>
<dd><code><a href="../sampler/AbstractJavaSamplerClient.html#setupTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">setupTest</a></code>&nbsp;in class&nbsp;<code><a href="../sampler/AbstractJavaSamplerClient.html" title="class in org.apache.jmeter.protocol.java.sampler">AbstractJavaSamplerClient</a></code></dd>
<dt>Parameters:</dt>
<dd><code>context</code> - the context to run with. This provides access to
initialization parameters.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getDefaultParameters()">
<h3>getDefaultParameters</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../../../config/Arguments.html" title="class in org.apache.jmeter.config">Arguments</a></span>&nbsp;<span class="element-name">getDefaultParameters</span>()</div>
<div class="block">Provide a list of parameters which this test supports. Any parameter
names and associated values returned by this method will appear in the
GUI by default so the user doesn't have to remember the exact names. The
user can add other parameters which are not listed here. If this method
returns null then no parameters will be listed. If the value for some
parameter is null then that parameter will be listed in the GUI with an
empty value.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../sampler/JavaSamplerClient.html#getDefaultParameters()">getDefaultParameters</a></code>&nbsp;in interface&nbsp;<code><a href="../sampler/JavaSamplerClient.html" title="interface in org.apache.jmeter.protocol.java.sampler">JavaSamplerClient</a></code></dd>
<dt>Overrides:</dt>
<dd><code><a href="../sampler/AbstractJavaSamplerClient.html#getDefaultParameters()">getDefaultParameters</a></code>&nbsp;in class&nbsp;<code><a href="../sampler/AbstractJavaSamplerClient.html" title="class in org.apache.jmeter.protocol.java.sampler">AbstractJavaSamplerClient</a></code></dd>
<dt>Returns:</dt>
<dd>a specification of the parameters used by this test which should
be listed in the GUI, or null if no parameters should be listed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="runTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">
<h3>runTest</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../../../samplers/SampleResult.html" title="class in org.apache.jmeter.samplers">SampleResult</a></span>&nbsp;<span class="element-name">runTest</span><wbr><span class="parameters">(<a href="../sampler/JavaSamplerContext.html" title="class in org.apache.jmeter.protocol.java.sampler">JavaSamplerContext</a>&nbsp;context)</span></div>
<div class="block">Perform a single sample.<br>
In this case, this method will simply sleep for some amount of time.
This method returns a <code>SampleResult</code> object.
<pre>
The following fields are always set:
- responseCode (default &quot;&quot;)
- responseMessage (default &quot;&quot;)
- label (set from LABEL_NAME parameter if it exists, else element name)
- success (default true)
</pre>
The following fields are set from the user-defined parameters, if
supplied:
<pre>
-samplerData - responseData
</pre></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../sampler/JavaSamplerClient.html#runTest(org.apache.jmeter.protocol.java.sampler.JavaSamplerContext)">runTest</a></code>&nbsp;in interface&nbsp;<code><a href="../sampler/JavaSamplerClient.html" title="interface in org.apache.jmeter.protocol.java.sampler">JavaSamplerClient</a></code></dd>
<dt>Parameters:</dt>
<dd><code>context</code> - the context to run with. This provides access to
initialization parameters.</dd>
<dt>Returns:</dt>
<dd>a SampleResult giving the results of this sample.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="../../../samplers/SampleResult.html#sampleStart()"><code>SampleResult.sampleStart()</code></a></li>
<li><a href="../../../samplers/SampleResult.html#sampleEnd()"><code>SampleResult.sampleEnd()</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setSuccessful(boolean)"><code>SampleResult.setSuccessful(boolean)</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setSampleLabel(java.lang.String)"><code>SampleResult.setSampleLabel(String)</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setResponseCode(java.lang.String)"><code>SampleResult.setResponseCode(String)</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setResponseMessage(java.lang.String)"><code>SampleResult.setResponseMessage(String)</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setResponseData(byte%5B%5D)"><code>SampleResult.setResponseData(byte[])</code></a></li>
<li><a href="../../../samplers/SampleResult.html#setDataType(java.lang.String)"><code>SampleResult.setDataType(String)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="interrupt()">
<h3>interrupt</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">interrupt</span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="../../../samplers/Interruptible.html#interrupt()">Interruptible</a></code></span></div>
<div class="block">Interrupt the current operation if possible.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../samplers/Interruptible.html#interrupt()">interrupt</a></code>&nbsp;in interface&nbsp;<code><a href="../../../samplers/Interruptible.html" title="interface in org.apache.jmeter.samplers">Interruptible</a></code></dd>
<dt>Returns:</dt>
<dd><code>true</code> if there was an operation to interrupt.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright © 1998-2022 Apache Software Foundation. All Rights Reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>