diff --git a/LICENSE-2.0.txt b/LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/httpunit-1.7.pom b/httpunit-1.7.pom
new file mode 100644
index 0000000..cd12c22
--- /dev/null
+++ b/httpunit-1.7.pom
@@ -0,0 +1,76 @@
+
+ 4.0.0
+ httpunit
+ httpunit
+ HttpUnit
+ 1.7
+ A Java library for the automatic stimulation and testing of web applications.
+ http://httpunit.sourceforge.net
+
+
+ MIT License
+ http://httpunit.sourceforge.net/doc/license.html
+
+
+
+ src
+ test
+
+
+ maven-compiler-plugin
+
+ 1.4
+ 1.4
+
+
+
+
+
+
+ xerces
+ xmlParserAPIs
+ 2.2.1
+ true
+
+
+ xerces
+ xercesImpl
+ 2.6.2
+ true
+
+
+ nekohtml
+ nekohtml
+ 0.9.5
+ true
+
+
+ rhino
+ js
+ 1.6R5
+ true
+
+
+ javax.servlet
+ servlet-api
+ 2.3
+
+
+ jtidy
+ jtidy
+ 4aug2000r7-dev
+
+
+ junit
+ junit
+ 3.8.1
+ true
+
+
+ javax.mail
+ mail
+ 1.4
+ test
+
+
+
diff --git a/httpunit-1.7.zip b/httpunit-1.7.zip
new file mode 100644
index 0000000..3810d19
Binary files /dev/null and b/httpunit-1.7.zip differ
diff --git a/httpunit-rhino-1.7.7.patch b/httpunit-rhino-1.7.7.patch
new file mode 100644
index 0000000..5e0f21f
--- /dev/null
+++ b/httpunit-rhino-1.7.7.patch
@@ -0,0 +1,126 @@
+From b16bbb656cf2a65d5339f6b06b51f9ffdc11d586 Mon Sep 17 00:00:00 2001
+From: Mikolaj Izdebski
+Date: Wed, 23 Sep 2015 08:24:17 +0200
+Subject: [PATCH] Port to Rhino 1.7.7
+
+---
+ .../meterware/httpunit/javascript/JavaScript.java | 27 +++++++++-------------
+ 1 file changed, 11 insertions(+), 16 deletions(-)
+
+diff --git a/src/com/meterware/httpunit/javascript/JavaScript.java b/src/com/meterware/httpunit/javascript/JavaScript.java
+index 181186b..6d86612 100644
+--- a/src/com/meterware/httpunit/javascript/JavaScript.java
++++ b/src/com/meterware/httpunit/javascript/JavaScript.java
+@@ -55,8 +55,7 @@ public class JavaScript {
+ * Initiates JavaScript execution for the specified web response.
+ */
+ public static void run( WebResponse response ) throws IllegalAccessException, InstantiationException,
+- InvocationTargetException, ClassDefinitionException, NotAFunctionException,
+- PropertyException, SAXException, JavaScriptException {
++ InvocationTargetException, SAXException, JavaScriptException {
+ Context context = Context.enter();
+ // suggest bug fix for large java scripts see
+ // bug report [ 1216567 ] Exception for large javascripts
+@@ -75,14 +74,14 @@ public class JavaScript {
+ /**
+ * Runs the onload event for the specified web response.
+ */
+- public static void load( WebResponse response ) throws ClassDefinitionException, InstantiationException, IllegalAccessException, InvocationTargetException, PropertyException, JavaScriptException, SAXException, NotAFunctionException {
++ public static void load( WebResponse response ) throws InstantiationException, IllegalAccessException, InvocationTargetException, JavaScriptException, SAXException {
+ if (!(response.getScriptableObject().getScriptEngine() instanceof JavaScriptEngine)) run( response );
+ response.getScriptableObject().load();
+ }
+
+
+ private static void initHTMLObjects( Scriptable scope ) throws IllegalAccessException, InstantiationException,
+- InvocationTargetException, ClassDefinitionException, PropertyException {
++ InvocationTargetException {
+ ScriptableObject.defineClass( scope, Window.class );
+ ScriptableObject.defineClass( scope, Document.class );
+ ScriptableObject.defineClass( scope, Style.class );
+@@ -115,7 +114,7 @@ public class JavaScript {
+ * @scriptable - the scriptable object to do the initialization for
+ */
+ void initialize( JavaScriptEngine parent, ScriptableDelegate scriptable )
+- throws SAXException, PropertyException, JavaScriptException, NotAFunctionException {
++ throws SAXException, JavaScriptException {
+ _scriptable = scriptable;
+ _scriptable.setScriptEngine( this );
+ _parent = parent;
+@@ -305,7 +304,7 @@ public class JavaScript {
+ }
+
+
+- public Scriptable jsGet_frames() throws SAXException, PropertyException, JavaScriptException, NotAFunctionException {
++ public Scriptable jsGet_frames() throws SAXException, JavaScriptException {
+ if (_frames == null) {
+ WebResponse.Scriptable scriptables[] = getDelegate().getFrames();
+ Window[] frames = new Window[ scriptables.length ];
+@@ -350,7 +349,7 @@ public class JavaScript {
+ * @scriptable - the scriptable object to do the initialization for
+ */
+ void initialize( JavaScriptEngine parent, ScriptableDelegate scriptable )
+- throws JavaScriptException, NotAFunctionException, PropertyException, SAXException {
++ throws JavaScriptException, SAXException {
+ super.initialize( parent, scriptable );
+
+ _location = (Location) Context.getCurrentContext().newObject( this, "Location" );
+@@ -401,7 +400,7 @@ public class JavaScript {
+
+
+ public Window jsFunction_open( Object url, String name, String features, boolean replace )
+- throws PropertyException, JavaScriptException, NotAFunctionException, IOException, SAXException {
++ throws JavaScriptException, IOException, SAXException {
+ WebResponse.Scriptable delegate = getDelegate().open( toStringIfNotUndefined( url ), name, features, replace );
+ return delegate == null ? null : (Window) toScriptable( delegate );
+ }
+@@ -771,10 +770,6 @@ public class JavaScript {
+ static ElementArray newElementArray( Scriptable parent ) {
+ try {
+ return (ElementArray) Context.getCurrentContext().newObject( parent, "ElementArray" );
+- } catch (PropertyException e) {
+- throw new RhinoException( e );
+- } catch (NotAFunctionException e) {
+- throw new RhinoException( e );
+ } catch (JavaScriptException e) {
+ throw new RhinoException( e );
+ }
+@@ -860,7 +855,7 @@ public class JavaScript {
+ }
+
+ void initialize( JavaScriptEngine parent, ScriptableDelegate scriptable )
+- throws JavaScriptException, NotAFunctionException, PropertyException, SAXException {
++ throws JavaScriptException, SAXException {
+ super.initialize( parent, scriptable );
+ _document = (Document) parent;
+ _style = (Style) Context.getCurrentContext().newObject( this, "Style" );
+@@ -912,7 +907,7 @@ public class JavaScript {
+ }
+
+
+- public Scriptable jsGet_elements() throws PropertyException, NotAFunctionException, JavaScriptException {
++ public Scriptable jsGet_elements() throws JavaScriptException {
+ if (_controls == null) {
+ initializeControls();
+ }
+@@ -935,7 +930,7 @@ public class JavaScript {
+ }
+
+
+- private void initializeControls() throws PropertyException, NotAFunctionException, JavaScriptException {
++ private void initializeControls() throws JavaScriptException {
+ ScriptableDelegate scriptables[] = getDelegate().getElementDelegates();
+ Control[] controls = new Control[ scriptables.length ];
+ for (int i = 0; i < controls.length; i++) {
+@@ -1011,7 +1006,7 @@ public class JavaScript {
+ }
+
+ void initialize( JavaScriptEngine parent, ScriptableDelegate scriptable )
+- throws JavaScriptException, NotAFunctionException, PropertyException, SAXException {
++ throws JavaScriptException, SAXException {
+ super.initialize( parent, scriptable );
+ if (parent instanceof Form) _form = (Form) parent;
+ }
+--
+2.4.3
+
diff --git a/httpunit-servlet31.patch b/httpunit-servlet31.patch
new file mode 100644
index 0000000..dc319b4
--- /dev/null
+++ b/httpunit-servlet31.patch
@@ -0,0 +1,474 @@
+diff --git a/src/com/meterware/servletunit/ServletInputStreamImpl.java b/src/com/meterware/servletunit/ServletInputStreamImpl.java
+index 33ff39f..628d940 100644
+--- a/src/com/meterware/servletunit/ServletInputStreamImpl.java
++++ b/src/com/meterware/servletunit/ServletInputStreamImpl.java
+@@ -22,6 +22,7 @@ package com.meterware.servletunit;
+ import java.io.IOException;
+ import java.io.ByteArrayInputStream;
+
++import javax.servlet.ReadListener;
+ import javax.servlet.ServletInputStream;
+
+
+@@ -44,4 +45,15 @@ class ServletInputStreamImpl extends ServletInputStream {
+ return _baseStream.read();
+ }
+
++ public boolean isFinished() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public boolean isReady() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public void setReadListener(ReadListener arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
+ }
+diff --git a/src/com/meterware/servletunit/ServletUnitHttpRequest.java b/src/com/meterware/servletunit/ServletUnitHttpRequest.java
+index c2c331e..1f91ca0 100644
+--- a/src/com/meterware/servletunit/ServletUnitHttpRequest.java
++++ b/src/com/meterware/servletunit/ServletUnitHttpRequest.java
+@@ -33,10 +33,18 @@ import java.util.*;
+
+ import javax.servlet.http.HttpServletRequest;
+ import javax.servlet.http.Cookie;
++import javax.servlet.http.HttpServletResponse;
+ import javax.servlet.http.HttpSession;
++import javax.servlet.http.HttpUpgradeHandler;
++import javax.servlet.http.Part;
++import javax.servlet.AsyncContext;
++import javax.servlet.DispatcherType;
++import javax.servlet.ServletContext;
+ import javax.servlet.ServletInputStream;
+ import javax.servlet.RequestDispatcher;
+ import javax.servlet.ServletException;
++import javax.servlet.ServletRequest;
++import javax.servlet.ServletResponse;
+
+
+ /**
+@@ -886,6 +894,79 @@ class ServletUnitHttpRequest implements HttpServletRequest {
+ }
+
+ }
+-}
+
+
++ public AsyncContext getAsyncContext() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public long getContentLengthLong() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public DispatcherType getDispatcherType() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public ServletContext getServletContext() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public boolean isAsyncStarted() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public boolean isAsyncSupported() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public AsyncContext startAsync() throws IllegalStateException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public AsyncContext startAsync(ServletRequest arg0, ServletResponse arg1) throws IllegalStateException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public boolean authenticate(HttpServletResponse arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public String changeSessionId() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Part getPart(String arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Collection getParts() throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void login(String arg0, String arg1) throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void logout() throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public HttpUpgradeHandler upgrade(Class arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++}
+diff --git a/src/com/meterware/servletunit/ServletUnitHttpResponse.java b/src/com/meterware/servletunit/ServletUnitHttpResponse.java
+index bcf7236..7f61598 100644
+--- a/src/com/meterware/servletunit/ServletUnitHttpResponse.java
++++ b/src/com/meterware/servletunit/ServletUnitHttpResponse.java
+@@ -26,11 +26,11 @@ import java.io.IOException;
+ import java.io.OutputStreamWriter;
+ import java.io.PrintWriter;
+ import java.io.UnsupportedEncodingException;
+-
+ import java.util.*;
+ import java.text.SimpleDateFormat;
+
+ import javax.servlet.ServletOutputStream;
++import javax.servlet.WriteListener;
+ import javax.servlet.http.Cookie;
+ import javax.servlet.http.HttpServletResponse;
+
+@@ -463,7 +463,7 @@ class ServletUnitHttpResponse implements HttpServletResponse {
+ /**
+ * Returns the status of this response.
+ **/
+- int getStatus() {
++ public int getStatus() {
+ return _status;
+ }
+
+@@ -602,6 +602,27 @@ class ServletUnitHttpResponse implements HttpServletResponse {
+ ENCODING_MAP.put("Big5", "zh_TW zh_HK " );
+ }
+
++
++
++ public void setContentLengthLong(long arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public String getHeader(String arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Collection getHeaderNames() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Collection getHeaders(String arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
+ }
+
+
+@@ -618,4 +639,13 @@ class ServletUnitOutputStream extends ServletOutputStream {
+ }
+
+ private ByteArrayOutputStream _stream;
++
++ public boolean isReady() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void setWriteListener(WriteListener arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
+ }
+diff --git a/src/com/meterware/servletunit/ServletUnitServletContext.java b/src/com/meterware/servletunit/ServletUnitServletContext.java
+index 101bfb4..b532b8c 100644
+--- a/src/com/meterware/servletunit/ServletUnitServletContext.java
++++ b/src/com/meterware/servletunit/ServletUnitServletContext.java
+@@ -28,12 +28,21 @@ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.util.Enumeration;
++import java.util.EventListener;
+ import java.util.Hashtable;
++import java.util.Map;
+ import java.util.Set;
+ import java.util.Vector;
+
++import javax.servlet.Filter;
++import javax.servlet.FilterRegistration;
++import javax.servlet.FilterRegistration.Dynamic;
++import javax.servlet.Servlet;
+ import javax.servlet.ServletContext;
+ import javax.servlet.ServletException;
++import javax.servlet.ServletRegistration;
++import javax.servlet.SessionCookieConfig;
++import javax.servlet.descriptor.JspConfigDescriptor;
+
+
+
+@@ -116,7 +125,7 @@ public class ServletUnitServletContext implements ServletContext {
+ try {
+ File resourceFile = _application.getResourceFile( path );
+ // PATCH proposal [ 1592532 ] Invalid ServletUnitServletContext#getResource(String path)
+- // by Timo Westkämper
++ // by Timo Westk�mper
+ // return !resourceFile.exists() ? null : resourceFile.toURL();
+ return resourceFile == null ? null : resourceFile.toURL();
+ } catch (MalformedURLException e) {
+@@ -400,4 +409,140 @@ public class ServletUnitServletContext implements ServletContext {
+ public void setLogStream(PrintStream logStream) {
+ this._logStream = logStream;
+ }
++
++
++ public Dynamic addFilter(String arg0, String arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Dynamic addFilter(String arg0, Filter arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Dynamic addFilter(String arg0, Class arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void addListener(String arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void addListener(EventListener arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void addListener(Class arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0,
++ Class arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Filter createFilter(Class arg0) throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public EventListener createListener(Class arg0) throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Servlet createServlet(Class arg0) throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void declareRoles(String[] arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public ClassLoader getClassLoader() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Set getDefaultSessionTrackingModes() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public int getEffectiveMajorVersion() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public int getEffectiveMinorVersion() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Set getEffectiveSessionTrackingModes() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public FilterRegistration getFilterRegistration(String arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Map getFilterRegistrations() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public JspConfigDescriptor getJspConfigDescriptor() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public ServletRegistration getServletRegistration(String arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public Map getServletRegistrations() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public SessionCookieConfig getSessionCookieConfig() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public String getVirtualServerName() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public boolean setInitParameter(String arg0, String arg1) {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++
++ public void setSessionTrackingModes(Set arg0) {
++ throw new UnsupportedOperationException("not implemented");
++ }
+ }
+diff --git a/test/com/meterware/servletunit/RequestContextTest.java b/test/com/meterware/servletunit/RequestContextTest.java
+index ec0f4d4..d96ebab 100644
+--- a/test/com/meterware/servletunit/RequestContextTest.java
++++ b/test/com/meterware/servletunit/RequestContextTest.java
+@@ -22,6 +22,7 @@ package com.meterware.servletunit;
+ import com.meterware.httpunit.HttpUnitTest;
+
+ import java.net.URL;
++import java.util.Collection;
+ import java.util.Enumeration;
+ import java.util.Map;
+ import java.util.Locale;
+@@ -32,9 +33,18 @@ import java.io.BufferedReader;
+
+ import javax.servlet.http.HttpServletRequest;
+ import javax.servlet.http.Cookie;
++import javax.servlet.http.HttpServletResponse;
+ import javax.servlet.http.HttpSession;
++import javax.servlet.http.HttpUpgradeHandler;
++import javax.servlet.http.Part;
++import javax.servlet.AsyncContext;
++import javax.servlet.DispatcherType;
++import javax.servlet.ServletContext;
++import javax.servlet.ServletException;
+ import javax.servlet.ServletInputStream;
+ import javax.servlet.RequestDispatcher;
++import javax.servlet.ServletRequest;
++import javax.servlet.ServletResponse;
+
+ import junit.framework.TestSuite;
+
+@@ -384,7 +394,65 @@ public class RequestContextTest extends HttpUnitTest {
+ public int getLocalPort() {
+ return 0; //To change body of implemented methods use File | Settings | File Templates.
+ }
+- }
+
++ public AsyncContext getAsyncContext() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public long getContentLengthLong() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public DispatcherType getDispatcherType() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public ServletContext getServletContext() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public boolean isAsyncStarted() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public boolean isAsyncSupported() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public AsyncContext startAsync() throws IllegalStateException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public AsyncContext startAsync(ServletRequest arg0, ServletResponse arg1) throws IllegalStateException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public boolean authenticate(HttpServletResponse arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public String changeSessionId() {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public Part getPart(String arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
+
++ public Collection getParts() throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public void login(String arg0, String arg1) throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public void logout() throws ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++
++ public HttpUpgradeHandler upgrade(Class arg0) throws IOException, ServletException {
++ throw new UnsupportedOperationException("not implemented");
++ }
++ }
+ }
diff --git a/httpunit-servlettest.patch b/httpunit-servlettest.patch
new file mode 100644
index 0000000..f1dba7b
--- /dev/null
+++ b/httpunit-servlettest.patch
@@ -0,0 +1,15 @@
+Index: build.xml
+===================================================================
+RCS file: /cvsroot/httpunit/httpunit/build.xml,v
+retrieving revision 1.77
+diff -u -r1.77 build.xml
+--- a/build.xml 5 Oct 2004 03:45:15 -0000 1.77
++++ b/build.xml 13 Nov 2004 19:06:13 -0000
+@@ -166,6 +166,7 @@
+
+
+
++
+
+
+
diff --git a/httpunit.spec b/httpunit.spec
new file mode 100644
index 0000000..3ab6066
--- /dev/null
+++ b/httpunit.spec
@@ -0,0 +1,92 @@
+Name: httpunit
+Version: 1.7
+Release: 1
+Epoch: 0
+URL: http://httpunit.sourceforge.net/
+Summary: Automated web site testing toolkit
+License: MIT and ASL 2.0
+Source0: http://netix.dl.sourceforge.net/project/httpunit/httpunit/%{version}/httpunit-%{version}.zip
+Source1: https://repo1.maven.org/maven2/httpunit/httpunit/1.7/httpunit-1.7.pom
+Source2: https://www.oracle.com/webfolder/technetwork/jsc/j2ee/dtds/web-app_2_2.dtd
+Source3: https://www.oracle.com/webfolder/technetwork/jsc/dtd/web-app_2_3.dtd
+Source4: https://www.oracle.com/webfolder/technetwork/jsc/xml/ns/j2ee/web-app_2_4.xsd
+Source5: http://www.apache.org/licenses/LICENSE-2.0.txt
+Patch1: httpunit-rhino-1.7.7.patch
+Patch2: httpunit-servlettest.patch
+Patch3: httpunit-servlet31.patch
+Patch4: junit4.patch
+BuildRequires: jpackage-utils >= 0:1.6 ant >= 0:1.6 nekohtml jtidy junit >= 0:3.8
+BuildRequires: glassfish-servlet-api javamail >= 0:1.3 rhino java-devel >= 1:1.6.0
+BuildRequires: javapackages-local
+Requires: junit >= 0:3.8 glassfish-servlet-api nekohtml rhino
+BuildArch: noarch
+Obsoletes: httpunit-demo < %{epoch}:%{version}
+%description
+HttpUnit emulates the relevant portions of browser behavior, including form
+submission, JavaScript, basic http authentication, cookies and automatic page
+redirection, and allows Java test code to examine returned pages either as
+text, an XML DOM, or containers of forms, tables, and links.
+A companion framework, ServletUnit is included in the package.
+
+%package javadoc
+Summary: Javadoc for %{name}
+
+%description javadoc
+Javadoc for %{name}
+
+%package doc
+Summary: Documentation for %{name}
+Requires: %{name}-javadoc
+
+%description doc
+Documentation for %{name}
+
+%prep
+%autosetup -p1
+find . -name "*.jar" -delete
+rm -f META-INF/{web-app_2.2.dtd,web-app_2.3.dtd,web-app_2.4.xsd}
+sed -i -e 's|destdir|encoding="iso-8859-1" destdir|g' build.xml
+sed -i -e 's|setCharEncoding( org.w3c.tidy.Configuration.UTF8 )|setInputEncoding("UTF-8")|g' src/com/meterware/httpunit/parsing/JTidyHTMLParser.java
+find . -name "*.jar" -exec rm -f {} \;
+rm -rf doc/api
+ln -s \
+ %{_javadir}/junit.jar \
+ %{_javadir}/jtidy.jar \
+ %{_javadir}/nekohtml.jar \
+ %{_javadir}/glassfish-servlet-api.jar \
+ %{_javadir}/js.jar \
+ %{_javadir}/xerces-j2.jar \
+ jars
+cp %{SOURCE1} pom.xml
+cp %{SOURCE2} META-INF/
+cp %{SOURCE3} META-INF/
+cp %{SOURCE4} META-INF/
+cp %{SOURCE5} LICENSE-ASL
+
+%build
+export CLASSPATH=$(build-classpath javamail)
+export ANT_OPTS="-Dfile.encoding=iso-8859-1"
+ant -Dbuild.compiler=modern -Dbuild.sysclasspath=last \
+ jar javadocs test servlettest
+
+%install
+%mvn_file : httpunit
+%mvn_artifact pom.xml lib/httpunit.jar
+%mvn_install -J doc/api/
+rm -rf doc/api
+pushd doc
+ln -sf %{_javadocdir}/httpunit api
+popd
+
+%files -f .mfiles
+%doc LICENSE-ASL
+
+%files javadoc -f .mfiles-javadoc
+%doc LICENSE-ASL
+
+%files doc
+%doc doc/*
+
+%changelog
+* Sat Aug 22 2020 huanghaitao - 1.7-1
+- package init
diff --git a/httpunit.yaml b/httpunit.yaml
new file mode 100644
index 0000000..00bbaf0
--- /dev/null
+++ b/httpunit.yaml
@@ -0,0 +1,4 @@
+version_control: NA
+src_repo: NA
+tag_prefix: NA
+seperator: NA
diff --git a/junit4.patch b/junit4.patch
new file mode 100644
index 0000000..99a4768
--- /dev/null
+++ b/junit4.patch
@@ -0,0 +1,26 @@
+--- a/src/com/meterware/servletunit/JUnitServlet.java.sav 2008-05-20 16:25:36.000000000 +0300
++++ b/src/com/meterware/servletunit/JUnitServlet.java 2012-04-18 14:00:39.653850687 +0300
+@@ -29,8 +29,6 @@ import javax.servlet.http.HttpServletRes
+ import javax.servlet.ServletException;
+
+ import junit.runner.BaseTestRunner;
+-import junit.runner.TestSuiteLoader;
+-import junit.runner.StandardTestSuiteLoader;
+ import junit.framework.Test;
+ import junit.framework.AssertionFailedError;
+ import junit.framework.TestResult;
+@@ -148,12 +146,8 @@ public class JUnitServlet extends HttpSe
+ }
+
+
+- /**
+- * Always use the StandardTestSuiteLoader. Overridden from
+- * BaseTestRunner.
+- */
+- public TestSuiteLoader getLoader() {
+- return new StandardTestSuiteLoader();
++ protected boolean useReloadingTestSuiteLoader() {
++ return false;
+ }
+
+ }
diff --git a/web-app_2_2.dtd b/web-app_2_2.dtd
new file mode 100644
index 0000000..83ffc29
--- /dev/null
+++ b/web-app_2_2.dtd
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web-app_2_3.dtd b/web-app_2_3.dtd
new file mode 100644
index 0000000..b4bd390
--- /dev/null
+++ b/web-app_2_3.dtd
@@ -0,0 +1,1022 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web-app_2_4.xsd b/web-app_2_4.xsd
new file mode 100644
index 0000000..9e4f58d
--- /dev/null
+++ b/web-app_2_4.xsd
@@ -0,0 +1,1242 @@
+
+
+
+
+ @(#)web-app_2_4.xsds 1.61 04/04/16
+
+
+
+
+
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ Copyright 2003-2007 Sun Microsystems, Inc. All rights reserved.
+
+ The contents of this file are subject to the terms of either the
+ GNU General Public License Version 2 only ("GPL") or the Common
+ Development and Distribution License("CDDL") (collectively, the
+ "License"). You may not use this file except in compliance with
+ the License. You can obtain a copy of the License at
+ https://glassfish.dev.java.net/public/CDDL+GPL.html or
+ glassfish/bootstrap/legal/LICENSE.txt. See the License for the
+ specific language governing permissions and limitations under the
+ License.
+
+ When distributing the software, include this License Header
+ Notice in each file and include the License file at
+ glassfish/bootstrap/legal/LICENSE.txt. Sun designates this
+ particular file as subject to the "Classpath" exception as
+ provided by Sun in the GPL Version 2 section of the License file
+ that accompanied this code. If applicable, add the following
+ below the License Header, with the fields enclosed by brackets []
+ replaced by your own identifying information:
+ "Portions Copyrighted [year] [name of copyright owner]"
+
+ Contributor(s):
+
+ If you wish your version of this file to be governed by only the
+ CDDL or only the GPL Version 2, indicate your decision by adding
+ "[Contributor] elects to include this software in this
+ distribution under the [CDDL or GPL Version 2] license." If you
+ don't indicate a single choice of license, a recipient has the
+ option to distribute your version of this file under either the
+ CDDL, the GPL Version 2 or to extend the choice of license to its
+ licensees as provided above. However, if you add GPL Version 2
+ code and therefore, elected the GPL Version 2 license, then the
+ option applies only if the new code is made subject to such
+ option by the copyright holder.
+
+
+
+
+
+
+
+ ...
+
+
+ The instance documents may indicate the published version of
+ the schema using the xsi:schemaLocation attribute for J2EE
+ namespace with the following location:
+
+ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
+
+ ]]>
+
+
+
+
+
+
+ The following conventions apply to all J2EE
+ deployment descriptor elements unless indicated otherwise.
+
+ - In elements that specify a pathname to a file within the
+ same JAR file, relative filenames (i.e., those not
+ starting with "/") are considered relative to the root of
+ the JAR file's namespace. Absolute filenames (i.e., those
+ starting with "/") also specify names in the root of the
+ JAR file's namespace. In general, relative names are
+ preferred. The exception is .war files where absolute
+ names are preferred for consistency with the Servlet API.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The web-app element is the root of the deployment
+ descriptor for a web application. Note that the sub-elements
+ of this element can be in the arbitrary order. Because of
+ that, the multiplicity of the elements of distributable,
+ session-config, welcome-file-list, jsp-config, login-config,
+ and locale-encoding-mapping-list was changed from "?" to "*"
+ in this schema. However, the deployment descriptor instance
+ file must not contain multiple elements of session-config,
+ jsp-config, and login-config. When there are multiple elements of
+ welcome-file-list or locale-encoding-mapping-list, the container
+ must concatinate the element contents. The multiple occurance
+ of the element distributable is redundant and the container
+ treats that case exactly in the same way when there is only
+ one distributable.
+
+
+
+
+
+
+
+
+ The servlet element contains the name of a servlet.
+ The name must be unique within the web application.
+
+
+
+
+
+
+
+
+
+
+
+ The filter element contains the name of a filter.
+ The name must be unique within the web application.
+
+
+
+
+
+
+
+
+
+
+
+ The ejb-local-ref-name element contains the name of an EJB
+ reference. The EJB reference is an entry in the web
+ application's environment and is relative to the
+ java:comp/env context. The name must be unique within
+ the web application.
+
+ It is recommended that name is prefixed with "ejb/".
+
+
+
+
+
+
+
+
+
+
+
+ The ejb-ref-name element contains the name of an EJB
+ reference. The EJB reference is an entry in the web
+ application's environment and is relative to the
+ java:comp/env context. The name must be unique within
+ the web application.
+
+ It is recommended that name is prefixed with "ejb/".
+
+
+
+
+
+
+
+
+
+
+
+ The resource-env-ref-name element specifies the name of
+ a resource environment reference; its value is the
+ environment entry name used in the web application code.
+ The name is a JNDI name relative to the java:comp/env
+ context and must be unique within a web application.
+
+
+
+
+
+
+
+
+
+
+
+ The message-destination-ref-name element specifies the name of
+ a message destination reference; its value is the
+ environment entry name used in the web application code.
+ The name is a JNDI name relative to the java:comp/env
+ context and must be unique within a web application.
+
+
+
+
+
+
+
+
+
+
+
+ The res-ref-name element specifies the name of a
+ resource manager connection factory reference. The name
+ is a JNDI name relative to the java:comp/env context.
+ The name must be unique within a web application.
+
+
+
+
+
+
+
+
+
+
+
+ The env-entry-name element contains the name of a web
+ application's environment entry. The name is a JNDI
+ name relative to the java:comp/env context. The name
+ must be unique within a web application.
+
+
+
+
+
+
+
+
+
+
+
+
+ A role-name-key is specified to allow the references
+ from the security-role-refs.
+
+
+
+
+
+
+
+
+
+
+
+ The keyref indicates the references from
+ security-role-ref to a specified role-name.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The auth-constraintType indicates the user roles that
+ should be permitted access to this resource
+ collection. The role-name used here must either correspond
+ to the role-name of one of the security-role elements
+ defined for this web application, or be the specially
+ reserved role-name "*" that is a compact syntax for
+ indicating all roles in the web application. If both "*"
+ and rolenames appear, the container interprets this as all
+ roles. If no roles are defined, no user is allowed access
+ to the portion of the web application described by the
+ containing security-constraint. The container matches
+ role names case sensitively when determining access.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The auth-methodType is used to configure the authentication
+ mechanism for the web application. As a prerequisite to
+ gaining access to any web resources which are protected by
+ an authorization constraint, a user must have authenticated
+ using the configured mechanism. Legal values are "BASIC",
+ "DIGEST", "FORM", "CLIENT-CERT", or a vendor-specific
+ authentication scheme.
+
+ Used in: login-config
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The dispatcher has four legal values: FORWARD, REQUEST, INCLUDE,
+ and ERROR. A value of FORWARD means the Filter will be applied
+ under RequestDispatcher.forward() calls. A value of REQUEST
+ means the Filter will be applied under ordinary client calls to
+ the path or servlet. A value of INCLUDE means the Filter will be
+ applied under RequestDispatcher.include() calls. A value of
+ ERROR means the Filter will be applied under the error page
+ mechanism. The absence of any dispatcher elements in a
+ filter-mapping indicates a default of applying filters only under
+ ordinary client calls to the path or servlet.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The encodingType defines IANA character sets.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The error-code contains an HTTP error code, ex: 404
+
+ Used in: error-page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The error-pageType contains a mapping between an error code
+ or exception type to the path of a resource in the web
+ application.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+
+
+ The exception-type contains a fully qualified class
+ name of a Java exception type.
+
+
+
+
+
+
+
+
+
+
+ The location element contains the location of the
+ resource in the web application relative to the root of
+ the web application. The value of the location must have
+ a leading `/'.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Declaration of the filter mappings in this web
+ application is done by using filter-mappingType.
+ The container uses the filter-mapping
+ declarations to decide which filters to apply to a request,
+ and in what order. The container matches the request URI to
+ a Servlet in the normal way. To determine which filters to
+ apply it matches filter-mapping declarations either on
+ servlet-name, or on url-pattern for each filter-mapping
+ element, depending on which style is used. The order in
+ which filters are invoked is the order in which
+ filter-mapping declarations that match a request URI for a
+ servlet appear in the list of filter-mapping elements.The
+ filter-name value must be the value of the filter-name
+ sub-elements of one of the filter declarations in the
+ deployment descriptor.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The logical name of the filter is declare
+ by using filter-nameType. This name is used to map the
+ filter. Each filter name is unique within the web
+ application.
+
+ Used in: filter, filter-mapping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The filterType is used to declare a filter in the web
+ application. The filter is mapped to either a servlet or a
+ URL pattern in the filter-mapping element, using the
+ filter-name value to reference. Filters can access the
+ initialization parameters declared in the deployment
+ descriptor at runtime via the FilterConfig interface.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+
+ The fully qualified classname of the filter.
+
+
+
+
+
+
+
+
+
+ The init-param element contains a name/value pair as
+ an initialization param of a servlet filter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The form-login-configType specifies the login and error
+ pages that should be used in form based login. If form based
+ authentication is not used, these elements are ignored.
+
+ Used in: login-config
+
+
+
+
+
+
+
+
+
+
+ The form-login-page element defines the location in the web
+ app where the page that can be used for login can be
+ found. The path begins with a leading / and is interpreted
+ relative to the root of the WAR.
+
+
+
+
+
+
+
+
+
+ The form-error-page element defines the location in
+ the web app where the error page that is displayed
+ when login is not successful can be found.
+ The path begins with a leading / and is interpreted
+ relative to the root of the WAR.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The http-method contains an HTTP method recognized by the
+ web-app, for example GET, POST, ...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The locale-encoding-mapping-list contains one or more
+ locale-encoding-mapping(s).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The locale-encoding-mapping contains locale name and
+ encoding name. The locale name must be either "Language-code",
+ such as "ja", defined by ISO-639 or "Language-code_Country-code",
+ such as "ja_JP". "Country code" is defined by ISO-3166.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The localeType defines valid locale defined by ISO-639-1
+ and ISO-3166.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The login-configType is used to configure the authentication
+ method that should be used, the realm name that should be
+ used for this application, and the attributes that are
+ needed by the form login mechanism.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+ The realm name element specifies the realm name to
+ use in HTTP Basic authorization.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The mime-mappingType defines a mapping between an extension
+ and a mime type.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+ The extension element contains a string describing an
+ extension. example: "txt"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The mime-typeType is used to indicate a defined mime type.
+
+ Example:
+ "text/plain"
+
+ Used in: mime-mapping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This type defines a string which contains at least one
+ character.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The security-constraintType is used to associate
+ security constraints with one or more web resource
+ collections
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The servlet-mappingType defines a mapping between a
+ servlet and a url pattern.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The servlet-name element contains the canonical name of the
+ servlet. Each servlet name is unique within the web
+ application.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The servletType is used to declare a servlet.
+ It contains the declarative data of a
+ servlet. If a jsp-file is specified and the load-on-startup
+ element is present, then the JSP should be precompiled and
+ loaded.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+
+
+
+ The servlet-class element contains the fully
+ qualified class name of the servlet.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The load-on-startup element indicates that this
+ servlet should be loaded (instantiated and have
+ its init() called) on the startup of the web
+ application. The optional contents of these
+ element must be an integer indicating the order in
+ which the servlet should be loaded. If the value
+ is a negative integer, or the element is not
+ present, the container is free to load the servlet
+ whenever it chooses. If the value is a positive
+ integer or 0, the container must load and
+ initialize the servlet as the application is
+ deployed. The container must guarantee that
+ servlets marked with lower integers are loaded
+ before servlets marked with higher integers. The
+ container may choose the order of loading of
+ servlets with the same load-on-start-up value.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The session-configType defines the session parameters
+ for this web application.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+ The session-timeout element defines the default
+ session timeout interval for all sessions created
+ in this web application. The specified timeout
+ must be expressed in a whole number of minutes.
+ If the timeout is 0 or less, the container ensures
+ the default behaviour of sessions is never to time
+ out. If this element is not specified, the container
+ must set its default timeout period.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The transport-guaranteeType specifies that the communication
+ between client and server should be NONE, INTEGRAL, or
+ CONFIDENTIAL. NONE means that the application does not
+ require any transport guarantees. A value of INTEGRAL means
+ that the application requires that the data sent between the
+ client and server be sent in such a way that it can't be
+ changed in transit. CONFIDENTIAL means that the application
+ requires that the data be transmitted in a fashion that
+ prevents other entities from observing the contents of the
+ transmission. In most cases, the presence of the INTEGRAL or
+ CONFIDENTIAL flag will indicate that the use of SSL is
+ required.
+
+ Used in: user-data-constraint
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The user-data-constraintType is used to indicate how
+ data communicated between the client and container should be
+ protected.
+
+ Used in: security-constraint
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The elements that use this type designate a path starting
+ with a "/" and interpreted relative to the root of a WAR
+ file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This type contains the recognized versions of
+ web-application supported. It is used to designate the
+ version of the web application.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The context-param element contains the declaration
+ of a web application's servlet context
+ initialization parameters.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The web-resource-collectionType is used to identify a subset
+ of the resources and HTTP methods on those resources within
+ a web application to which a security constraint applies. If
+ no HTTP methods are specified, then the security constraint
+ applies to all HTTP methods.
+
+ Used in: security-constraint
+
+
+
+
+
+
+
+
+
+ The web-resource-name contains the name of this web
+ resource collection.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The welcome-file-list contains an ordered list of welcome
+ files elements.
+
+ Used in: web-app
+
+
+
+
+
+
+
+
+
+ The welcome-file element contains file name to use
+ as a default welcome file, such as index.html
+
+
+
+
+
+
+
+
+
+