T upgrade(
* {@inheritDoc}
*
* The default behavior of this method is to return
- * {@link HttpServletRequest#newPushBuilder()} on the wrapped request object.
+ * {@link HttpServletRequest#newPushBuilder()} on the wrapped request
+ * object.
*
* @since Servlet 4.0
*/
@@ -402,7 +403,8 @@ public PushBuilder newPushBuilder() {
* {@inheritDoc}
*
* The default behavior of this method is to return
- * {@link HttpServletRequest#getTrailerFields()} on the wrapped request object.
+ * {@link HttpServletRequest#getTrailerFields()} on the wrapped request
+ * object.
*
* @since Servlet 4.0
*/
@@ -410,4 +412,19 @@ public PushBuilder newPushBuilder() {
public Map getTrailerFields() {
return this._getHttpServletRequest().getTrailerFields();
}
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * The default behavior of this method is to return
+ * {@link HttpServletRequest#isTrailerFieldsReady()} on the wrapped request
+ * object.
+ *
+ * @since Servlet 4.0
+ */
+ @Override
+ public boolean isTrailerFieldsReady() {
+ return this._getHttpServletRequest().isTrailerFieldsReady();
+ }
}
diff --git a/src/main/java/javax/servlet/http/HttpServletResponse.java b/core/src/main/java/javax/servlet/http/HttpServletResponse.java
similarity index 95%
rename from src/main/java/javax/servlet/http/HttpServletResponse.java
rename to core/src/main/java/javax/servlet/http/HttpServletResponse.java
index 9d406d9..a108654 100644
--- a/src/main/java/javax/servlet/http/HttpServletResponse.java
+++ b/core/src/main/java/javax/servlet/http/HttpServletResponse.java
@@ -18,6 +18,8 @@
import java.io.IOException;
import java.util.Collection;
+import java.util.Map;
+import java.util.function.Supplier;
import javax.servlet.ServletResponse;
@@ -340,6 +342,40 @@ public interface HttpServletResponse extends ServletResponse {
*/
public Collection getHeaderNames();
+ /**
+ * Configure the supplier of the trailer headers. The supplier will be
+ * called in the scope of the thread that completes the response.
+ *
+ * Trailers that don't meet the requirements of RFC 7230, section 4.1.2 will
+ * be ignored.
+ *
+ * The default implementation is a NO-OP.
+ *
+ * @param supplier The supplier for the trailer headers
+ *
+ * @throws IllegalStateException if this method is called when the
+ * underlying protocol does not support trailer headers or if using
+ * HTTP/1.1 and the response has already been committed
+ *
+ * @since Servlet 4.0
+ */
+ public default void setTrailerFields(Supplier> supplier) {
+ // NO-OP
+ }
+
+ /**
+ * Obtain the supplier of the trailer headers.
+ *
+ * The default implementation returns null.
+ *
+ * @return The supplier for the trailer headers
+ *
+ * @since Servlet 4.0
+ */
+ public default Supplier> getTrailerFields() {
+ return null;
+ }
+
/*
* Server status codes; see RFC 2068.
*/
diff --git a/src/main/java/javax/servlet/http/HttpServletResponseWrapper.java b/core/src/main/java/javax/servlet/http/HttpServletResponseWrapper.java
similarity index 88%
rename from src/main/java/javax/servlet/http/HttpServletResponseWrapper.java
rename to core/src/main/java/javax/servlet/http/HttpServletResponseWrapper.java
index 90faa63..7d312d9 100644
--- a/src/main/java/javax/servlet/http/HttpServletResponseWrapper.java
+++ b/core/src/main/java/javax/servlet/http/HttpServletResponseWrapper.java
@@ -18,6 +18,8 @@
import java.io.IOException;
import java.util.Collection;
+import java.util.Map;
+import java.util.function.Supplier;
import javax.servlet.ServletResponseWrapper;
@@ -216,7 +218,7 @@ public void setStatus(int sc, String sm) {
*
* The default implementation is to call
* {@link HttpServletResponse#getStatus()}
- * on the wrapper {@link HttpServletResponse}.
+ * on the wrapped {@link HttpServletResponse}.
*
* @since Servlet 3.0
*/
@@ -230,7 +232,7 @@ public int getStatus() {
*
* The default implementation is to call
* {@link HttpServletResponse#getHeader(String)}
- * on the wrapper {@link HttpServletResponse}.
+ * on the wrapped {@link HttpServletResponse}.
*
* @since Servlet 3.0
*/
@@ -244,7 +246,7 @@ public String getHeader(String name) {
*
* The default implementation is to call
* {@link HttpServletResponse#getHeaders(String)}
- * on the wrapper {@link HttpServletResponse}.
+ * on the wrapped {@link HttpServletResponse}.
*
* @since Servlet 3.0
*/
@@ -258,7 +260,7 @@ public Collection getHeaders(String name) {
*
* The default implementation is to call
* {@link HttpServletResponse#getHeaderNames()}
- * on the wrapper {@link HttpServletResponse}.
+ * on the wrapped {@link HttpServletResponse}.
*
* @since Servlet 3.0
*/
@@ -266,4 +268,32 @@ public Collection getHeaders(String name) {
public Collection getHeaderNames() {
return this._getHttpServletResponse().getHeaderNames();
}
+
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation is to call
+ * {@link HttpServletResponse#setTrailerFields(Supplier)}
+ * on the wrapped {@link HttpServletResponse}.
+ *
+ * @since Servlet 4.0
+ */
+ @Override
+ public void setTrailerFields(Supplier> supplier) {
+ this._getHttpServletResponse().setTrailerFields(supplier);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation is to call
+ * {@link HttpServletResponse#getTrailerFields()}
+ * on the wrapped {@link HttpServletResponse}.
+ *
+ * @since Servlet 4.0
+ */
+ @Override
+ public Supplier> getTrailerFields() {
+ return this._getHttpServletResponse().getTrailerFields();
+ }
}
diff --git a/src/main/java/javax/servlet/http/HttpSession.java b/core/src/main/java/javax/servlet/http/HttpSession.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSession.java
rename to core/src/main/java/javax/servlet/http/HttpSession.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionActivationListener.java b/core/src/main/java/javax/servlet/http/HttpSessionActivationListener.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionActivationListener.java
rename to core/src/main/java/javax/servlet/http/HttpSessionActivationListener.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionAttributeListener.java b/core/src/main/java/javax/servlet/http/HttpSessionAttributeListener.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionAttributeListener.java
rename to core/src/main/java/javax/servlet/http/HttpSessionAttributeListener.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionBindingEvent.java b/core/src/main/java/javax/servlet/http/HttpSessionBindingEvent.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionBindingEvent.java
rename to core/src/main/java/javax/servlet/http/HttpSessionBindingEvent.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionBindingListener.java b/core/src/main/java/javax/servlet/http/HttpSessionBindingListener.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionBindingListener.java
rename to core/src/main/java/javax/servlet/http/HttpSessionBindingListener.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionContext.java b/core/src/main/java/javax/servlet/http/HttpSessionContext.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionContext.java
rename to core/src/main/java/javax/servlet/http/HttpSessionContext.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionEvent.java b/core/src/main/java/javax/servlet/http/HttpSessionEvent.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionEvent.java
rename to core/src/main/java/javax/servlet/http/HttpSessionEvent.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionIdListener.java b/core/src/main/java/javax/servlet/http/HttpSessionIdListener.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionIdListener.java
rename to core/src/main/java/javax/servlet/http/HttpSessionIdListener.java
diff --git a/src/main/java/javax/servlet/http/HttpSessionListener.java b/core/src/main/java/javax/servlet/http/HttpSessionListener.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpSessionListener.java
rename to core/src/main/java/javax/servlet/http/HttpSessionListener.java
diff --git a/src/main/java/javax/servlet/http/HttpUpgradeHandler.java b/core/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
similarity index 100%
rename from src/main/java/javax/servlet/http/HttpUpgradeHandler.java
rename to core/src/main/java/javax/servlet/http/HttpUpgradeHandler.java
diff --git a/src/main/java/javax/servlet/http/HttpUtils.java b/core/src/main/java/javax/servlet/http/HttpUtils.java
similarity index 98%
rename from src/main/java/javax/servlet/http/HttpUtils.java
rename to core/src/main/java/javax/servlet/http/HttpUtils.java
index 676c8ea..4356af1 100644
--- a/src/main/java/javax/servlet/http/HttpUtils.java
+++ b/core/src/main/java/javax/servlet/http/HttpUtils.java
@@ -18,6 +18,7 @@
package javax.servlet.http;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Hashtable;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
@@ -101,9 +102,7 @@ public static Hashtable parseQueryString(String s) {
String val = parseName(pair.substring(pos+1, pair.length()), sb);
if (ht.containsKey(key)) {
String oldVals[] = ht.get(key);
- valArray = new String[oldVals.length + 1];
- for (int i = 0; i < oldVals.length; i++)
- valArray[i] = oldVals[i];
+ valArray = Arrays.copyOf(oldVals, oldVals.length + 1);
valArray[oldVals.length] = val;
} else {
valArray = new String[1];
diff --git a/src/main/java/javax/servlet/http/LocalStrings.properties b/core/src/main/java/javax/servlet/http/LocalStrings.properties
similarity index 100%
rename from src/main/java/javax/servlet/http/LocalStrings.properties
rename to core/src/main/java/javax/servlet/http/LocalStrings.properties
diff --git a/src/main/java/javax/servlet/http/LocalStrings_es.properties b/core/src/main/java/javax/servlet/http/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/javax/servlet/http/LocalStrings_es.properties
rename to core/src/main/java/javax/servlet/http/LocalStrings_es.properties
index c61fc9f..cbdb4e6 100644
--- a/src/main/java/javax/servlet/http/LocalStrings_es.properties
+++ b/core/src/main/java/javax/servlet/http/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
err.cookie_name_is_token = El nombre de Cookie [{0}] es una palabra reservada
err.cookie_name_blank = El nombre del Cookie no puede ser nulo o de longitud cero
err.io.negativelength = Longitud Negativa en el metodo write
diff --git a/src/main/java/javax/servlet/http/LocalStrings_fr.properties b/core/src/main/java/javax/servlet/http/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/javax/servlet/http/LocalStrings_fr.properties
rename to core/src/main/java/javax/servlet/http/LocalStrings_fr.properties
diff --git a/src/main/java/javax/servlet/http/LocalStrings_ja.properties b/core/src/main/java/javax/servlet/http/LocalStrings_ja.properties
similarity index 100%
rename from src/main/java/javax/servlet/http/LocalStrings_ja.properties
rename to core/src/main/java/javax/servlet/http/LocalStrings_ja.properties
diff --git a/src/main/java/javax/servlet/http/MappingMatch.java b/core/src/main/java/javax/servlet/http/MappingMatch.java
similarity index 97%
rename from src/main/java/javax/servlet/http/MappingMatch.java
rename to core/src/main/java/javax/servlet/http/MappingMatch.java
index 6e126c0..97d2d66 100644
--- a/src/main/java/javax/servlet/http/MappingMatch.java
+++ b/core/src/main/java/javax/servlet/http/MappingMatch.java
@@ -27,6 +27,5 @@ public enum MappingMatch {
DEFAULT,
EXACT,
EXTENSION,
- PATH,
- UNKNOWN
+ PATH
}
diff --git a/src/main/java/javax/servlet/http/Part.java b/core/src/main/java/javax/servlet/http/Part.java
similarity index 100%
rename from src/main/java/javax/servlet/http/Part.java
rename to core/src/main/java/javax/servlet/http/Part.java
diff --git a/src/main/java/javax/servlet/http/PushBuilder.java b/core/src/main/java/javax/servlet/http/PushBuilder.java
similarity index 100%
rename from src/main/java/javax/servlet/http/PushBuilder.java
rename to core/src/main/java/javax/servlet/http/PushBuilder.java
diff --git a/src/main/java/javax/servlet/http/WebConnection.java b/core/src/main/java/javax/servlet/http/WebConnection.java
similarity index 100%
rename from src/main/java/javax/servlet/http/WebConnection.java
rename to core/src/main/java/javax/servlet/http/WebConnection.java
diff --git a/src/main/java/javax/servlet/http/package.html b/core/src/main/java/javax/servlet/http/package.html
similarity index 100%
rename from src/main/java/javax/servlet/http/package.html
rename to core/src/main/java/javax/servlet/http/package.html
diff --git a/src/main/java/javax/servlet/jsp/ErrorData.java b/core/src/main/java/javax/servlet/jsp/ErrorData.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/ErrorData.java
rename to core/src/main/java/javax/servlet/jsp/ErrorData.java
diff --git a/src/main/java/javax/servlet/jsp/HttpJspPage.java b/core/src/main/java/javax/servlet/jsp/HttpJspPage.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/HttpJspPage.java
rename to core/src/main/java/javax/servlet/jsp/HttpJspPage.java
diff --git a/src/main/java/javax/servlet/jsp/JspApplicationContext.java b/core/src/main/java/javax/servlet/jsp/JspApplicationContext.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspApplicationContext.java
rename to core/src/main/java/javax/servlet/jsp/JspApplicationContext.java
diff --git a/src/main/java/javax/servlet/jsp/JspContext.java b/core/src/main/java/javax/servlet/jsp/JspContext.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspContext.java
rename to core/src/main/java/javax/servlet/jsp/JspContext.java
diff --git a/src/main/java/javax/servlet/jsp/JspEngineInfo.java b/core/src/main/java/javax/servlet/jsp/JspEngineInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspEngineInfo.java
rename to core/src/main/java/javax/servlet/jsp/JspEngineInfo.java
diff --git a/src/main/java/javax/servlet/jsp/JspException.java b/core/src/main/java/javax/servlet/jsp/JspException.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspException.java
rename to core/src/main/java/javax/servlet/jsp/JspException.java
diff --git a/src/main/java/javax/servlet/jsp/JspFactory.java b/core/src/main/java/javax/servlet/jsp/JspFactory.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspFactory.java
rename to core/src/main/java/javax/servlet/jsp/JspFactory.java
diff --git a/src/main/java/javax/servlet/jsp/JspPage.java b/core/src/main/java/javax/servlet/jsp/JspPage.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspPage.java
rename to core/src/main/java/javax/servlet/jsp/JspPage.java
diff --git a/src/main/java/javax/servlet/jsp/JspTagException.java b/core/src/main/java/javax/servlet/jsp/JspTagException.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspTagException.java
rename to core/src/main/java/javax/servlet/jsp/JspTagException.java
diff --git a/src/main/java/javax/servlet/jsp/JspWriter.java b/core/src/main/java/javax/servlet/jsp/JspWriter.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/JspWriter.java
rename to core/src/main/java/javax/servlet/jsp/JspWriter.java
diff --git a/src/main/java/javax/servlet/jsp/PageContext.java b/core/src/main/java/javax/servlet/jsp/PageContext.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/PageContext.java
rename to core/src/main/java/javax/servlet/jsp/PageContext.java
diff --git a/src/main/java/javax/servlet/jsp/SkipPageException.java b/core/src/main/java/javax/servlet/jsp/SkipPageException.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/SkipPageException.java
rename to core/src/main/java/javax/servlet/jsp/SkipPageException.java
diff --git a/src/main/java/javax/servlet/jsp/el/ELException.java b/core/src/main/java/javax/servlet/jsp/el/ELException.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/ELException.java
rename to core/src/main/java/javax/servlet/jsp/el/ELException.java
diff --git a/src/main/java/javax/servlet/jsp/el/ELParseException.java b/core/src/main/java/javax/servlet/jsp/el/ELParseException.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/ELParseException.java
rename to core/src/main/java/javax/servlet/jsp/el/ELParseException.java
diff --git a/src/main/java/javax/servlet/jsp/el/Expression.java b/core/src/main/java/javax/servlet/jsp/el/Expression.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/Expression.java
rename to core/src/main/java/javax/servlet/jsp/el/Expression.java
diff --git a/src/main/java/javax/servlet/jsp/el/ExpressionEvaluator.java b/core/src/main/java/javax/servlet/jsp/el/ExpressionEvaluator.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/ExpressionEvaluator.java
rename to core/src/main/java/javax/servlet/jsp/el/ExpressionEvaluator.java
diff --git a/src/main/java/javax/servlet/jsp/el/FunctionMapper.java b/core/src/main/java/javax/servlet/jsp/el/FunctionMapper.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/FunctionMapper.java
rename to core/src/main/java/javax/servlet/jsp/el/FunctionMapper.java
diff --git a/src/main/java/javax/servlet/jsp/el/ImplicitObjectELResolver.java b/core/src/main/java/javax/servlet/jsp/el/ImplicitObjectELResolver.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/ImplicitObjectELResolver.java
rename to core/src/main/java/javax/servlet/jsp/el/ImplicitObjectELResolver.java
diff --git a/src/main/java/javax/servlet/jsp/el/ScopedAttributeELResolver.java b/core/src/main/java/javax/servlet/jsp/el/ScopedAttributeELResolver.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/ScopedAttributeELResolver.java
rename to core/src/main/java/javax/servlet/jsp/el/ScopedAttributeELResolver.java
diff --git a/src/main/java/javax/servlet/jsp/el/VariableResolver.java b/core/src/main/java/javax/servlet/jsp/el/VariableResolver.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/VariableResolver.java
rename to core/src/main/java/javax/servlet/jsp/el/VariableResolver.java
diff --git a/src/main/java/javax/servlet/jsp/el/package.html b/core/src/main/java/javax/servlet/jsp/el/package.html
similarity index 100%
rename from src/main/java/javax/servlet/jsp/el/package.html
rename to core/src/main/java/javax/servlet/jsp/el/package.html
diff --git a/src/main/java/javax/servlet/jsp/package.html b/core/src/main/java/javax/servlet/jsp/package.html
similarity index 100%
rename from src/main/java/javax/servlet/jsp/package.html
rename to core/src/main/java/javax/servlet/jsp/package.html
diff --git a/src/main/java/javax/servlet/jsp/resources/jspxml.dtd b/core/src/main/java/javax/servlet/jsp/resources/jspxml.dtd
similarity index 100%
rename from src/main/java/javax/servlet/jsp/resources/jspxml.dtd
rename to core/src/main/java/javax/servlet/jsp/resources/jspxml.dtd
diff --git a/src/main/java/javax/servlet/jsp/resources/jspxml.xsd b/core/src/main/java/javax/servlet/jsp/resources/jspxml.xsd
similarity index 100%
rename from src/main/java/javax/servlet/jsp/resources/jspxml.xsd
rename to core/src/main/java/javax/servlet/jsp/resources/jspxml.xsd
diff --git a/src/main/java/javax/servlet/jsp/tagext/BodyContent.java b/core/src/main/java/javax/servlet/jsp/tagext/BodyContent.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/BodyContent.java
rename to core/src/main/java/javax/servlet/jsp/tagext/BodyContent.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/BodyTag.java b/core/src/main/java/javax/servlet/jsp/tagext/BodyTag.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/BodyTag.java
rename to core/src/main/java/javax/servlet/jsp/tagext/BodyTag.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/BodyTagSupport.java b/core/src/main/java/javax/servlet/jsp/tagext/BodyTagSupport.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/BodyTagSupport.java
rename to core/src/main/java/javax/servlet/jsp/tagext/BodyTagSupport.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/DynamicAttributes.java b/core/src/main/java/javax/servlet/jsp/tagext/DynamicAttributes.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/DynamicAttributes.java
rename to core/src/main/java/javax/servlet/jsp/tagext/DynamicAttributes.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/FunctionInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/FunctionInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/FunctionInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/FunctionInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/IterationTag.java b/core/src/main/java/javax/servlet/jsp/tagext/IterationTag.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/IterationTag.java
rename to core/src/main/java/javax/servlet/jsp/tagext/IterationTag.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/JspFragment.java b/core/src/main/java/javax/servlet/jsp/tagext/JspFragment.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/JspFragment.java
rename to core/src/main/java/javax/servlet/jsp/tagext/JspFragment.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/JspIdConsumer.java b/core/src/main/java/javax/servlet/jsp/tagext/JspIdConsumer.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/JspIdConsumer.java
rename to core/src/main/java/javax/servlet/jsp/tagext/JspIdConsumer.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/JspTag.java b/core/src/main/java/javax/servlet/jsp/tagext/JspTag.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/JspTag.java
rename to core/src/main/java/javax/servlet/jsp/tagext/JspTag.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/PageData.java b/core/src/main/java/javax/servlet/jsp/tagext/PageData.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/PageData.java
rename to core/src/main/java/javax/servlet/jsp/tagext/PageData.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/SimpleTag.java b/core/src/main/java/javax/servlet/jsp/tagext/SimpleTag.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/SimpleTag.java
rename to core/src/main/java/javax/servlet/jsp/tagext/SimpleTag.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/SimpleTagSupport.java b/core/src/main/java/javax/servlet/jsp/tagext/SimpleTagSupport.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/SimpleTagSupport.java
rename to core/src/main/java/javax/servlet/jsp/tagext/SimpleTagSupport.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/Tag.java b/core/src/main/java/javax/servlet/jsp/tagext/Tag.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/Tag.java
rename to core/src/main/java/javax/servlet/jsp/tagext/Tag.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagAdapter.java b/core/src/main/java/javax/servlet/jsp/tagext/TagAdapter.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagAdapter.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagAdapter.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagAttributeInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagAttributeInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagAttributeInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagAttributeInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagData.java b/core/src/main/java/javax/servlet/jsp/tagext/TagData.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagData.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagData.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagExtraInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagExtraInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagExtraInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagExtraInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagFileInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagFileInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagFileInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagFileInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java
similarity index 99%
rename from src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java
index cd4d591..79eb9c2 100644
--- a/src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java
+++ b/core/src/main/java/javax/servlet/jsp/tagext/TagLibraryInfo.java
@@ -230,13 +230,13 @@ public FunctionInfo getFunction(String name) {
/**
* The prefix assigned to this taglib from the taglib directive.
*/
- protected final String prefix;
+ protected String prefix;
/**
* The value of the uri attribute from the taglib directive for this
* library.
*/
- protected final String uri;
+ protected String uri;
/**
* An array describing the tags that are defined in this tag library.
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagLibraryValidator.java b/core/src/main/java/javax/servlet/jsp/tagext/TagLibraryValidator.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagLibraryValidator.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagLibraryValidator.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagSupport.java b/core/src/main/java/javax/servlet/jsp/tagext/TagSupport.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagSupport.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagSupport.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TagVariableInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/TagVariableInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TagVariableInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TagVariableInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/TryCatchFinally.java b/core/src/main/java/javax/servlet/jsp/tagext/TryCatchFinally.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/TryCatchFinally.java
rename to core/src/main/java/javax/servlet/jsp/tagext/TryCatchFinally.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/ValidationMessage.java b/core/src/main/java/javax/servlet/jsp/tagext/ValidationMessage.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/ValidationMessage.java
rename to core/src/main/java/javax/servlet/jsp/tagext/ValidationMessage.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/VariableInfo.java b/core/src/main/java/javax/servlet/jsp/tagext/VariableInfo.java
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/VariableInfo.java
rename to core/src/main/java/javax/servlet/jsp/tagext/VariableInfo.java
diff --git a/src/main/java/javax/servlet/jsp/tagext/doc-files/BodyTagProtocol.gif b/core/src/main/java/javax/servlet/jsp/tagext/doc-files/BodyTagProtocol.gif
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/doc-files/BodyTagProtocol.gif
rename to core/src/main/java/javax/servlet/jsp/tagext/doc-files/BodyTagProtocol.gif
diff --git a/src/main/java/javax/servlet/jsp/tagext/doc-files/IterationTagProtocol.gif b/core/src/main/java/javax/servlet/jsp/tagext/doc-files/IterationTagProtocol.gif
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/doc-files/IterationTagProtocol.gif
rename to core/src/main/java/javax/servlet/jsp/tagext/doc-files/IterationTagProtocol.gif
diff --git a/src/main/java/javax/servlet/jsp/tagext/doc-files/TagProtocol.gif b/core/src/main/java/javax/servlet/jsp/tagext/doc-files/TagProtocol.gif
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/doc-files/TagProtocol.gif
rename to core/src/main/java/javax/servlet/jsp/tagext/doc-files/TagProtocol.gif
diff --git a/src/main/java/javax/servlet/jsp/tagext/doc-files/VariableInfo-1.gif b/core/src/main/java/javax/servlet/jsp/tagext/doc-files/VariableInfo-1.gif
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/doc-files/VariableInfo-1.gif
rename to core/src/main/java/javax/servlet/jsp/tagext/doc-files/VariableInfo-1.gif
diff --git a/src/main/java/javax/servlet/jsp/tagext/package.html b/core/src/main/java/javax/servlet/jsp/tagext/package.html
similarity index 100%
rename from src/main/java/javax/servlet/jsp/tagext/package.html
rename to core/src/main/java/javax/servlet/jsp/tagext/package.html
diff --git a/src/main/java/javax/servlet/package.html b/core/src/main/java/javax/servlet/package.html
similarity index 100%
rename from src/main/java/javax/servlet/package.html
rename to core/src/main/java/javax/servlet/package.html
diff --git a/src/main/java/javax/servlet/resources/XMLSchema.dtd b/core/src/main/java/javax/servlet/resources/XMLSchema.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/XMLSchema.dtd
rename to core/src/main/java/javax/servlet/resources/XMLSchema.dtd
diff --git a/src/main/java/javax/servlet/resources/datatypes.dtd b/core/src/main/java/javax/servlet/resources/datatypes.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/datatypes.dtd
rename to core/src/main/java/javax/servlet/resources/datatypes.dtd
diff --git a/src/main/java/javax/servlet/resources/j2ee_1_4.xsd b/core/src/main/java/javax/servlet/resources/j2ee_1_4.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/j2ee_1_4.xsd
rename to core/src/main/java/javax/servlet/resources/j2ee_1_4.xsd
diff --git a/src/main/java/javax/servlet/resources/j2ee_web_services_1_1.xsd b/core/src/main/java/javax/servlet/resources/j2ee_web_services_1_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/j2ee_web_services_1_1.xsd
rename to core/src/main/java/javax/servlet/resources/j2ee_web_services_1_1.xsd
diff --git a/src/main/java/javax/servlet/resources/j2ee_web_services_client_1_1.xsd b/core/src/main/java/javax/servlet/resources/j2ee_web_services_client_1_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/j2ee_web_services_client_1_1.xsd
rename to core/src/main/java/javax/servlet/resources/j2ee_web_services_client_1_1.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_5.xsd b/core/src/main/java/javax/servlet/resources/javaee_5.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_5.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_5.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_6.xsd b/core/src/main/java/javax/servlet/resources/javaee_6.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_6.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_6.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_7.xsd b/core/src/main/java/javax/servlet/resources/javaee_7.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_7.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_7.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_8.xsd b/core/src/main/java/javax/servlet/resources/javaee_8.xsd
similarity index 71%
rename from src/main/java/javax/servlet/resources/javaee_8.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_8.xsd
index 47cc6a0..8346758 100644
--- a/src/main/java/javax/servlet/resources/javaee_8.xsd
+++ b/core/src/main/java/javax/servlet/resources/javaee_8.xsd
@@ -1,76 +1,85 @@
-
-
-
+
-
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ Copyright (c) 2009-2017 Oracle and/or its affiliates. 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_1_1.html
+ or packager/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 packager/legal/LICENSE.txt.
+
+ GPL Classpath Exception:
+ Oracle designates this particular file as subject to the "Classpath"
+ exception as provided by Oracle in the GPL Version 2 section of the License
+ file that accompanied this code.
+
+ Modifications:
+ If applicable, add the following below the License Header, with the fields
+ enclosed by brackets [] replaced by your own identifying information:
+ "Portions Copyright [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 Apache Software Foundation elects to include this software under the
+ CDDL license.
+
-
+
+ The following definitions that appear in the common
+ shareable schema(s) of Java EE deployment descriptors should be
+ interpreted with respect to the context they are included:
+
+ Deployment Component may indicate one of the following:
+ java ee application;
+ application client;
+ web application;
+ enterprise bean;
+ resource adapter;
+
+ Deployment File may indicate one of the following:
+ ear file;
+ war file;
+ jar file;
+ rar file;
+
-
-
-
@@ -99,8 +108,6 @@
-
-
@@ -113,58 +120,72 @@
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
+ minOccurs="0"
+ maxOccurs="unbounded"/>
-
-
@@ -175,26 +196,21 @@
-
-
- The JNDI name to be looked up to resolve a resource reference.
+ The JNDI name to be looked up to resolve a resource reference.
-
-
-
@@ -211,37 +227,34 @@
minOccurs="0">
-
-
-
+
@@ -281,7 +294,7 @@
- The administered object's interface type.
+ The administered object's interface type.
@@ -291,7 +304,7 @@
- The administered object's class name.
+ The administered object's class name.
@@ -324,6 +337,7 @@
type="xsd:ID"/>
+
@@ -365,7 +379,6 @@
The fully qualified class name of the connection factory
interface.
-
@@ -433,7 +446,8 @@
type="xsd:ID"/>
-
+
+
@@ -466,7 +480,6 @@
-
@@ -518,7 +531,6 @@
url property is specified
along with other standard DataSource properties
such as serverName, databaseName
@@ -660,12 +672,13 @@
-
-
+
-
+
+
@@ -693,8 +706,6 @@
-
-
@@ -704,33 +715,32 @@
-
-
+
+
- Employee Self Service
-
+ ...
+
+ Employee Self Service
+
- The value of the xml:lang attribute is "en" (English) by default.
+ The value of the xml:lang attribute is "en" (English) by default.
- ]]>
+ ]]>
@@ -740,37 +750,37 @@
-
+
+
EmployeeRecord
- EmployeeRecord
+ ../products/product.jar#ProductEJB
- ../products/product.jar#ProductEJB
-
- ]]>
+ ]]>
@@ -778,7 +788,8 @@
-
+
+
@@ -789,24 +800,23 @@
home or to the local business interface of a 3.0 bean.
The declaration consists of:
- - an optional description
- - the EJB reference name used in the code of the Deployment
- Component that's referencing the enterprise bean.
- - the optional expected type of the referenced enterprise bean
- - the optional expected local interface of the referenced
- enterprise bean or the local business interface of the
- referenced enterprise bean.
- - the optional expected local home interface of the referenced
- enterprise bean. Not applicable if this ejb-local-ref refers
- to the local business interface of a 3.0 bean.
- - optional ejb-link information, used to specify the
- referenced enterprise bean
- - optional elements to define injection of the named enterprise
- bean into a component field or property.
+ - an optional description
+ - the EJB reference name used in the code of the Deployment
+ Component that's referencing the enterprise bean.
+ - the optional expected type of the referenced enterprise bean
+ - the optional expected local interface of the referenced
+ enterprise bean or the local business interface of the
+ referenced enterprise bean.
+ - the optional expected local home interface of the referenced
+ enterprise bean. Not applicable if this ejb-local-ref refers
+ to the local business interface of a 3.0 bean.
+ - optional ejb-link information, used to specify the
+ referenced enterprise bean
+ - optional elements to define injection of the named enterprise
+ bean into a component field or property.
-
-
+
-
+
+
ejb/Payroll
+ ejb/Payroll
- ]]>
+ ]]>
@@ -858,7 +869,8 @@
-
+
+
@@ -869,26 +881,24 @@
to the remote business interface of a 3.0 bean.
The declaration consists of:
- - an optional description
- - the EJB reference name used in the code of
- the Deployment Component that's referencing the enterprise
- bean.
- - the optional expected type of the referenced enterprise bean
- - the optional remote interface of the referenced enterprise bean
- or the remote business interface of the referenced enterprise
- bean
- - the optional expected home interface of the referenced
- enterprise bean. Not applicable if this ejb-ref
- refers to the remote business interface of a 3.0 bean.
- - optional ejb-link information, used to specify the
- referenced enterprise bean
- - optional elements to define injection of the named enterprise
- bean into a component field or property
-
+ - an optional description
+ - the EJB reference name used in the code of
+ the Deployment Component that's referencing the enterprise
+ bean.
+ - the optional expected type of the referenced enterprise bean
+ - the optional remote interface of the referenced enterprise bean
+ or the remote business interface of the referenced enterprise
+ bean
+ - the optional expected home interface of the referenced
+ enterprise bean. Not applicable if this ejb-ref
+ refers to the remote business interface of a 3.0 bean.
+ - optional ejb-link information, used to specify the
+ referenced enterprise bean
+ - optional elements to define injection of the named enterprise
+ bean into a component field or property
-
-
+
-
+
+
@@ -925,8 +937,8 @@
The ejb-ref-type designates a value
that must be one of the following:
- Entity
- Session
+ Entity
+ Session
@@ -938,7 +950,8 @@
-
+
+
@@ -949,10 +962,12 @@
-
+
-
+
+
@@ -980,7 +995,6 @@
-
minAmount
- minAmount
-
- ]]>
+ ]]>
-
java.lang.Integer
+ java.lang.Integer
- ]]>
+ ]]>
-
100.00
+ 100.00
- ]]>
+ ]]>
-
-
-
+
-
+
+
java.lang.Boolean
+ java.lang.Class
+ com.example.Color
- java.lang.Boolean
- java.lang.Class
- com.example.Color
-
- ]]>
+ ]]>
@@ -1100,7 +1108,8 @@
-
+
+
@@ -1120,7 +1129,8 @@
-
+
+
@@ -1142,7 +1152,8 @@
-
+
+
@@ -1159,62 +1170,60 @@
-
-
employee-service-icon16x16.jpg
+ employee-service-icon16x16.jpg
- ]]>
+ ]]>
-
employee-service-icon32x32.jpg
- employee-service-icon32x32.jpg
-
- ]]>
+ ]]>
-
-
-
-
+
-
+
+
@@ -1248,18 +1257,16 @@
-
-
- The following transaction isolation levels are allowed
- (see documentation for the java.sql.Connection interface):
- TRANSACTION_READ_UNCOMMITTED
- TRANSACTION_READ_COMMITTED
- TRANSACTION_REPEATABLE_READ
- TRANSACTION_SERIALIZABLE
+ The following transaction isolation levels are allowed
+ (see documentation for the java.sql.Connection interface):
+ TRANSACTION_READ_UNCOMMITTED
+ TRANSACTION_READ_COMMITTED
+ TRANSACTION_REPEATABLE_READ
+ TRANSACTION_SERIALIZABLE
@@ -1271,7 +1278,8 @@
-
+
+
@@ -1290,7 +1298,8 @@
-
+
+
@@ -1309,33 +1318,34 @@
-
+
+
- :
+ jdbc::
Example:
- jdbc:mysql://localhost:3307/testdb
+ jdbc:mysql://localhost:3307/testdb
- ]]>
+ ]]>
-
+
+
@@ -1375,11 +1385,11 @@
- Fully-qualified name of the JMS connection factory
- interface. Permitted values are javax.jms.ConnectionFactory,
- javax.jms.QueueConnectionFactory, or
- javax.jms.TopicConnectionFactory. If not specified,
- javax.jms.ConnectionFactory will be used.
+ Fully-qualified name of the JMS connection factory
+ interface. Permitted values are javax.jms.ConnectionFactory,
+ javax.jms.QueueConnectionFactory, or
+ javax.jms.TopicConnectionFactory. If not specified,
+ javax.jms.ConnectionFactory will be used.
@@ -1390,9 +1400,9 @@
- Fully-qualified name of the JMS connection factory
- implementation class. Ignored if a resource adapter
- is used.
+ Fully-qualified name of the JMS connection factory
+ implementation class. Ignored if a resource adapter
+ is used.
@@ -1536,8 +1546,8 @@
- Fully-qualified name of the JMS destination interface.
- Permitted values are javax.jms.Queue and javax.jms.Topic
+ Fully-qualified name of the JMS destination interface.
+ Permitted values are javax.jms.Queue and javax.jms.Topic
@@ -1548,10 +1558,10 @@
- Fully-qualified name of the JMS destination implementation
- class. Ignored if a resource adapter is used unless the
- resource adapter defines more than one destination implementation
- class for the specified interface.
+ Fully-qualified name of the JMS destination implementation
+ class. Ignored if a resource adapter is used unless the
+ resource adapter defines more than one destination implementation
+ class for the specified interface.
@@ -1599,8 +1609,7 @@
-
-
+
@@ -1618,21 +1627,21 @@
-
+
+
com.aardvark.payroll.PayrollHome
+ com.aardvark.payroll.PayrollHome
- ]]>
+ ]]>
@@ -1641,7 +1650,7 @@
-
+
@@ -1653,7 +1662,7 @@
method for any given event and that the method may not
be overloaded.
- If the lifecycle-callback-class element is missing then
+ If the lifefycle-callback-class element is missing then
the class defining the callback is assumed to be the
component class in scope at the place in the descriptor
in which the callback definition appears.
@@ -1669,7 +1678,8 @@
-
+
+
@@ -1680,7 +1690,6 @@
-
-
+
-
+
+
@@ -1716,7 +1727,8 @@
-
+
+
@@ -1732,6 +1744,7 @@
+
@@ -1782,7 +1795,7 @@
- Service provider store protocol implementation class
+ Service provider store protocol implementation class
@@ -1804,7 +1817,7 @@
- Service provider transport protocol implementation class
+ Service provider transport protocol implementation class
@@ -1872,7 +1885,7 @@
-
+
@@ -1883,7 +1896,6 @@
-
-
@@ -1913,10 +1924,12 @@
-
+
-
+
+
@@ -1941,48 +1954,48 @@
-
+
+
- myPersistenceContext
-
-
-
-
- myPersistenceContext
-
- PersistenceUnit1
-
- Extended
-
-
- ]]>
+ The persistence-context-ref element contains a declaration
+ of Deployment Component's reference to a persistence context
+ associated within a Deployment Component's
+ environment. It consists of:
+
+ - an optional description
+ - the persistence context reference name
+ - an optional persistence unit name. If not specified,
+ the default persistence unit is assumed.
+ - an optional specification as to whether
+ the persistence context type is Transaction or
+ Extended. If not specified, Transaction is assumed.
+ - an optional specification as to whether
+ the persistence context synchronization with the current
+ transaction is Synchronized or Unsynchronized. If not
+ specified, Synchronized is assumed.
+ - an optional list of persistence properties
+ - optional injection targets
+
+ Examples:
+
+
+ myPersistenceContext
+
+
+
+
+ myPersistenceContext
+
+ PersistenceUnit1
+
+ Extended
+
+
+ ]]>
@@ -2026,15 +2039,12 @@
-
-
-
-
-
-
-
+
-
+
+
@@ -2073,8 +2082,8 @@
The value of the persistence-context-synchronization element
must be one of the following:
- Synchronized
- Unsynchronized
+ Synchronized
+ Unsynchronized
@@ -2085,7 +2094,9 @@
-
+
+
+
@@ -2096,8 +2107,8 @@
The value of the persistence-context-type element must be
one of the following:
- Transaction
- Extended
+ Transaction
+ Extended
@@ -2109,6 +2120,7 @@
+
@@ -2119,7 +2131,6 @@
-
@@ -2128,42 +2139,43 @@
type="javaee:xsdStringType">
-
+
-
+
+
- myPersistenceUnit
-
-
+
+ myPersistenceUnit
+
+
-
- myPersistenceUnit
-
- PersistenceUnit1
-
-
+
+ myPersistenceUnit
+
+ PersistenceUnit1
+
+
- ]]>
+ ]]>
@@ -2207,29 +2219,27 @@
-
-
-
-
+
-
+
+
com.wombat.empl.EmployeeService
+ com.wombat.empl.EmployeeService
- ]]>
+ ]]>
@@ -2237,44 +2247,43 @@
-
+
+
- jms/StockQueue
-
- javax.jms.Queue
-
-
+
+ jms/StockQueue
+
+ javax.jms.Queue
+
+
- ]]>
+ ]]>
-
-
@@ -2310,52 +2318,50 @@
-
-
-
+
-
+
+
- jdbc/EmployeeAppDB
- javax.sql.DataSource
- Container
- Shareable
-
+
+ jdbc/EmployeeAppDB
+ javax.sql.DataSource
+ Container
+ Shareable
+
- ]]>
+ ]]>
-
-
@@ -2390,22 +2395,20 @@
-
-
-
-
-
+
-
+
+
@@ -2420,8 +2423,8 @@
The value must be one of the two following:
- Application
- Container
+ Application
+ Container
@@ -2433,7 +2436,8 @@
-
+
+
@@ -2444,8 +2448,8 @@
factory reference can be shared. The value, if specified,
must be one of the two following:
- Shareable
- Unshareable
+ Shareable
+ Unshareable
The default value is Shareable.
@@ -2459,7 +2463,8 @@
-
+
+
@@ -2471,7 +2476,6 @@
-
-
+
-
+
+
@@ -2495,37 +2501,35 @@
-
-
+
+
-
- This role includes all employees who are authorized
- to access the employee service application.
-
- employee
-
+
+
+ This role includes all employees who are authorized
+ to access the employee service application.
+
+ employee
+
- ]]>
+ ]]>
-
-
+
-
+
+
@@ -2553,7 +2559,6 @@
-
-
@@ -2588,10 +2592,12 @@
-
+
-
+
+
@@ -2603,12 +2609,14 @@
-
+
-
+
+
@@ -2620,12 +2628,14 @@
-
+
-
+
+
@@ -2637,12 +2647,14 @@
-
+
-
+
+
@@ -2654,12 +2666,14 @@
-
+
-
+
+
@@ -2671,12 +2685,14 @@
-
+
-
+
+
@@ -2688,12 +2704,14 @@
-
+
-
+
+
@@ -2705,12 +2723,14 @@
-
+
-
+
+
@@ -2722,12 +2742,14 @@
-
+
-
+
+
@@ -2743,12 +2765,14 @@
-
+
-
+
+
@@ -2769,7 +2793,8 @@
-
+
+
@@ -2790,36 +2815,36 @@
-
+
+
- CorporateStocks
-
-
+
+ CorporateStocks
+
+
- ]]>
+ ]]>
@@ -2842,89 +2867,85 @@
minOccurs="0">
-
-
- The JNDI name to be looked up to resolve the message destination.
+ The JNDI name to be looked up to resolve the message destination.
-
-
+
-
+
+
- jms/StockQueue
-
- javax.jms.Queue
-
- Consumes
-
- CorporateStocks
-
-
-
- ]]>
+ The message-destination-ref element contains a declaration
+ of Deployment Component's reference to a message destination
+ associated with a resource in Deployment Component's
+ environment. It consists of:
+
+ - an optional description
+ - the message destination reference name
+ - an optional message destination type
+ - an optional specification as to whether
+ the destination is used for
+ consuming or producing messages, or both.
+ if not specified, "both" is assumed.
+ - an optional link to the message destination
+ - optional injection targets
+
+ The message destination type must be supplied unless an
+ injection target is specified, in which case the type
+ of the target is used. If both are specified, the type
+ must be assignment compatible with the type of the injection
+ target.
+
+ Examples:
+
+
+ jms/StockQueue
+
+ javax.jms.Queue
+
+ Consumes
+
+ CorporateStocks
+
+
+
+ ]]>
@@ -2954,15 +2975,14 @@
-
-
-
-
+
-
+
+
@@ -2977,9 +2997,9 @@
The value of the message-destination-usage element must be
one of the following:
- Consumes
- Produces
- ConsumesProduces
+ Consumes
+ Produces
+ ConsumesProduces
@@ -2992,23 +3012,23 @@
-
+
+
javax.jms.Queue
-
+ javax.jms.Queue
+
- ]]>
+ ]]>
@@ -3016,7 +3036,8 @@
-
+
+
@@ -3049,7 +3070,8 @@
-
+
+
@@ -3061,9 +3083,9 @@
The value must be one of the following:
- NoTransaction
- LocalTransaction
- XATransaction
+ NoTransaction
+ LocalTransaction
+ XATransaction
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_1_2.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_1_2.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_web_services_1_2.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_1_2.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_1_3.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_1_3.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_web_services_1_3.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_1_3.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd
similarity index 96%
rename from src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd
index e32c5b7..34e7219 100644
--- a/src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd
+++ b/core/src/main/java/javax/servlet/resources/javaee_web_services_1_4.xsd
@@ -47,13 +47,9 @@
only if the new code is made subject to such option by the copyright
holder.
-
-
-
-
-
The Apache Software Foundation elects to include this software under the
CDDL license.
+
@@ -352,7 +348,7 @@
- To be used with JAX-RPC based runtime only.
+ To be used with JAX-RPC based runtime only.
@@ -364,7 +360,7 @@
- To be used with JAX-WS based runtime only.
+ To be used with JAX-WS based runtime only.
@@ -493,7 +489,7 @@
The jaxrpc-mapping-file element contains the name of a file that
- describes the JAX-RPC mapping between the Java interfaces used by
+ describes the JAX-RPC mapping between the Java interaces used by
the application and the WSDL description in the wsdl-file. The
file name is a relative path within the module.
@@ -538,17 +534,17 @@
EmployeeService
-
+ Example:
+ EmployeeService
+
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_client_1_2.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_2.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_web_services_client_1_2.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_2.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_client_1_3.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_3.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/javaee_web_services_client_1_3.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_3.xsd
diff --git a/src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd b/core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd
similarity index 94%
rename from src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd
rename to core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd
index fbd00ce..842d75e 100644
--- a/src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd
+++ b/core/src/main/java/javax/servlet/resources/javaee_web_services_client_1_4.xsd
@@ -47,13 +47,9 @@
only if the new code is made subject to such option by the copyright
holder.
-
-
-
-
-
The Apache Software Foundation elects to include this software under the
CDDL license.
+
@@ -153,7 +149,7 @@
The jaxrpc-mapping-file element contains the name of a file that
- describes the JAX-RPC mapping between the Java interfaces used by
+ describes the JAX-RPC mapping between the Java interaces used by
the application and the WSDL description in the wsdl-file. The
file name is a relative path within the module file.
@@ -200,13 +196,13 @@
- Declares the handler for a port-component. Handlers can
- access the init-param name/value pairs using the
- HandlerInfo interface. If port-name is not specified, the
- handler is assumed to be associated with all ports of the
- service.
+ Declares the handler for a port-component. Handlers can
+ access the init-param name/value pairs using the
+ HandlerInfo interface. If port-name is not specified, the
+ handler is assumed to be associated with all ports of the
+ service.
- To be used with JAX-RPC based runtime only.
+ To be used with JAX-RPC based runtime only.
@@ -218,7 +214,7 @@
- To be used with JAX-WS based runtime only.
+ To be used with JAX-WS based runtime only.
@@ -488,31 +484,31 @@
Exact Name: service-name-pattern="ns1:EchoService"
- In this case, handlers specified in this
- handler-chain element will apply to all ports with
- this exact service name. The namespace prefix must
- have been declared in a namespace declaration
- attribute in either the start-tag of the element
- where the prefix is used or in an an ancestor
- element (i.e. an element in whose content the
- prefixed markup occurs)
+ In this case, handlers specified in this
+ handler-chain element will apply to all ports with
+ this exact service name. The namespace prefix must
+ have been declared in a namespace declaration
+ attribute in either the start-tag of the element
+ where the prefix is used or in an an ancestor
+ element (i.e. an element in whose content the
+ prefixed markup occurs)
Pattern : service-name-pattern="ns1:EchoService*"
- In this case, handlers specified in this
- handler-chain element will apply to all ports whose
- Service names are like EchoService1, EchoServiceFoo
- etc. The namespace prefix must have been declared in
- a namespace declaration attribute in either the
- start-tag of the element where the prefix is used or
- in an an ancestor element (i.e. an element in whose
- content the prefixed markup occurs)
+ In this case, handlers specified in this
+ handler-chain element will apply to all ports whose
+ Service names are like EchoService1, EchoServiceFoo
+ etc. The namespace prefix must have been declared in
+ a namespace declaration attribute in either the
+ start-tag of the element where the prefix is used or
+ in an an ancestor element (i.e. an element in whose
+ content the prefixed markup occurs)
Wild Card : service-name-pattern="*"
- In this case, handlers specified in this handler-chain
- element will apply to ports of all service names.
+ In this case, handlers specified in this handler-chain
+ element will apply to ports of all service names.
The same can be applied to port-name attribute in
handler-chain element.
diff --git a/src/main/java/javax/servlet/resources/jsp_2_0.xsd b/core/src/main/java/javax/servlet/resources/jsp_2_0.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/jsp_2_0.xsd
rename to core/src/main/java/javax/servlet/resources/jsp_2_0.xsd
diff --git a/src/main/java/javax/servlet/resources/jsp_2_1.xsd b/core/src/main/java/javax/servlet/resources/jsp_2_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/jsp_2_1.xsd
rename to core/src/main/java/javax/servlet/resources/jsp_2_1.xsd
diff --git a/src/main/java/javax/servlet/resources/jsp_2_2.xsd b/core/src/main/java/javax/servlet/resources/jsp_2_2.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/jsp_2_2.xsd
rename to core/src/main/java/javax/servlet/resources/jsp_2_2.xsd
diff --git a/src/main/java/javax/servlet/resources/jsp_2_3.xsd b/core/src/main/java/javax/servlet/resources/jsp_2_3.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/jsp_2_3.xsd
rename to core/src/main/java/javax/servlet/resources/jsp_2_3.xsd
diff --git a/src/main/java/javax/servlet/resources/web-app_2_2.dtd b/core/src/main/java/javax/servlet/resources/web-app_2_2.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_2_2.dtd
rename to core/src/main/java/javax/servlet/resources/web-app_2_2.dtd
diff --git a/src/main/java/javax/servlet/resources/web-app_2_3.dtd b/core/src/main/java/javax/servlet/resources/web-app_2_3.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_2_3.dtd
rename to core/src/main/java/javax/servlet/resources/web-app_2_3.dtd
diff --git a/src/main/java/javax/servlet/resources/web-app_2_4.xsd b/core/src/main/java/javax/servlet/resources/web-app_2_4.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_2_4.xsd
rename to core/src/main/java/javax/servlet/resources/web-app_2_4.xsd
diff --git a/src/main/java/javax/servlet/resources/web-app_2_5.xsd b/core/src/main/java/javax/servlet/resources/web-app_2_5.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_2_5.xsd
rename to core/src/main/java/javax/servlet/resources/web-app_2_5.xsd
diff --git a/src/main/java/javax/servlet/resources/web-app_3_0.xsd b/core/src/main/java/javax/servlet/resources/web-app_3_0.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_3_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-app_3_0.xsd
diff --git a/src/main/java/javax/servlet/resources/web-app_3_1.xsd b/core/src/main/java/javax/servlet/resources/web-app_3_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-app_3_1.xsd
rename to core/src/main/java/javax/servlet/resources/web-app_3_1.xsd
diff --git a/src/main/java/javax/servlet/resources/web-app_4_0.xsd b/core/src/main/java/javax/servlet/resources/web-app_4_0.xsd
similarity index 62%
rename from src/main/java/javax/servlet/resources/web-app_4_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-app_4_0.xsd
index ce26c8f..083252e 100644
--- a/src/main/java/javax/servlet/resources/web-app_4_0.xsd
+++ b/core/src/main/java/javax/servlet/resources/web-app_4_0.xsd
@@ -1,48 +1,4 @@
-
-
-
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ Copyright (c) 2009-2017 Oracle and/or its affiliates. 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_1_1.html
+ or packager/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 packager/legal/LICENSE.txt.
+
+ GPL Classpath Exception:
+ Oracle designates this particular file as subject to the "Classpath"
+ exception as provided by Oracle in the GPL Version 2 section of the License
+ file that accompanied this code.
+
+ Modifications:
+ If applicable, add the following below the License Header, with the fields
+ enclosed by brackets [] replaced by your own identifying information:
+ "Portions Copyright [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 Apache Software Foundation elects to include this software under the
+ CDDL license.
+
+ ...
+
-
- ...
-
+ The instance documents may indicate the published version of
+ the schema using the xsi:schemaLocation attribute for Java EE
+ namespace with the following location:
- The instance documents may indicate the published version of
- the schema using the xsi:schemaLocation attribute for Java EE
- namespace with the following location:
+ http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd
- http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd
-
- ]]>
+ ]]>
-
+
+ The following conventions apply to all Java EE
+ 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.
+
-
-
-
-
+
+
+
@@ -122,7 +129,6 @@
-
@@ -133,9 +139,8 @@
-
+
-
@@ -146,9 +151,8 @@
-
+
-
@@ -164,9 +168,8 @@
-
+
-
@@ -182,9 +185,8 @@
-
+
-
@@ -198,9 +200,8 @@
-
+
-
@@ -214,10 +215,8 @@
-
+
-
-
@@ -230,9 +229,8 @@
-
+
-
@@ -244,11 +242,9 @@
-
-
+
-
@@ -259,9 +255,8 @@
-
+
-
@@ -273,10 +268,11 @@
-
+
+
@@ -286,45 +282,53 @@
type="javaee:string"
minOccurs="0"/>
-
+
When specified, this element provides a default context path
- of the web application. The default context path starts
- with a / character. If it is not rooted at the root of the
- server's name space, the path does not end with a / character.
+ of the web application. An empty value for this element must cause
+ the web application to be deployed at the root for the container.
+ Otherwise, the default context path must start with
+ a “/“ character but not end with a “/“ character.
+ Servlet containers may provide vendor specific configuration
+ options that allows specifying a value that overrides the value
+ specified here.
-
+
When specified, this element provides a default request
- encoding of the web application.
+ character encoding of the web application.
-
+
When specified, this element provides a default response
- encoding of the web application.
+ character encoding of the web application.
-
+
When specified, this element causes uncovered http methods
to be denied. For every url-pattern that is the target of a
- security-constraint, this element causes all HTTP methods that
+ security-constrant, this element causes all HTTP methods that
are NOT covered (by a security constraint) at the url-pattern
to be denied.
@@ -337,6 +341,7 @@
+
diff --git a/src/main/java/javax/servlet/resources/web-common_3_0.xsd b/core/src/main/java/javax/servlet/resources/web-common_3_0.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-common_3_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-common_3_0.xsd
diff --git a/src/main/java/javax/servlet/resources/web-common_3_1.xsd b/core/src/main/java/javax/servlet/resources/web-common_3_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-common_3_1.xsd
rename to core/src/main/java/javax/servlet/resources/web-common_3_1.xsd
diff --git a/src/main/java/javax/servlet/resources/web-common_4_0.xsd b/core/src/main/java/javax/servlet/resources/web-common_4_0.xsd
similarity index 91%
rename from src/main/java/javax/servlet/resources/web-common_4_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-common_4_0.xsd
index e87a1e0..35e077b 100644
--- a/src/main/java/javax/servlet/resources/web-common_4_0.xsd
+++ b/core/src/main/java/javax/servlet/resources/web-common_4_0.xsd
@@ -1,48 +1,4 @@
-
-
-
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ Copyright (c) 2009-2017 Oracle and/or its affiliates. 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_1_1.html
+ or packager/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 packager/legal/LICENSE.txt.
+
+ GPL Classpath Exception:
+ Oracle designates this particular file as subject to the "Classpath"
+ exception as provided by Oracle in the GPL Version 2 section of the License
+ file that accompanied this code.
+
+ Modifications:
+ If applicable, add the following below the License Header, with the fields
+ enclosed by brackets [] replaced by your own identifying information:
+ "Portions Copyright [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 Apache Software Foundation elects to include this software under the
+ CDDL license.
+
- ...
-
+
+ ...
+
- The instance documents may indicate the published version of
- the schema using the xsi:schemaLocation attribute for Java EE
- namespace with the following location:
+ The instance documents may indicate the published version of
+ the schema using the xsi:schemaLocation attribute for Java EE
+ namespace with the following location:
- http://xmlns.jcp.org/xml/ns/javaee/web-common_4_0.xsd
+ http://xmlns.jcp.org/xml/ns/javaee/web-common_4_0.xsd
- ]]>
+ ]]>
-
-
-
+ The following conventions apply to all Java EE
+ 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.
+
+
+
-
-
+
@@ -120,7 +123,6 @@
-
-
-
-
@@ -192,6 +191,7 @@
+
@@ -213,7 +213,6 @@
-
+
@@ -246,12 +246,12 @@
-
+
@@ -278,7 +278,6 @@
-
@@ -290,6 +289,7 @@
+
@@ -302,7 +302,6 @@
-
@@ -312,6 +311,7 @@
+
@@ -336,7 +336,6 @@
-
@@ -354,7 +353,6 @@
-
@@ -373,6 +371,7 @@
type="xsd:ID"/>
+
@@ -390,7 +389,6 @@
-
-
+
@@ -453,7 +451,6 @@
-
@@ -473,13 +470,16 @@
type="xsd:ID"/>
+
+
This type defines a string which contains at least one
character.
+
@@ -489,6 +489,7 @@
+
@@ -504,12 +505,12 @@
-
+
@@ -524,9 +525,7 @@
-
-
@@ -540,7 +539,6 @@
-
@@ -555,44 +553,35 @@
-
-
-
-
A HTTP method type as defined in HTTP 1.1 section 2.2.
-
-
+
-
-
-
-
-
+
@@ -608,7 +597,6 @@
-
+
@@ -646,7 +635,6 @@
-
@@ -656,7 +644,6 @@
-
+
@@ -681,7 +669,6 @@
-
@@ -689,6 +676,7 @@
+
@@ -703,7 +691,6 @@
-
+
@@ -739,7 +727,6 @@
-
-
-
-
+
@@ -828,7 +813,6 @@
-
@@ -837,7 +821,8 @@
minOccurs="1"
maxOccurs="unbounded"/>
-
+
@@ -853,12 +838,12 @@
-
+
@@ -872,7 +857,6 @@
-
+
@@ -935,7 +920,6 @@
-
+
@@ -1047,12 +1032,12 @@
-
+
@@ -1066,12 +1051,12 @@
-
+
@@ -1085,12 +1070,12 @@
-
+
@@ -1104,12 +1089,12 @@
-
+
@@ -1123,7 +1108,6 @@
-
@@ -1133,6 +1117,7 @@
+
@@ -1156,7 +1141,6 @@
-
@@ -1166,6 +1150,7 @@
+
@@ -1180,7 +1165,6 @@
-
-
+
+
@@ -1212,8 +1197,6 @@
-
-
@@ -1229,6 +1212,7 @@
+
@@ -1249,7 +1233,6 @@
-
@@ -1277,8 +1260,10 @@
maxOccurs="unbounded">
+
Each http-method names an HTTP method to which the
constraint applies.
+
@@ -1288,8 +1273,10 @@
maxOccurs="unbounded">
+
Each http-method-omission names an HTTP method to
which the constraint does not apply.
+
@@ -1299,6 +1286,7 @@
type="xsd:ID"/>
+
@@ -1312,7 +1300,6 @@
-
-
-
@@ -1342,14 +1327,11 @@
-
-
-
@@ -1358,12 +1340,12 @@
-
+
@@ -1375,7 +1357,6 @@
-
+
@@ -1398,7 +1380,6 @@
-
@@ -1409,6 +1390,7 @@
type="xsd:ID"/>
+
@@ -1427,6 +1409,7 @@
type="xsd:ID"/>
+
@@ -1445,7 +1428,9 @@
maxOccurs="1">
+
The directory location where uploaded files will be stored
+
@@ -1455,7 +1440,9 @@
maxOccurs="1">
+
The maximum size limit of uploaded files
+
@@ -1465,7 +1452,9 @@
maxOccurs="1">
+
The maximum size limit of multipart/form-data requests
+
@@ -1475,8 +1464,10 @@
maxOccurs="1">
+
The size threshold after which an uploaded file will be
written to disk
+
diff --git a/src/main/java/javax/servlet/resources/web-fragment_3_0.xsd b/core/src/main/java/javax/servlet/resources/web-fragment_3_0.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-fragment_3_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-fragment_3_0.xsd
diff --git a/src/main/java/javax/servlet/resources/web-fragment_3_1.xsd b/core/src/main/java/javax/servlet/resources/web-fragment_3_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-fragment_3_1.xsd
rename to core/src/main/java/javax/servlet/resources/web-fragment_3_1.xsd
diff --git a/src/main/java/javax/servlet/resources/web-fragment_4_0.xsd b/core/src/main/java/javax/servlet/resources/web-fragment_4_0.xsd
similarity index 66%
rename from src/main/java/javax/servlet/resources/web-fragment_4_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-fragment_4_0.xsd
index fd07ccb..c8fbdd8 100644
--- a/src/main/java/javax/servlet/resources/web-fragment_4_0.xsd
+++ b/core/src/main/java/javax/servlet/resources/web-fragment_4_0.xsd
@@ -1,48 +1,4 @@
-
-
-
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+ Copyright (c) 2009-2017 Oracle and/or its affiliates. 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_1_1.html
+ or packager/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 packager/legal/LICENSE.txt.
+
+ GPL Classpath Exception:
+ Oracle designates this particular file as subject to the "Classpath"
+ exception as provided by Oracle in the GPL Version 2 section of the License
+ file that accompanied this code.
+
+ Modifications:
+ If applicable, add the following below the License Header, with the fields
+ enclosed by brackets [] replaced by your own identifying information:
+ "Portions Copyright [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 Apache Software Foundation elects to include this software under the
+ CDDL license.
+
- ...
-
+
+ ...
+
- The instance documents may indicate the published version of
- the schema using the xsi:schemaLocation attribute for Java EE
- namespace with the following location:
+ The instance documents may indicate the published version of
+ the schema using the xsi:schemaLocation attribute for Java EE
+ namespace with the following location:
- http://xmlns.jcp.org/xml/ns/javaee/web-fragment_4_0.xsd
+ http://xmlns.jcp.org/xml/ns/javaee/web-fragment_4_0.xsd
- ]]>
+ ]]>
-
+
+ The following conventions apply to all Java EE
+ 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.
+
-
-
-
-
+
+
+
@@ -122,7 +129,6 @@
-
@@ -133,9 +139,8 @@
-
+
-
@@ -146,9 +151,8 @@
-
+
-
@@ -164,9 +168,8 @@
-
+
-
@@ -182,9 +185,8 @@
-
+
-
@@ -198,9 +200,8 @@
-
+
-
@@ -214,10 +215,8 @@
-
+
-
-
@@ -230,9 +229,8 @@
-
+
-
@@ -244,11 +242,9 @@
-
-
+
-
@@ -259,9 +255,8 @@
-
+
-
@@ -273,10 +268,11 @@
-
+
+
@@ -291,6 +287,7 @@
+
@@ -313,6 +310,7 @@
+
diff --git a/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_1.dtd b/core/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_1.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-jsptaglibrary_1_1.dtd
rename to core/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_1.dtd
diff --git a/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_2.dtd b/core/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_2.dtd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-jsptaglibrary_1_2.dtd
rename to core/src/main/java/javax/servlet/resources/web-jsptaglibrary_1_2.dtd
diff --git a/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_0.xsd b/core/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_0.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-jsptaglibrary_2_0.xsd
rename to core/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_0.xsd
diff --git a/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_1.xsd b/core/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_1.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/web-jsptaglibrary_2_1.xsd
rename to core/src/main/java/javax/servlet/resources/web-jsptaglibrary_2_1.xsd
diff --git a/src/main/java/javax/servlet/resources/xml.xsd b/core/src/main/java/javax/servlet/resources/xml.xsd
similarity index 100%
rename from src/main/java/javax/servlet/resources/xml.xsd
rename to core/src/main/java/javax/servlet/resources/xml.xsd
diff --git a/src/main/java/javax/websocket/ClientEndpoint.java b/core/src/main/java/javax/websocket/ClientEndpoint.java
similarity index 100%
rename from src/main/java/javax/websocket/ClientEndpoint.java
rename to core/src/main/java/javax/websocket/ClientEndpoint.java
diff --git a/src/main/java/javax/websocket/ClientEndpointConfig.java b/core/src/main/java/javax/websocket/ClientEndpointConfig.java
similarity index 100%
rename from src/main/java/javax/websocket/ClientEndpointConfig.java
rename to core/src/main/java/javax/websocket/ClientEndpointConfig.java
diff --git a/src/main/java/javax/websocket/CloseReason.java b/core/src/main/java/javax/websocket/CloseReason.java
similarity index 100%
rename from src/main/java/javax/websocket/CloseReason.java
rename to core/src/main/java/javax/websocket/CloseReason.java
diff --git a/src/main/java/javax/websocket/ContainerProvider.java b/core/src/main/java/javax/websocket/ContainerProvider.java
similarity index 90%
rename from src/main/java/javax/websocket/ContainerProvider.java
rename to core/src/main/java/javax/websocket/ContainerProvider.java
index 8bad8d1..f95c9ad 100644
--- a/src/main/java/javax/websocket/ContainerProvider.java
+++ b/core/src/main/java/javax/websocket/ContainerProvider.java
@@ -16,7 +16,6 @@
*/
package javax.websocket;
-import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.ServiceLoader;
@@ -52,8 +51,7 @@ public static WebSocketContainer getWebSocketContainer() {
(Class) Class.forName(
DEFAULT_PROVIDER_CLASS_NAME);
result = clazz.getConstructor().newInstance();
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
- IllegalArgumentException | InvocationTargetException | NoSuchMethodException |
+ } catch (ReflectiveOperationException | IllegalArgumentException |
SecurityException e) {
// No options left. Just return null.
}
diff --git a/src/main/java/javax/websocket/DecodeException.java b/core/src/main/java/javax/websocket/DecodeException.java
similarity index 100%
rename from src/main/java/javax/websocket/DecodeException.java
rename to core/src/main/java/javax/websocket/DecodeException.java
diff --git a/src/main/java/javax/websocket/Decoder.java b/core/src/main/java/javax/websocket/Decoder.java
similarity index 100%
rename from src/main/java/javax/websocket/Decoder.java
rename to core/src/main/java/javax/websocket/Decoder.java
diff --git a/src/main/java/javax/websocket/DefaultClientEndpointConfig.java b/core/src/main/java/javax/websocket/DefaultClientEndpointConfig.java
similarity index 100%
rename from src/main/java/javax/websocket/DefaultClientEndpointConfig.java
rename to core/src/main/java/javax/websocket/DefaultClientEndpointConfig.java
diff --git a/src/main/java/javax/websocket/DeploymentException.java b/core/src/main/java/javax/websocket/DeploymentException.java
similarity index 100%
rename from src/main/java/javax/websocket/DeploymentException.java
rename to core/src/main/java/javax/websocket/DeploymentException.java
diff --git a/src/main/java/javax/websocket/EncodeException.java b/core/src/main/java/javax/websocket/EncodeException.java
similarity index 100%
rename from src/main/java/javax/websocket/EncodeException.java
rename to core/src/main/java/javax/websocket/EncodeException.java
diff --git a/src/main/java/javax/websocket/Encoder.java b/core/src/main/java/javax/websocket/Encoder.java
similarity index 100%
rename from src/main/java/javax/websocket/Encoder.java
rename to core/src/main/java/javax/websocket/Encoder.java
diff --git a/src/main/java/javax/websocket/Endpoint.java b/core/src/main/java/javax/websocket/Endpoint.java
similarity index 100%
rename from src/main/java/javax/websocket/Endpoint.java
rename to core/src/main/java/javax/websocket/Endpoint.java
diff --git a/src/main/java/javax/websocket/EndpointConfig.java b/core/src/main/java/javax/websocket/EndpointConfig.java
similarity index 100%
rename from src/main/java/javax/websocket/EndpointConfig.java
rename to core/src/main/java/javax/websocket/EndpointConfig.java
diff --git a/src/main/java/javax/websocket/Extension.java b/core/src/main/java/javax/websocket/Extension.java
similarity index 100%
rename from src/main/java/javax/websocket/Extension.java
rename to core/src/main/java/javax/websocket/Extension.java
diff --git a/src/main/java/javax/websocket/HandshakeResponse.java b/core/src/main/java/javax/websocket/HandshakeResponse.java
similarity index 100%
rename from src/main/java/javax/websocket/HandshakeResponse.java
rename to core/src/main/java/javax/websocket/HandshakeResponse.java
diff --git a/src/main/java/javax/websocket/MessageHandler.java b/core/src/main/java/javax/websocket/MessageHandler.java
similarity index 100%
rename from src/main/java/javax/websocket/MessageHandler.java
rename to core/src/main/java/javax/websocket/MessageHandler.java
diff --git a/src/main/java/javax/websocket/OnClose.java b/core/src/main/java/javax/websocket/OnClose.java
similarity index 100%
rename from src/main/java/javax/websocket/OnClose.java
rename to core/src/main/java/javax/websocket/OnClose.java
diff --git a/src/main/java/javax/websocket/OnError.java b/core/src/main/java/javax/websocket/OnError.java
similarity index 100%
rename from src/main/java/javax/websocket/OnError.java
rename to core/src/main/java/javax/websocket/OnError.java
diff --git a/src/main/java/javax/websocket/OnMessage.java b/core/src/main/java/javax/websocket/OnMessage.java
similarity index 100%
rename from src/main/java/javax/websocket/OnMessage.java
rename to core/src/main/java/javax/websocket/OnMessage.java
diff --git a/src/main/java/javax/websocket/OnOpen.java b/core/src/main/java/javax/websocket/OnOpen.java
similarity index 100%
rename from src/main/java/javax/websocket/OnOpen.java
rename to core/src/main/java/javax/websocket/OnOpen.java
diff --git a/src/main/java/javax/websocket/PongMessage.java b/core/src/main/java/javax/websocket/PongMessage.java
similarity index 100%
rename from src/main/java/javax/websocket/PongMessage.java
rename to core/src/main/java/javax/websocket/PongMessage.java
diff --git a/src/main/java/javax/websocket/RemoteEndpoint.java b/core/src/main/java/javax/websocket/RemoteEndpoint.java
similarity index 100%
rename from src/main/java/javax/websocket/RemoteEndpoint.java
rename to core/src/main/java/javax/websocket/RemoteEndpoint.java
diff --git a/src/main/java/javax/websocket/SendHandler.java b/core/src/main/java/javax/websocket/SendHandler.java
similarity index 100%
rename from src/main/java/javax/websocket/SendHandler.java
rename to core/src/main/java/javax/websocket/SendHandler.java
diff --git a/src/main/java/javax/websocket/SendResult.java b/core/src/main/java/javax/websocket/SendResult.java
similarity index 100%
rename from src/main/java/javax/websocket/SendResult.java
rename to core/src/main/java/javax/websocket/SendResult.java
diff --git a/src/main/java/javax/websocket/Session.java b/core/src/main/java/javax/websocket/Session.java
similarity index 100%
rename from src/main/java/javax/websocket/Session.java
rename to core/src/main/java/javax/websocket/Session.java
diff --git a/src/main/java/javax/websocket/SessionException.java b/core/src/main/java/javax/websocket/SessionException.java
similarity index 100%
rename from src/main/java/javax/websocket/SessionException.java
rename to core/src/main/java/javax/websocket/SessionException.java
diff --git a/src/main/java/javax/websocket/WebSocketContainer.java b/core/src/main/java/javax/websocket/WebSocketContainer.java
similarity index 100%
rename from src/main/java/javax/websocket/WebSocketContainer.java
rename to core/src/main/java/javax/websocket/WebSocketContainer.java
diff --git a/src/main/java/javax/websocket/server/DefaultServerEndpointConfig.java b/core/src/main/java/javax/websocket/server/DefaultServerEndpointConfig.java
similarity index 100%
rename from src/main/java/javax/websocket/server/DefaultServerEndpointConfig.java
rename to core/src/main/java/javax/websocket/server/DefaultServerEndpointConfig.java
diff --git a/src/main/java/javax/websocket/server/HandshakeRequest.java b/core/src/main/java/javax/websocket/server/HandshakeRequest.java
similarity index 100%
rename from src/main/java/javax/websocket/server/HandshakeRequest.java
rename to core/src/main/java/javax/websocket/server/HandshakeRequest.java
diff --git a/src/main/java/javax/websocket/server/PathParam.java b/core/src/main/java/javax/websocket/server/PathParam.java
similarity index 100%
rename from src/main/java/javax/websocket/server/PathParam.java
rename to core/src/main/java/javax/websocket/server/PathParam.java
diff --git a/src/main/java/javax/websocket/server/ServerApplicationConfig.java b/core/src/main/java/javax/websocket/server/ServerApplicationConfig.java
similarity index 100%
rename from src/main/java/javax/websocket/server/ServerApplicationConfig.java
rename to core/src/main/java/javax/websocket/server/ServerApplicationConfig.java
diff --git a/src/main/java/javax/websocket/server/ServerContainer.java b/core/src/main/java/javax/websocket/server/ServerContainer.java
similarity index 100%
rename from src/main/java/javax/websocket/server/ServerContainer.java
rename to core/src/main/java/javax/websocket/server/ServerContainer.java
diff --git a/src/main/java/javax/websocket/server/ServerEndpoint.java b/core/src/main/java/javax/websocket/server/ServerEndpoint.java
similarity index 100%
rename from src/main/java/javax/websocket/server/ServerEndpoint.java
rename to core/src/main/java/javax/websocket/server/ServerEndpoint.java
diff --git a/src/main/java/javax/websocket/server/ServerEndpointConfig.java b/core/src/main/java/javax/websocket/server/ServerEndpointConfig.java
similarity index 96%
rename from src/main/java/javax/websocket/server/ServerEndpointConfig.java
rename to core/src/main/java/javax/websocket/server/ServerEndpointConfig.java
index c1ce558..50b6341 100644
--- a/src/main/java/javax/websocket/server/ServerEndpointConfig.java
+++ b/core/src/main/java/javax/websocket/server/ServerEndpointConfig.java
@@ -16,7 +16,6 @@
*/
package javax.websocket.server;
-import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -177,9 +176,8 @@ private static Configurator loadDefault() {
(Class) Class.forName(
DEFAULT_IMPL_CLASSNAME);
result = clazz.getConstructor().newInstance();
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
- IllegalArgumentException | InvocationTargetException |
- NoSuchMethodException | SecurityException e) {
+ } catch (ReflectiveOperationException | IllegalArgumentException |
+ SecurityException e) {
// No options left. Just return null.
}
}
diff --git a/core/src/main/java/javax/xml/ws/WebServiceRef.java b/core/src/main/java/javax/xml/ws/WebServiceRef.java
new file mode 100644
index 0000000..28b150e
--- /dev/null
+++ b/core/src/main/java/javax/xml/ws/WebServiceRef.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+
+package javax.xml.ws;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface WebServiceRef {
+ public String name() default "";
+ @SuppressWarnings("rawtypes") // Can't use Class> because API needs to match specification
+ public Class type() default java.lang.Object.class;
+ @SuppressWarnings("rawtypes") // Can't use Class> because API needs to match specification
+ public Class value() default java.lang.Object.class;
+ public String wsdlLocation() default "";
+ public String mappedName() default "";
+}
diff --git a/core/src/main/java/javax/xml/ws/WebServiceRefs.java b/core/src/main/java/javax/xml/ws/WebServiceRefs.java
new file mode 100644
index 0000000..e4f428c
--- /dev/null
+++ b/core/src/main/java/javax/xml/ws/WebServiceRefs.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+
+package javax.xml.ws;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface WebServiceRefs {
+ public WebServiceRef[] value();
+}
diff --git a/src/main/java/org/apache/catalina/AccessLog.java b/core/src/main/java/org/apache/catalina/AccessLog.java
similarity index 100%
rename from src/main/java/org/apache/catalina/AccessLog.java
rename to core/src/main/java/org/apache/catalina/AccessLog.java
diff --git a/src/main/java/org/apache/catalina/AsyncDispatcher.java b/core/src/main/java/org/apache/catalina/AsyncDispatcher.java
similarity index 100%
rename from src/main/java/org/apache/catalina/AsyncDispatcher.java
rename to core/src/main/java/org/apache/catalina/AsyncDispatcher.java
diff --git a/src/main/java/org/apache/catalina/Authenticator.java b/core/src/main/java/org/apache/catalina/Authenticator.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Authenticator.java
rename to core/src/main/java/org/apache/catalina/Authenticator.java
diff --git a/src/main/java/org/apache/catalina/Cluster.java b/core/src/main/java/org/apache/catalina/Cluster.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Cluster.java
rename to core/src/main/java/org/apache/catalina/Cluster.java
diff --git a/src/main/java/org/apache/catalina/Contained.java b/core/src/main/java/org/apache/catalina/Contained.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Contained.java
rename to core/src/main/java/org/apache/catalina/Contained.java
diff --git a/src/main/java/org/apache/catalina/Container.java b/core/src/main/java/org/apache/catalina/Container.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Container.java
rename to core/src/main/java/org/apache/catalina/Container.java
diff --git a/src/main/java/org/apache/catalina/ContainerEvent.java b/core/src/main/java/org/apache/catalina/ContainerEvent.java
similarity index 95%
rename from src/main/java/org/apache/catalina/ContainerEvent.java
rename to core/src/main/java/org/apache/catalina/ContainerEvent.java
index f17d422..b651356 100644
--- a/src/main/java/org/apache/catalina/ContainerEvent.java
+++ b/core/src/main/java/org/apache/catalina/ContainerEvent.java
@@ -90,7 +90,7 @@ public String getType() {
*/
@Override
public String toString() {
- return ("ContainerEvent['" + getContainer() + "','" +
- getType() + "','" + getData() + "']");
+ return "ContainerEvent['" + getContainer() + "','" +
+ getType() + "','" + getData() + "']";
}
}
diff --git a/src/main/java/org/apache/catalina/ContainerListener.java b/core/src/main/java/org/apache/catalina/ContainerListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ContainerListener.java
rename to core/src/main/java/org/apache/catalina/ContainerListener.java
diff --git a/src/main/java/org/apache/catalina/ContainerServlet.java b/core/src/main/java/org/apache/catalina/ContainerServlet.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ContainerServlet.java
rename to core/src/main/java/org/apache/catalina/ContainerServlet.java
diff --git a/src/main/java/org/apache/catalina/Context.java b/core/src/main/java/org/apache/catalina/Context.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Context.java
rename to core/src/main/java/org/apache/catalina/Context.java
diff --git a/src/main/java/org/apache/catalina/CredentialHandler.java b/core/src/main/java/org/apache/catalina/CredentialHandler.java
similarity index 100%
rename from src/main/java/org/apache/catalina/CredentialHandler.java
rename to core/src/main/java/org/apache/catalina/CredentialHandler.java
diff --git a/src/main/java/org/apache/catalina/DistributedManager.java b/core/src/main/java/org/apache/catalina/DistributedManager.java
similarity index 100%
rename from src/main/java/org/apache/catalina/DistributedManager.java
rename to core/src/main/java/org/apache/catalina/DistributedManager.java
diff --git a/src/main/java/org/apache/catalina/Engine.java b/core/src/main/java/org/apache/catalina/Engine.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Engine.java
rename to core/src/main/java/org/apache/catalina/Engine.java
diff --git a/src/main/java/org/apache/catalina/Executor.java b/core/src/main/java/org/apache/catalina/Executor.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Executor.java
rename to core/src/main/java/org/apache/catalina/Executor.java
diff --git a/src/main/java/org/apache/catalina/Globals.java b/core/src/main/java/org/apache/catalina/Globals.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Globals.java
rename to core/src/main/java/org/apache/catalina/Globals.java
diff --git a/src/main/java/org/apache/catalina/Group.java b/core/src/main/java/org/apache/catalina/Group.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Group.java
rename to core/src/main/java/org/apache/catalina/Group.java
diff --git a/src/main/java/org/apache/catalina/Host.java b/core/src/main/java/org/apache/catalina/Host.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Host.java
rename to core/src/main/java/org/apache/catalina/Host.java
diff --git a/src/main/java/org/apache/catalina/JmxEnabled.java b/core/src/main/java/org/apache/catalina/JmxEnabled.java
similarity index 100%
rename from src/main/java/org/apache/catalina/JmxEnabled.java
rename to core/src/main/java/org/apache/catalina/JmxEnabled.java
diff --git a/src/main/java/org/apache/catalina/Lifecycle.java b/core/src/main/java/org/apache/catalina/Lifecycle.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Lifecycle.java
rename to core/src/main/java/org/apache/catalina/Lifecycle.java
diff --git a/src/main/java/org/apache/catalina/LifecycleEvent.java b/core/src/main/java/org/apache/catalina/LifecycleEvent.java
similarity index 100%
rename from src/main/java/org/apache/catalina/LifecycleEvent.java
rename to core/src/main/java/org/apache/catalina/LifecycleEvent.java
diff --git a/src/main/java/org/apache/catalina/LifecycleException.java b/core/src/main/java/org/apache/catalina/LifecycleException.java
similarity index 100%
rename from src/main/java/org/apache/catalina/LifecycleException.java
rename to core/src/main/java/org/apache/catalina/LifecycleException.java
diff --git a/src/main/java/org/apache/catalina/LifecycleListener.java b/core/src/main/java/org/apache/catalina/LifecycleListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/LifecycleListener.java
rename to core/src/main/java/org/apache/catalina/LifecycleListener.java
diff --git a/src/main/java/org/apache/catalina/LifecycleState.java b/core/src/main/java/org/apache/catalina/LifecycleState.java
similarity index 100%
rename from src/main/java/org/apache/catalina/LifecycleState.java
rename to core/src/main/java/org/apache/catalina/LifecycleState.java
diff --git a/src/main/java/org/apache/catalina/Loader.java b/core/src/main/java/org/apache/catalina/Loader.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Loader.java
rename to core/src/main/java/org/apache/catalina/Loader.java
diff --git a/src/main/java/org/apache/catalina/Manager.java b/core/src/main/java/org/apache/catalina/Manager.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Manager.java
rename to core/src/main/java/org/apache/catalina/Manager.java
diff --git a/src/main/java/org/apache/catalina/Pipeline.java b/core/src/main/java/org/apache/catalina/Pipeline.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Pipeline.java
rename to core/src/main/java/org/apache/catalina/Pipeline.java
diff --git a/src/main/java/org/apache/catalina/Realm.java b/core/src/main/java/org/apache/catalina/Realm.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Realm.java
rename to core/src/main/java/org/apache/catalina/Realm.java
diff --git a/src/main/java/org/apache/catalina/Role.java b/core/src/main/java/org/apache/catalina/Role.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Role.java
rename to core/src/main/java/org/apache/catalina/Role.java
diff --git a/src/main/java/org/apache/catalina/Server.java b/core/src/main/java/org/apache/catalina/Server.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Server.java
rename to core/src/main/java/org/apache/catalina/Server.java
diff --git a/src/main/java/org/apache/catalina/Service.java b/core/src/main/java/org/apache/catalina/Service.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Service.java
rename to core/src/main/java/org/apache/catalina/Service.java
diff --git a/src/main/java/org/apache/catalina/Session.java b/core/src/main/java/org/apache/catalina/Session.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Session.java
rename to core/src/main/java/org/apache/catalina/Session.java
diff --git a/src/main/java/org/apache/catalina/SessionEvent.java b/core/src/main/java/org/apache/catalina/SessionEvent.java
similarity index 91%
rename from src/main/java/org/apache/catalina/SessionEvent.java
rename to core/src/main/java/org/apache/catalina/SessionEvent.java
index 7f77a86..209121e 100644
--- a/src/main/java/org/apache/catalina/SessionEvent.java
+++ b/core/src/main/java/org/apache/catalina/SessionEvent.java
@@ -71,9 +71,7 @@ public SessionEvent(Session session, String type, Object data) {
* @return the event data of this event.
*/
public Object getData() {
-
- return (this.data);
-
+ return this.data;
}
@@ -81,9 +79,7 @@ public Object getData() {
* @return the Session on which this event occurred.
*/
public Session getSession() {
-
- return (this.session);
-
+ return this.session;
}
@@ -91,18 +87,13 @@ public Session getSession() {
* @return the event type of this event.
*/
public String getType() {
-
- return (this.type);
-
+ return this.type;
}
@Override
public String toString() {
-
- return ("SessionEvent['" + getSession() + "','" +
- getType() + "']");
-
+ return "SessionEvent['" + getSession() + "','" + getType() + "']";
}
diff --git a/src/main/java/org/apache/catalina/SessionIdGenerator.java b/core/src/main/java/org/apache/catalina/SessionIdGenerator.java
similarity index 100%
rename from src/main/java/org/apache/catalina/SessionIdGenerator.java
rename to core/src/main/java/org/apache/catalina/SessionIdGenerator.java
diff --git a/src/main/java/org/apache/catalina/SessionListener.java b/core/src/main/java/org/apache/catalina/SessionListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/SessionListener.java
rename to core/src/main/java/org/apache/catalina/SessionListener.java
diff --git a/src/main/java/org/apache/catalina/Store.java b/core/src/main/java/org/apache/catalina/Store.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Store.java
rename to core/src/main/java/org/apache/catalina/Store.java
diff --git a/src/main/java/org/apache/catalina/StoreManager.java b/core/src/main/java/org/apache/catalina/StoreManager.java
similarity index 100%
rename from src/main/java/org/apache/catalina/StoreManager.java
rename to core/src/main/java/org/apache/catalina/StoreManager.java
diff --git a/src/main/java/org/apache/catalina/ThreadBindingListener.java b/core/src/main/java/org/apache/catalina/ThreadBindingListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ThreadBindingListener.java
rename to core/src/main/java/org/apache/catalina/ThreadBindingListener.java
diff --git a/src/main/java/org/apache/catalina/TomcatPrincipal.java b/core/src/main/java/org/apache/catalina/TomcatPrincipal.java
similarity index 100%
rename from src/main/java/org/apache/catalina/TomcatPrincipal.java
rename to core/src/main/java/org/apache/catalina/TomcatPrincipal.java
diff --git a/src/main/java/org/apache/catalina/TrackedWebResource.java b/core/src/main/java/org/apache/catalina/TrackedWebResource.java
similarity index 100%
rename from src/main/java/org/apache/catalina/TrackedWebResource.java
rename to core/src/main/java/org/apache/catalina/TrackedWebResource.java
diff --git a/src/main/java/org/apache/catalina/User.java b/core/src/main/java/org/apache/catalina/User.java
similarity index 100%
rename from src/main/java/org/apache/catalina/User.java
rename to core/src/main/java/org/apache/catalina/User.java
diff --git a/src/main/java/org/apache/catalina/UserDatabase.java b/core/src/main/java/org/apache/catalina/UserDatabase.java
similarity index 100%
rename from src/main/java/org/apache/catalina/UserDatabase.java
rename to core/src/main/java/org/apache/catalina/UserDatabase.java
diff --git a/src/main/java/org/apache/catalina/Valve.java b/core/src/main/java/org/apache/catalina/Valve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Valve.java
rename to core/src/main/java/org/apache/catalina/Valve.java
diff --git a/src/main/java/org/apache/catalina/WebResource.java b/core/src/main/java/org/apache/catalina/WebResource.java
similarity index 100%
rename from src/main/java/org/apache/catalina/WebResource.java
rename to core/src/main/java/org/apache/catalina/WebResource.java
diff --git a/src/main/java/org/apache/catalina/WebResourceRoot.java b/core/src/main/java/org/apache/catalina/WebResourceRoot.java
similarity index 99%
rename from src/main/java/org/apache/catalina/WebResourceRoot.java
rename to core/src/main/java/org/apache/catalina/WebResourceRoot.java
index 5a023c7..5acf0d1 100644
--- a/src/main/java/org/apache/catalina/WebResourceRoot.java
+++ b/core/src/main/java/org/apache/catalina/WebResourceRoot.java
@@ -430,7 +430,7 @@ void createWebResourceSet(ResourceSetType type, String webAppMount,
*/
void gc();
- static enum ResourceSetType {
+ enum ResourceSetType {
PRE,
RESOURCE_JAR,
POST,
diff --git a/src/main/java/org/apache/catalina/WebResourceSet.java b/core/src/main/java/org/apache/catalina/WebResourceSet.java
similarity index 100%
rename from src/main/java/org/apache/catalina/WebResourceSet.java
rename to core/src/main/java/org/apache/catalina/WebResourceSet.java
diff --git a/src/main/java/org/apache/catalina/Wrapper.java b/core/src/main/java/org/apache/catalina/Wrapper.java
similarity index 100%
rename from src/main/java/org/apache/catalina/Wrapper.java
rename to core/src/main/java/org/apache/catalina/Wrapper.java
diff --git a/src/main/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java b/core/src/main/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java
rename to core/src/main/java/org/apache/catalina/ant/AbstractCatalinaCommandTask.java
diff --git a/src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java b/core/src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java
similarity index 92%
rename from src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java
rename to core/src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java
index 8c2c491..07f0d3a 100644
--- a/src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java
+++ b/core/src/main/java/org/apache/catalina/ant/AbstractCatalinaTask.java
@@ -20,12 +20,12 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.net.Authenticator;
import java.net.HttpURLConnection;
+import java.net.PasswordAuthentication;
import java.net.URL;
import java.net.URLConnection;
-import java.nio.charset.StandardCharsets;
-import org.apache.tomcat.util.codec.binary.Base64;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -200,10 +200,8 @@ public void execute(String command, InputStream istream, String contentType, lon
}
hconn.setRequestProperty("User-Agent", "Catalina-Ant-Task/1.0");
- // Set up an authorization header with our credentials
- String input = username + ":" + password;
- String output = Base64.encodeBase64String(input.getBytes(StandardCharsets.ISO_8859_1));
- hconn.setRequestProperty("Authorization", "Basic " + output);
+ // Set up authorization with our credentials
+ Authenticator.setDefault(new TaskAuthenticator(username, password));
// Establish the connection with the server
hconn.connect();
@@ -211,7 +209,7 @@ public void execute(String command, InputStream istream, String contentType, lon
// Send the request data (if any)
if (istream != null) {
try (BufferedOutputStream ostream = new BufferedOutputStream(
- hconn.getOutputStream(), 1024);) {
+ hconn.getOutputStream(), 1024)) {
byte buffer[] = new byte[1024];
while (true) {
int n = istream.read(buffer);
@@ -292,4 +290,21 @@ public void execute(String command, InputStream istream, String contentType, lon
}
}
}
+
+
+ private static class TaskAuthenticator extends Authenticator {
+
+ private final String user;
+ private final String password;
+
+ private TaskAuthenticator(String user, String password) {
+ this.user = user;
+ this.password = password;
+ }
+
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(user, password.toCharArray());
+ }
+ }
}
diff --git a/src/main/java/org/apache/catalina/ant/BaseRedirectorHelperTask.java b/core/src/main/java/org/apache/catalina/ant/BaseRedirectorHelperTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/BaseRedirectorHelperTask.java
rename to core/src/main/java/org/apache/catalina/ant/BaseRedirectorHelperTask.java
diff --git a/src/main/java/org/apache/catalina/ant/DeployTask.java b/core/src/main/java/org/apache/catalina/ant/DeployTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/DeployTask.java
rename to core/src/main/java/org/apache/catalina/ant/DeployTask.java
diff --git a/src/main/java/org/apache/catalina/ant/FindLeaksTask.java b/core/src/main/java/org/apache/catalina/ant/FindLeaksTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/FindLeaksTask.java
rename to core/src/main/java/org/apache/catalina/ant/FindLeaksTask.java
diff --git a/src/main/java/org/apache/catalina/ant/JKStatusUpdateTask.java b/core/src/main/java/org/apache/catalina/ant/JKStatusUpdateTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/JKStatusUpdateTask.java
rename to core/src/main/java/org/apache/catalina/ant/JKStatusUpdateTask.java
diff --git a/src/main/java/org/apache/catalina/ant/JMXGetTask.java b/core/src/main/java/org/apache/catalina/ant/JMXGetTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/JMXGetTask.java
rename to core/src/main/java/org/apache/catalina/ant/JMXGetTask.java
diff --git a/src/main/java/org/apache/catalina/ant/JMXQueryTask.java b/core/src/main/java/org/apache/catalina/ant/JMXQueryTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/JMXQueryTask.java
rename to core/src/main/java/org/apache/catalina/ant/JMXQueryTask.java
diff --git a/src/main/java/org/apache/catalina/ant/JMXSetTask.java b/core/src/main/java/org/apache/catalina/ant/JMXSetTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/JMXSetTask.java
rename to core/src/main/java/org/apache/catalina/ant/JMXSetTask.java
diff --git a/src/main/java/org/apache/catalina/ant/ListTask.java b/core/src/main/java/org/apache/catalina/ant/ListTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/ListTask.java
rename to core/src/main/java/org/apache/catalina/ant/ListTask.java
diff --git a/src/main/java/org/apache/catalina/ant/ReloadTask.java b/core/src/main/java/org/apache/catalina/ant/ReloadTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/ReloadTask.java
rename to core/src/main/java/org/apache/catalina/ant/ReloadTask.java
diff --git a/src/main/java/org/apache/catalina/ant/ResourcesTask.java b/core/src/main/java/org/apache/catalina/ant/ResourcesTask.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ant/ResourcesTask.java
rename to core/src/main/java/org/apache/catalina/ant/ResourcesTask.java
index c0d57d6..db282cb 100644
--- a/src/main/java/org/apache/catalina/ant/ResourcesTask.java
+++ b/core/src/main/java/org/apache/catalina/ant/ResourcesTask.java
@@ -45,7 +45,7 @@ public class ResourcesTask extends AbstractCatalinaTask {
protected String type = null;
public String getType() {
- return (this.type);
+ return this.type;
}
public void setType(String type) {
diff --git a/src/main/java/org/apache/catalina/ant/ServerinfoTask.java b/core/src/main/java/org/apache/catalina/ant/ServerinfoTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/ServerinfoTask.java
rename to core/src/main/java/org/apache/catalina/ant/ServerinfoTask.java
diff --git a/src/main/java/org/apache/catalina/ant/SessionsTask.java b/core/src/main/java/org/apache/catalina/ant/SessionsTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/SessionsTask.java
rename to core/src/main/java/org/apache/catalina/ant/SessionsTask.java
diff --git a/src/main/java/org/apache/catalina/ant/SslConnectorCiphersTask.java b/core/src/main/java/org/apache/catalina/ant/SslConnectorCiphersTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/SslConnectorCiphersTask.java
rename to core/src/main/java/org/apache/catalina/ant/SslConnectorCiphersTask.java
diff --git a/src/main/java/org/apache/catalina/ant/StartTask.java b/core/src/main/java/org/apache/catalina/ant/StartTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/StartTask.java
rename to core/src/main/java/org/apache/catalina/ant/StartTask.java
diff --git a/src/main/java/org/apache/catalina/ant/StopTask.java b/core/src/main/java/org/apache/catalina/ant/StopTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/StopTask.java
rename to core/src/main/java/org/apache/catalina/ant/StopTask.java
diff --git a/src/main/java/org/apache/catalina/ant/ThreaddumpTask.java b/core/src/main/java/org/apache/catalina/ant/ThreaddumpTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/ThreaddumpTask.java
rename to core/src/main/java/org/apache/catalina/ant/ThreaddumpTask.java
diff --git a/src/main/java/org/apache/catalina/ant/UndeployTask.java b/core/src/main/java/org/apache/catalina/ant/UndeployTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/UndeployTask.java
rename to core/src/main/java/org/apache/catalina/ant/UndeployTask.java
diff --git a/src/main/java/org/apache/catalina/ant/ValidatorTask.java b/core/src/main/java/org/apache/catalina/ant/ValidatorTask.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ant/ValidatorTask.java
rename to core/src/main/java/org/apache/catalina/ant/ValidatorTask.java
index 3fa75cc..3fb8269 100644
--- a/src/main/java/org/apache/catalina/ant/ValidatorTask.java
+++ b/core/src/main/java/org/apache/catalina/ant/ValidatorTask.java
@@ -54,7 +54,7 @@ public class ValidatorTask extends BaseRedirectorHelperTask {
protected String path = null;
public String getPath() {
- return (this.path);
+ return this.path;
}
public void setPath(String path) {
@@ -93,7 +93,7 @@ public void execute() throws BuildException {
// SecurityManager assume that untrusted applications may be deployed.
Digester digester = DigesterFactory.newDigester(
true, true, null, Globals.IS_SECURITY_ENABLED);
- try (InputStream stream = new BufferedInputStream(new FileInputStream(file.getCanonicalFile()));) {
+ try (InputStream stream = new BufferedInputStream(new FileInputStream(file.getCanonicalFile()))) {
InputSource is = new InputSource(file.toURI().toURL().toExternalForm());
is.setByteStream(stream);
digester.parse(is);
diff --git a/src/main/java/org/apache/catalina/ant/VminfoTask.java b/core/src/main/java/org/apache/catalina/ant/VminfoTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/VminfoTask.java
rename to core/src/main/java/org/apache/catalina/ant/VminfoTask.java
diff --git a/src/main/java/org/apache/catalina/ant/antlib.xml b/core/src/main/java/org/apache/catalina/ant/antlib.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/antlib.xml
rename to core/src/main/java/org/apache/catalina/ant/antlib.xml
diff --git a/src/main/java/org/apache/catalina/ant/catalina.tasks b/core/src/main/java/org/apache/catalina/ant/catalina.tasks
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/catalina.tasks
rename to core/src/main/java/org/apache/catalina/ant/catalina.tasks
diff --git a/src/main/java/org/apache/catalina/ant/jmx/Arg.java b/core/src/main/java/org/apache/catalina/ant/jmx/Arg.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/Arg.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/Arg.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCondition.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCondition.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCondition.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCondition.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorConditionBase.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorConditionBase.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorConditionBase.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorConditionBase.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCreateTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCreateTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCreateTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorCreateTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorEqualsCondition.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorEqualsCondition.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorEqualsCondition.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorEqualsCondition.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorGetTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorInvokeTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java
similarity index 97%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java
index 903bd3c..8d5d268 100644
--- a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java
+++ b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorTask.java
@@ -23,7 +23,6 @@
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -131,7 +130,7 @@ public class JMXAccessorTask extends BaseRedirectorHelperTask {
* @return the name used at remote MbeanServer
*/
public String getName() {
- return (this.name);
+ return this.name;
}
public void setName(String objectName) {
@@ -200,7 +199,7 @@ public void setSeparatearrayresults(boolean separateArrayResults) {
* @return The login password for the Manager application.
*/
public String getPassword() {
- return (this.password);
+ return this.password;
}
public void setPassword(String password) {
@@ -211,7 +210,7 @@ public void setPassword(String password) {
* @return The login username for the JMX MBeanServer.
*/
public String getUsername() {
- return (this.username);
+ return this.username;
}
public void setUsername(String username) {
@@ -222,7 +221,7 @@ public void setUsername(String username) {
* @return The URL of the JMX JSR 160 MBeanServer to be used.
*/
public String getUrl() {
- return (this.url);
+ return this.url;
}
public void setUrl(String url) {
@@ -233,7 +232,7 @@ public void setUrl(String url) {
* @return The Host of the JMX JSR 160 MBeanServer to be used.
*/
public String getHost() {
- return (this.host);
+ return this.host;
}
public void setHost(String host) {
@@ -244,7 +243,7 @@ public void setHost(String host) {
* @return The Port of the JMX JSR 160 MBeanServer to be used.
*/
public String getPort() {
- return (this.port);
+ return this.port;
}
public void setPort(String port) {
@@ -617,8 +616,7 @@ protected void createProperty(String propertyPrefix, Object result) {
CompositeDataSupport data = (CompositeDataSupport) result;
CompositeType compositeType = data.getCompositeType();
Set keys = compositeType.keySet();
- for (Iterator iter = keys.iterator(); iter.hasNext();) {
- String key = iter.next();
+ for (String key : keys) {
Object value = data.get(key);
OpenType> type = compositeType.getType(key);
if (type instanceof SimpleType>) {
@@ -629,10 +627,8 @@ protected void createProperty(String propertyPrefix, Object result) {
}
} else if (result instanceof TabularDataSupport) {
TabularDataSupport data = (TabularDataSupport) result;
- for (Iterator iter = data.keySet().iterator(); iter.hasNext();) {
- Object key = iter.next();
- for (Iterator> iter1 = ((List>) key).iterator(); iter1.hasNext();) {
- Object key1 = iter1.next();
+ for (Object key : data.keySet()) {
+ for (Object key1 : ((List>) key)) {
CompositeData valuedata = data.get(new Object[] { key1 });
Object value = valuedata.get("value");
OpenType> type = valuedata.getCompositeType().getType(
diff --git a/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorUnregisterTask.java b/core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorUnregisterTask.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/JMXAccessorUnregisterTask.java
rename to core/src/main/java/org/apache/catalina/ant/jmx/JMXAccessorUnregisterTask.java
diff --git a/src/main/java/org/apache/catalina/ant/jmx/antlib.xml b/core/src/main/java/org/apache/catalina/ant/jmx/antlib.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/antlib.xml
rename to core/src/main/java/org/apache/catalina/ant/jmx/antlib.xml
diff --git a/src/main/java/org/apache/catalina/ant/jmx/jmxaccessor.tasks b/core/src/main/java/org/apache/catalina/ant/jmx/jmxaccessor.tasks
similarity index 100%
rename from src/main/java/org/apache/catalina/ant/jmx/jmxaccessor.tasks
rename to core/src/main/java/org/apache/catalina/ant/jmx/jmxaccessor.tasks
diff --git a/src/main/java/org/apache/catalina/ant/jmx/package.html b/core/src/main/java/org/apache/catalina/ant/jmx/package.html
similarity index 86%
rename from src/main/java/org/apache/catalina/ant/jmx/package.html
rename to core/src/main/java/org/apache/catalina/ant/jmx/package.html
index f3e057b..c9f65ae 100644
--- a/src/main/java/org/apache/catalina/ant/jmx/package.html
+++ b/core/src/main/java/org/apache/catalina/ant/jmx/package.html
@@ -27,42 +27,43 @@
existing one. The following attribute are exists in every tasks:
+ Common task attributes
- Attribute
- Description
+ Attribute
+ Description
- url
+ url
The JMX Connection URL of the remote Tomcat MBeansServer.
- username
+ username
The username of a MBeanServer auth, when configured.
- password
+ password
The password of a MBeanServer auth, when configured.
- host
+ host
The JMX Connection host.
- port
+ port
The JMX Connection port.
- ref
+ ref
The name of the ant internal reference for a jmx connection.
diff --git a/src/main/java/org/apache/catalina/ant/package.html b/core/src/main/java/org/apache/catalina/ant/package.html
similarity index 92%
rename from src/main/java/org/apache/catalina/ant/package.html
rename to core/src/main/java/org/apache/catalina/ant/package.html
index 2d38417..d0f03f4 100644
--- a/src/main/java/org/apache/catalina/ant/package.html
+++ b/core/src/main/java/org/apache/catalina/ant/package.html
@@ -29,12 +29,13 @@
+ Task attributes
- Attribute
- Description
+ Attribute
+ Description
- url
+ url
The URL of the Manager web application you will use to
perform the requested operations. If not specified, defaults to
@@ -43,7 +44,7 @@
- username
+ username
The username of a Tomcat user that has been configured with the
manager-script role, as required to execute Manager
@@ -51,7 +52,7 @@
- password
+ password
The password of a Tomcat user that has been configured with the
manager-script role, as required to execute Manager
@@ -59,7 +60,7 @@
- config
+ config
A URL pointing at the context configuration file (i.e. a file
containing only the <Context> element, and
@@ -70,7 +71,7 @@
- path
+ path
The context path (including the leading slash) of the web application
this command is intended to manage, or a zero-length string for the
@@ -81,7 +82,7 @@
- war
+ war
A jar: URL that points at a web application archive (WAR)
file, or a file: URL that points at an unpacked directory
diff --git a/src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java b/core/src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java
similarity index 95%
rename from src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java
rename to core/src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java
index c710893..4251b45 100644
--- a/src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/AuthenticatorBase.java
@@ -27,6 +27,7 @@
import java.util.Set;
import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.message.AuthException;
import javax.security.auth.message.AuthStatus;
import javax.security.auth.message.MessageInfo;
@@ -211,6 +212,13 @@ public AuthenticatorBase() {
*/
protected String secureRandomProvider = null;
+ /**
+ * The name of the JASPIC callback handler class. If none is specified the
+ * default {@link org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl}
+ * will be used.
+ */
+ protected String jaspicCallbackHandlerClass = null;
+
protected SessionIdGeneratorBase sessionIdGenerator = null;
/**
@@ -407,6 +415,25 @@ public void setSecureRandomProvider(String secureRandomProvider) {
this.secureRandomProvider = secureRandomProvider;
}
+ /**
+ * Return the JASPIC callback handler class name
+ *
+ * @return The name of the JASPIC callback handler
+ */
+ public String getJaspicCallbackHandlerClass() {
+ return jaspicCallbackHandlerClass;
+ }
+
+ /**
+ * Set the JASPIC callback handler class name
+ *
+ * @param jaspicCallbackHandlerClass
+ * The new JASPIC callback handler class name
+ */
+ public void setJaspicCallbackHandlerClass(String jaspicCallbackHandlerClass) {
+ this.jaspicCallbackHandlerClass = jaspicCallbackHandlerClass;
+ }
+
// --------------------------------------------------------- Public Methods
/**
@@ -640,8 +667,9 @@ private JaspicState getJaspicState(AuthConfigProvider jaspicProvider, Request re
new MessageInfoImpl(request.getRequest(), response.getResponse(), authMandatory);
try {
+ CallbackHandler callbackHandler = createCallbackHandler();
ServerAuthConfig serverAuthConfig = jaspicProvider.getServerAuthConfig(
- "HttpServlet", jaspicAppContextID, CallbackHandlerImpl.getInstance());
+ "HttpServlet", jaspicAppContextID, callbackHandler);
String authContextID = serverAuthConfig.getAuthContextID(jaspicState.messageInfo);
jaspicState.serverAuthContext = serverAuthConfig.getAuthContext(authContextID, null, null);
} catch (AuthException e) {
@@ -653,6 +681,32 @@ private JaspicState getJaspicState(AuthConfigProvider jaspicProvider, Request re
return jaspicState;
}
+ private CallbackHandler createCallbackHandler() {
+ CallbackHandler callbackHandler = null;
+ if (jaspicCallbackHandlerClass == null) {
+ callbackHandler = CallbackHandlerImpl.getInstance();
+ } else {
+ Class> clazz = null;
+ try {
+ clazz = Class.forName(jaspicCallbackHandlerClass, true,
+ Thread.currentThread().getContextClassLoader());
+ } catch (ClassNotFoundException e) {
+ // Proceed with the retry below
+ }
+
+ try {
+ if (clazz == null) {
+ clazz = Class.forName(jaspicCallbackHandlerClass);
+ }
+ callbackHandler = (CallbackHandler)clazz.getConstructor().newInstance();
+ } catch (ReflectiveOperationException e) {
+ throw new SecurityException(e);
+ }
+ }
+
+ return callbackHandler;
+ }
+
// ------------------------------------------------------ Protected Methods
diff --git a/src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java
similarity index 83%
rename from src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java
index 1a5742a..967927e 100644
--- a/src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/BasicAuthenticator.java
@@ -20,6 +20,7 @@
import java.io.IOException;
+import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
@@ -43,10 +44,30 @@
* @author Craig R. McClanahan
*/
public class BasicAuthenticator extends AuthenticatorBase {
+
private static final Log log = LogFactory.getLog(BasicAuthenticator.class);
+ private Charset charset = StandardCharsets.ISO_8859_1;
+ private String charsetString = null;
+
+
+ public String getCharset() {
+ return charsetString;
+ }
+
+
+ public void setCharset(String charsetString) {
+ // Only acceptable options are null, "" or "UTF-8" (case insensitive)
+ if (charsetString == null || charsetString.isEmpty()) {
+ charset = StandardCharsets.ISO_8859_1;
+ } else if ("UTF-8".equalsIgnoreCase(charsetString)) {
+ charset = StandardCharsets.UTF_8;
+ } else {
+ throw new IllegalArgumentException(sm.getString("basicAuthenticator.invalidCharset"));
+ }
+ this.charsetString = charsetString;
+ }
- // --------------------------------------------------------- Public Methods
@Override
protected boolean doAuthenticate(Request request, HttpServletResponse response)
@@ -66,7 +87,7 @@ protected boolean doAuthenticate(Request request, HttpServletResponse response)
ByteChunk authorizationBC = authorization.getByteChunk();
BasicCredentials credentials = null;
try {
- credentials = new BasicCredentials(authorizationBC);
+ credentials = new BasicCredentials(authorizationBC, charset);
String username = credentials.getUsername();
String password = credentials.getPassword();
@@ -89,6 +110,10 @@ protected boolean doAuthenticate(Request request, HttpServletResponse response)
value.append("Basic realm=\"");
value.append(getRealmName(context));
value.append('\"');
+ if (charsetString != null && !charsetString.isEmpty()) {
+ value.append(", charset=");
+ value.append(charsetString);
+ }
response.setHeader(AUTH_HEADER_NAME, value.toString());
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return false;
@@ -112,28 +137,31 @@ public static class BasicCredentials {
// note: we include single white space as its delimiter
private static final String METHOD = "basic ";
- private ByteChunk authorization;
- private int initialOffset;
+ private final Charset charset;
+ private final ByteChunk authorization;
+ private final int initialOffset;
private int base64blobOffset;
private int base64blobLength;
private String username = null;
private String password = null;
-
/**
* Parse the HTTP Authorization header for BASIC authentication
* as per RFC 2617 section 2, and the Base64 encoded credentials
* as per RFC 2045 section 6.8.
*
- * @param input The header value to parse in-place
+ * @param input The header value to parse in-place
+ * @param charset The character set to use to convert the bytes to a
+ * string
*
* @throws IllegalArgumentException If the header does not conform
* to RFC 2617
*/
- public BasicCredentials(ByteChunk input)
- throws IllegalArgumentException {
+ public BasicCredentials(ByteChunk input, Charset charset) throws IllegalArgumentException {
authorization = input;
initialOffset = input.getOffset();
+ this.charset = charset;
+
parseMethod();
byte[] decoded = parseBase64();
parseCredentials(decoded);
@@ -210,15 +238,12 @@ private void parseCredentials(byte[] decoded)
}
if (colon < 0) {
- username = new String(decoded, StandardCharsets.ISO_8859_1);
+ username = new String(decoded, charset);
// password will remain null!
}
else {
- username = new String(
- decoded, 0, colon, StandardCharsets.ISO_8859_1);
- password = new String(
- decoded, colon + 1, decoded.length - colon - 1,
- StandardCharsets.ISO_8859_1);
+ username = new String(decoded, 0, colon, charset);
+ password = new String(decoded, colon + 1, decoded.length - colon - 1, charset);
// tolerate surplus white space around credentials
if (password.length() > 1) {
password = password.trim();
diff --git a/src/main/java/org/apache/catalina/authenticator/Constants.java b/core/src/main/java/org/apache/catalina/authenticator/Constants.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/Constants.java
rename to core/src/main/java/org/apache/catalina/authenticator/Constants.java
diff --git a/src/main/java/org/apache/catalina/authenticator/DigestAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/DigestAuthenticator.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/DigestAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/DigestAuthenticator.java
diff --git a/src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java
similarity index 97%
rename from src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java
index 3920590..659060e 100644
--- a/src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/FormAuthenticator.java
@@ -652,21 +652,24 @@ protected void saveRequest(Request request, Session session)
// May need to acknowledge a 100-continue expectation
request.getResponse().sendAcknowledgement();
- ByteChunk body = new ByteChunk();
- body.setLimit(request.getConnector().getMaxSavePostSize());
+ int maxSavePostSize = request.getConnector().getMaxSavePostSize();
+ if (maxSavePostSize != 0) {
+ ByteChunk body = new ByteChunk();
+ body.setLimit(maxSavePostSize);
- byte[] buffer = new byte[4096];
- int bytesRead;
- InputStream is = request.getInputStream();
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+ InputStream is = request.getInputStream();
- while ( (bytesRead = is.read(buffer) ) >= 0) {
- body.append(buffer, 0, bytesRead);
- }
+ while ( (bytesRead = is.read(buffer) ) >= 0) {
+ body.append(buffer, 0, bytesRead);
+ }
- // Only save the request body if there is something to save
- if (body.getLength() > 0) {
- saved.setContentType(request.getContentType());
- saved.setBody(body);
+ // Only save the request body if there is something to save
+ if (body.getLength() > 0) {
+ saved.setContentType(request.getContentType());
+ saved.setBody(body);
+ }
}
saved.setMethod(request.getMethod());
@@ -687,19 +690,17 @@ protected void saveRequest(Request request, Session session)
* @return the original request URL
*/
protected String savedRequestURL(Session session) {
-
SavedRequest saved =
(SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE);
if (saved == null) {
- return (null);
+ return null;
}
StringBuilder sb = new StringBuilder(saved.getRequestURI());
if (saved.getQueryString() != null) {
sb.append('?');
sb.append(saved.getQueryString());
}
- return (sb.toString());
-
+ return sb.toString();
}
diff --git a/src/main/java/org/apache/catalina/authenticator/LocalStrings.properties b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings.properties
similarity index 98%
rename from src/main/java/org/apache/catalina/authenticator/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/authenticator/LocalStrings.properties
index c1d658a..ca5dd4c 100644
--- a/src/main/java/org/apache/catalina/authenticator/LocalStrings.properties
+++ b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings.properties
@@ -32,6 +32,8 @@ authenticator.sessionExpired=The time allowed for the login process has been exc
authenticator.unauthorized=Cannot authenticate with the provided credentials
authenticator.tomcatPrincipalLogoutFail=Logout with TomcatPrincipal instance has failed
+basicAuthenticator.invalidCharset=The only permitted values are null, the empty string or UTF-8
+
digestAuthenticator.cacheRemove=A valid entry has been removed from client nonce cache to make room for new entries. A replay attack is now possible. To prevent the possibility of replay attacks, reduce nonceValidity or increase cnonceCacheSize. Further warnings of this type will be suppressed for 5 minutes.
formAuthenticator.forwardErrorFail=Unexpected error forwarding to error page
diff --git a/src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties
index 62acdd5..7a06653 100644
--- a/src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties
+++ b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
authenticator.certificates = No hay cadena de certificados del cliente en esta petici\u00F3n
authenticator.formlogin = Referencia directa al formulario de conexi\u00F3n (p\u00E1gina de formulario de login) inv\u00E1lida
authenticator.loginFail = No pude ingresar
diff --git a/src/main/java/org/apache/catalina/authenticator/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/authenticator/LocalStrings_fr.properties
diff --git a/src/main/java/org/apache/catalina/authenticator/LocalStrings_ja.properties b/core/src/main/java/org/apache/catalina/authenticator/LocalStrings_ja.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/LocalStrings_ja.properties
rename to core/src/main/java/org/apache/catalina/authenticator/LocalStrings_ja.properties
diff --git a/src/main/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/NonLoginAuthenticator.java
diff --git a/src/main/java/org/apache/catalina/authenticator/SSLAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/SSLAuthenticator.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/SSLAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/SSLAuthenticator.java
diff --git a/src/main/java/org/apache/catalina/authenticator/SavedRequest.java b/core/src/main/java/org/apache/catalina/authenticator/SavedRequest.java
similarity index 82%
rename from src/main/java/org/apache/catalina/authenticator/SavedRequest.java
rename to core/src/main/java/org/apache/catalina/authenticator/SavedRequest.java
index bb3f6cf..4cf8c7c 100644
--- a/src/main/java/org/apache/catalina/authenticator/SavedRequest.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/SavedRequest.java
@@ -20,9 +20,12 @@
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
+import java.util.Map;
import javax.servlet.http.Cookie;
@@ -42,31 +45,30 @@
*/
public final class SavedRequest {
-
/**
* The set of Cookies associated with this Request.
*/
- private final ArrayList cookies = new ArrayList<>();
+ private final List cookies = new ArrayList<>();
public void addCookie(Cookie cookie) {
cookies.add(cookie);
}
public Iterator getCookies() {
- return (cookies.iterator());
+ return cookies.iterator();
}
/**
* The set of Headers associated with this Request. Each key is a header
- * name, while the value is a ArrayList containing one or more actual
+ * name, while the value is a List containing one or more actual
* values for this header. The values are returned as an Iterator when
* you ask for them.
*/
- private final HashMap> headers = new HashMap<>();
+ private final Map> headers = new HashMap<>();
public void addHeader(String name, String value) {
- ArrayList values = headers.get(name);
+ List values = headers.get(name);
if (values == null) {
values = new ArrayList<>();
headers.put(name, values);
@@ -75,29 +77,29 @@ public void addHeader(String name, String value) {
}
public Iterator getHeaderNames() {
- return (headers.keySet().iterator());
+ return headers.keySet().iterator();
}
public Iterator getHeaderValues(String name) {
- ArrayList values = headers.get(name);
+ List values = headers.get(name);
if (values == null)
- return ((new ArrayList()).iterator());
+ return Collections.emptyIterator();
else
- return (values.iterator());
+ return values.iterator();
}
/**
* The set of Locales associated with this Request.
*/
- private final ArrayList locales = new ArrayList<>();
+ private final List locales = new ArrayList<>();
public void addLocale(Locale locale) {
locales.add(locale);
}
public Iterator getLocales() {
- return (locales.iterator());
+ return locales.iterator();
}
@@ -107,7 +109,7 @@ public Iterator getLocales() {
private String method = null;
public String getMethod() {
- return (this.method);
+ return this.method;
}
public void setMethod(String method) {
@@ -121,7 +123,7 @@ public void setMethod(String method) {
private String queryString = null;
public String getQueryString() {
- return (this.queryString);
+ return this.queryString;
}
public void setQueryString(String queryString) {
@@ -135,7 +137,7 @@ public void setQueryString(String queryString) {
private String requestURI = null;
public String getRequestURI() {
- return (this.requestURI);
+ return this.requestURI;
}
public void setRequestURI(String requestURI) {
@@ -150,7 +152,7 @@ public void setRequestURI(String requestURI) {
private String decodedRequestURI = null;
public String getDecodedRequestURI() {
- return (this.decodedRequestURI);
+ return this.decodedRequestURI;
}
public void setDecodedRequestURI(String decodedRequestURI) {
@@ -164,7 +166,7 @@ public void setDecodedRequestURI(String decodedRequestURI) {
private ByteChunk body = null;
public ByteChunk getBody() {
- return (this.body);
+ return this.body;
}
public void setBody(ByteChunk body) {
@@ -177,7 +179,7 @@ public void setBody(ByteChunk body) {
private String contentType = null;
public String getContentType() {
- return (this.contentType);
+ return this.contentType;
}
public void setContentType(String contentType) {
diff --git a/src/main/java/org/apache/catalina/authenticator/SingleSignOn.java b/core/src/main/java/org/apache/catalina/authenticator/SingleSignOn.java
similarity index 99%
rename from src/main/java/org/apache/catalina/authenticator/SingleSignOn.java
rename to core/src/main/java/org/apache/catalina/authenticator/SingleSignOn.java
index 8ff9af1..dad95d0 100644
--- a/src/main/java/org/apache/catalina/authenticator/SingleSignOn.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/SingleSignOn.java
@@ -604,7 +604,7 @@ protected synchronized void startInternal() throws LifecycleException {
while (c != null && !(c instanceof Engine)) {
c = c.getParent();
}
- if (c instanceof Engine) {
+ if (c != null) {
engine = (Engine) c;
}
super.startInternal();
diff --git a/src/main/java/org/apache/catalina/authenticator/SingleSignOnEntry.java b/core/src/main/java/org/apache/catalina/authenticator/SingleSignOnEntry.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/SingleSignOnEntry.java
rename to core/src/main/java/org/apache/catalina/authenticator/SingleSignOnEntry.java
diff --git a/src/main/java/org/apache/catalina/authenticator/SingleSignOnListener.java b/core/src/main/java/org/apache/catalina/authenticator/SingleSignOnListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/SingleSignOnListener.java
rename to core/src/main/java/org/apache/catalina/authenticator/SingleSignOnListener.java
diff --git a/src/main/java/org/apache/catalina/authenticator/SingleSignOnSessionKey.java b/core/src/main/java/org/apache/catalina/authenticator/SingleSignOnSessionKey.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/SingleSignOnSessionKey.java
rename to core/src/main/java/org/apache/catalina/authenticator/SingleSignOnSessionKey.java
diff --git a/src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java b/core/src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
similarity index 99%
rename from src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
rename to core/src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
index 4ca5ac0..fb0ae49 100644
--- a/src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
@@ -45,7 +45,6 @@
import org.ietf.jgss.GSSManager;
import org.ietf.jgss.Oid;
-
/**
* A SPNEGO authenticator that uses the SPNEGO/Kerberos support built in to Java
* 6. Successful Kerberos authentication depends on the correct configuration of
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
similarity index 93%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
index fa5e9aa..b32f108 100644
--- a/src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
@@ -18,7 +18,6 @@
import java.io.File;
import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -61,7 +60,7 @@ public class AuthConfigFactoryImpl extends AuthConfigFactory {
new ConcurrentHashMap<>();
// Note: Although there will only ever be a maximum of one entry in this
// Map, use a ConcurrentHashMap for consistency
- private volatile Map defaultRegistration =
+ private final Map defaultRegistration =
new ConcurrentHashMap<>(1);
@@ -76,9 +75,11 @@ public AuthConfigProvider getConfigProvider(String layer, String appContext,
RegistrationContextImpl registrationContext =
findRegistrationContextImpl(layer, appContext);
if (registrationContext != null) {
- RegistrationListenerWrapper wrapper = new RegistrationListenerWrapper(
- layer, appContext, listener);
- registrationContext.addListener(wrapper);
+ if (listener != null) {
+ RegistrationListenerWrapper wrapper = new RegistrationListenerWrapper(
+ layer, appContext, listener);
+ registrationContext.addListener(wrapper);
+ }
return registrationContext.getProvider();
}
return null;
@@ -104,7 +105,23 @@ private String doRegisterConfigProvider(String className,
log.debug(sm.getString("authConfigFactoryImpl.registerClass",
className, layer, appContext));
}
- Class> clazz;
+
+ AuthConfigProvider provider = null;
+ if (className != null) {
+ provider = createAuthConfigProvider(className, properties);
+ }
+
+ String registrationID = getRegistrationID(layer, appContext);
+ RegistrationContextImpl registrationContextImpl = new RegistrationContextImpl(
+ layer, appContext, description, true, provider, properties);
+ addRegistrationContextImpl(layer, appContext, registrationID, registrationContextImpl);
+ return registrationID;
+ }
+
+
+ private AuthConfigProvider createAuthConfigProvider(String className,
+ @SuppressWarnings("rawtypes") Map properties) throws SecurityException {
+ Class> clazz = null;
AuthConfigProvider provider = null;
try {
clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
@@ -112,19 +129,15 @@ private String doRegisterConfigProvider(String className,
// Ignore so the re-try below can proceed
}
try {
- clazz = Class.forName(className);
+ if (clazz == null) {
+ clazz = Class.forName(className);
+ }
Constructor> constructor = clazz.getConstructor(Map.class, AuthConfigFactory.class);
provider = (AuthConfigProvider) constructor.newInstance(properties, null);
- } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
- IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ } catch (ReflectiveOperationException | IllegalArgumentException e) {
throw new SecurityException(e);
}
-
- String registrationID = getRegistrationID(layer, appContext);
- RegistrationContextImpl registrationContextImpl = new RegistrationContextImpl(
- layer, appContext, description, true, provider, properties);
- addRegistrationContextImpl(layer, appContext, registrationID, registrationContextImpl);
- return registrationID;
+ return provider;
}
@@ -236,6 +249,9 @@ public boolean removeRegistration(String registrationID) {
for (RegistrationListenerWrapper wrapper : registration.listeners) {
wrapper.getListener().notify(wrapper.getMessageLayer(), wrapper.getAppContext());
}
+ if (registration.isPersistent()) {
+ savePersistentRegistrations();
+ }
return true;
}
}
@@ -245,7 +261,7 @@ public boolean removeRegistration(String registrationID) {
public String[] detachListener(RegistrationListener listener, String layer, String appContext) {
String registrationID = getRegistrationID(layer, appContext);
RegistrationContextImpl registrationContext = findRegistrationContextImpl(layer, appContext);
- if (registrationContext.removeListener(listener)) {
+ if (registrationContext != null && registrationContext.removeListener(listener)) {
return new String[] { registrationID };
}
return EMPTY_STRING_ARRAY;
@@ -259,7 +275,7 @@ public String[] getRegistrationIDs(AuthConfigProvider provider) {
result.addAll(layerAppContextRegistrations.keySet());
result.addAll(appContextRegistrations.keySet());
result.addAll(layerRegistrations.keySet());
- if (defaultRegistration != null) {
+ if (!defaultRegistration.isEmpty()) {
result.add(DEFAULT_REGISTRATION_ID);
}
} else {
@@ -360,7 +376,9 @@ private void savePersistentProvider(Providers providers,
if (registrationContextImpl != null && registrationContextImpl.isPersistent()) {
Provider provider = new Provider();
provider.setAppContext(registrationContextImpl.getAppContext());
- provider.setClassName(registrationContextImpl.getProvider().getClass().getName());
+ if (registrationContextImpl.getProvider() != null) {
+ provider.setClassName(registrationContextImpl.getProvider().getClass().getName());
+ }
provider.setDescription(registrationContextImpl.getDescription());
provider.setLayer(registrationContextImpl.getMessageLayer());
for (Entry property : registrationContextImpl.getProperties().entrySet()) {
@@ -456,6 +474,7 @@ private boolean removeListener(RegistrationListener listener) {
for (RegistrationListenerWrapper wrapper : listeners) {
if (wrapper.getListener().equals(listener)) {
listeners.remove(wrapper);
+ result = true;
}
}
return result;
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/CallbackHandlerImpl.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/CallbackHandlerImpl.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/CallbackHandlerImpl.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/CallbackHandlerImpl.java
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties b/core/src/main/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
similarity index 90%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
index 05eb121..96578ff 100644
--- a/src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
@@ -121,17 +121,12 @@ static void writeProviders(Providers providers, File configFile) {
" xsi:schemaLocation=\"http://tomcat.apache.org/xml jaspic-providers.xsd\"\n" +
" version=\"1.0\">\n");
for (Provider provider : providers.providers) {
- writer.write(" \n");
+ writer.write(" \n");
for (Entry entry : provider.getProperties().entrySet()) {
writer.write(" \n");
} catch (IOException e) {
- configFileNew.delete();
+ if (!configFileNew.delete()) {
+ log.warn(sm.getString("persistentProviderRegistrations.deleteFail",
+ configFileNew.getAbsolutePath()));
+ }
throw new SecurityException(e);
}
@@ -169,6 +167,15 @@ static void writeProviders(Providers providers, File configFile) {
}
+ private static void writeOptional(String name, String value, Writer writer) throws IOException {
+ if (value != null) {
+ writer.write(" " + name + "=\"");
+ writer.write(value);
+ writer.write("\"");
+ }
+ }
+
+
public static class Providers {
private final List providers = new ArrayList<>();
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleAuthConfigProvider.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleAuthConfigProvider.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/SimpleAuthConfigProvider.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleAuthConfigProvider.java
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
similarity index 94%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
index 99b9b45..15d29e1 100644
--- a/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
+++ b/core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
@@ -16,7 +16,6 @@
*/
package org.apache.catalina.authenticator.jaspic;
-import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -118,9 +117,7 @@ public ServerAuthContext getAuthContext(String authContextID, Subject serviceSub
(ServerAuthModule) clazz.getConstructor().newInstance();
module.initialize(null, null, handler, mergedProperties);
modules.add(module);
- } catch (ClassNotFoundException | InstantiationException |
- IllegalAccessException | IllegalArgumentException |
- InvocationTargetException | NoSuchMethodException |
+ } catch (ReflectiveOperationException | IllegalArgumentException |
SecurityException e) {
AuthException ae = new AuthException();
ae.initCause(e);
diff --git a/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthContext.java b/core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthContext.java
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthContext.java
rename to core/src/main/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthContext.java
diff --git a/src/main/java/org/apache/catalina/authenticator/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/authenticator/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/authenticator/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/authenticator/package.html b/core/src/main/java/org/apache/catalina/authenticator/package.html
similarity index 100%
rename from src/main/java/org/apache/catalina/authenticator/package.html
rename to core/src/main/java/org/apache/catalina/authenticator/package.html
diff --git a/src/main/java/org/apache/catalina/connector/ClientAbortException.java b/core/src/main/java/org/apache/catalina/connector/ClientAbortException.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/ClientAbortException.java
rename to core/src/main/java/org/apache/catalina/connector/ClientAbortException.java
diff --git a/src/main/java/org/apache/catalina/connector/Connector.java b/core/src/main/java/org/apache/catalina/connector/Connector.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/Connector.java
rename to core/src/main/java/org/apache/catalina/connector/Connector.java
diff --git a/src/main/java/org/apache/catalina/connector/CoyoteAdapter.java b/core/src/main/java/org/apache/catalina/connector/CoyoteAdapter.java
similarity index 98%
rename from src/main/java/org/apache/catalina/connector/CoyoteAdapter.java
rename to core/src/main/java/org/apache/catalina/connector/CoyoteAdapter.java
index e5fc1c1..ca6f191 100644
--- a/src/main/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/core/src/main/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -127,7 +127,7 @@ public CoyoteAdapter(Connector connector) {
@Override
public boolean asyncDispatch(org.apache.coyote.Request req, org.apache.coyote.Response res,
- SocketEvent socketEvent) throws Exception {
+ SocketEvent status) throws Exception {
Request request = (Request) req.getNote(ADAPTER_NOTES);
Response response = (Response) res.getNote(ADAPTER_NOTES);
@@ -149,11 +149,11 @@ public boolean asyncDispatch(org.apache.coyote.Request req, org.apache.coyote.Re
response.setSuspended(false);
}
- if (socketEvent==SocketEvent.TIMEOUT) {
+ if (status==SocketEvent.TIMEOUT) {
if (!asyncConImpl.timeout()) {
asyncConImpl.setErrorState(null, false);
}
- } else if (socketEvent==SocketEvent.ERROR) {
+ } else if (status==SocketEvent.ERROR) {
// An I/O error occurred on a non-container thread which means
// that the socket needs to be closed so set success to false to
// trigger a close
@@ -181,7 +181,7 @@ public boolean asyncDispatch(org.apache.coyote.Request req, org.apache.coyote.Re
if (!request.isAsyncDispatching() && request.isAsync()) {
WriteListener writeListener = res.getWriteListener();
ReadListener readListener = req.getReadListener();
- if (writeListener != null && socketEvent == SocketEvent.OPEN_WRITE) {
+ if (writeListener != null && status == SocketEvent.OPEN_WRITE) {
ClassLoader oldCL = null;
try {
oldCL = request.getContext().bind(false, null);
@@ -197,12 +197,12 @@ public boolean asyncDispatch(org.apache.coyote.Request req, org.apache.coyote.Re
} finally {
request.getContext().unbind(false, oldCL);
}
- } else if (readListener != null && socketEvent == SocketEvent.OPEN_READ) {
+ } else if (readListener != null && status == SocketEvent.OPEN_READ) {
ClassLoader oldCL = null;
try {
oldCL = request.getContext().bind(false, null);
// If data is being read on a non-container thread a
- // dispatch with socketEvent OPEN_READ will be used to get
+ // dispatch with status OPEN_READ will be used to get
// execution back on a container thread for the
// onAllDataRead() event. Therefore, make sure
// onDataAvailable() is not called in this case.
@@ -225,7 +225,6 @@ public boolean asyncDispatch(org.apache.coyote.Request req, org.apache.coyote.Re
// Has an error occurred during async processing that needs to be
// processed by the application's error page mechanism (or Tomcat's
// if the application doesn't define one)?
- //处理过程中出错,跳转到指定出错页。
if (!request.isAsyncDispatching() && request.isAsync() &&
response.isErrorReportRequired()) {
connector.getService().getContainer().getPipeline().getFirst().invoke(
@@ -729,7 +728,7 @@ protected boolean postParseRequest(org.apache.coyote.Request req, Request reques
// No session ID means no possibility of remap
if (contexts != null && sessionID != null) {
// Find the context associated with the session
- for (int i = (contexts.length); i > 0; i--) {
+ for (int i = contexts.length; i > 0; i--) {
Context ctxt = contexts[i - 1];
if (ctxt.getManager().findSession(sessionID) != null) {
// We found a context. Is it the one that has
@@ -987,7 +986,7 @@ protected void parseSessionSslId(Request request) {
/**
- * Parse session id in URL.
+ * Parse session id in Cookie.
*
* @param request The Servlet request object
*/
@@ -1298,8 +1297,6 @@ public static boolean checkNormalize(MessageBytes uriMB) {
* @param len Length
*/
protected static void copyBytes(byte[] b, int dest, int src, int len) {
- for (int pos = 0; pos < len; pos++) {
- b[pos + dest] = b[pos + src];
- }
+ System.arraycopy(b, src, b, dest, len);
}
}
diff --git a/src/main/java/org/apache/catalina/connector/CoyoteInputStream.java b/core/src/main/java/org/apache/catalina/connector/CoyoteInputStream.java
similarity index 98%
rename from src/main/java/org/apache/catalina/connector/CoyoteInputStream.java
rename to core/src/main/java/org/apache/catalina/connector/CoyoteInputStream.java
index ff7cc4a..b0afed5 100644
--- a/src/main/java/org/apache/catalina/connector/CoyoteInputStream.java
+++ b/core/src/main/java/org/apache/catalina/connector/CoyoteInputStream.java
@@ -207,9 +207,7 @@ public void setReadListener(ReadListener listener) {
ib.setReadListener(listener);
}
- /**
- * 如果有读监听函数,每次读数据的时候,如果发现数据不够用就将连接注册到selector上。
- */
+
private void checkNonBlockingRead() {
if (!ib.isBlocking() && !ib.isReady()) {
throw new IllegalStateException(sm.getString("coyoteInputStream.nbNotready"));
diff --git a/src/main/java/org/apache/catalina/connector/CoyoteOutputStream.java b/core/src/main/java/org/apache/catalina/connector/CoyoteOutputStream.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/CoyoteOutputStream.java
rename to core/src/main/java/org/apache/catalina/connector/CoyoteOutputStream.java
diff --git a/src/main/java/org/apache/catalina/connector/CoyotePrincipal.java b/core/src/main/java/org/apache/catalina/connector/CoyotePrincipal.java
similarity index 97%
rename from src/main/java/org/apache/catalina/connector/CoyotePrincipal.java
rename to core/src/main/java/org/apache/catalina/connector/CoyotePrincipal.java
index 8e8ca26..1ae5608 100644
--- a/src/main/java/org/apache/catalina/connector/CoyotePrincipal.java
+++ b/core/src/main/java/org/apache/catalina/connector/CoyotePrincipal.java
@@ -49,7 +49,7 @@ public CoyotePrincipal(String name) {
@Override
public String getName() {
- return (this.name);
+ return this.name;
}
@@ -62,12 +62,10 @@ public String getName() {
*/
@Override
public String toString() {
-
StringBuilder sb = new StringBuilder("CoyotePrincipal[");
sb.append(this.name);
sb.append("]");
- return (sb.toString());
-
+ return sb.toString();
}
diff --git a/src/main/java/org/apache/catalina/connector/CoyoteReader.java b/core/src/main/java/org/apache/catalina/connector/CoyoteReader.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/CoyoteReader.java
rename to core/src/main/java/org/apache/catalina/connector/CoyoteReader.java
diff --git a/src/main/java/org/apache/catalina/connector/CoyoteWriter.java b/core/src/main/java/org/apache/catalina/connector/CoyoteWriter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/CoyoteWriter.java
rename to core/src/main/java/org/apache/catalina/connector/CoyoteWriter.java
diff --git a/src/main/java/org/apache/catalina/connector/InputBuffer.java b/core/src/main/java/org/apache/catalina/connector/InputBuffer.java
similarity index 98%
rename from src/main/java/org/apache/catalina/connector/InputBuffer.java
rename to core/src/main/java/org/apache/catalina/connector/InputBuffer.java
index 09e94c7..a65a80d 100644
--- a/src/main/java/org/apache/catalina/connector/InputBuffer.java
+++ b/core/src/main/java/org/apache/catalina/connector/InputBuffer.java
@@ -272,7 +272,6 @@ public boolean isReady() {
}
return false;
}
- //通过content-length判断是否一个消息读取完
if (isFinished()) {
// If this is a non-container thread, need to trigger a read
// which will eventually lead to a call to onAllDataRead() via a
@@ -283,7 +282,6 @@ public boolean isReady() {
}
return false;
}
- //注册读数据事件
boolean result = available() > 0;
if (!result) {
coyoteRequest.action(ActionCode.NB_READ_INTEREST, null);
@@ -291,10 +289,7 @@ public boolean isReady() {
return result;
}
- /**
- * 通过是否有读监听函数来判断是否是阻塞的
- * @return
- */
+
boolean isBlocking() {
return coyoteRequest.getReadListener() == null;
}
diff --git a/src/main/java/org/apache/catalina/connector/LocalStrings.properties b/core/src/main/java/org/apache/catalina/connector/LocalStrings.properties
similarity index 98%
rename from src/main/java/org/apache/catalina/connector/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/connector/LocalStrings.properties
index c9e02be..86c6487 100644
--- a/src/main/java/org/apache/catalina/connector/LocalStrings.properties
+++ b/core/src/main/java/org/apache/catalina/connector/LocalStrings.properties
@@ -12,6 +12,7 @@
# 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.
+
coyoteAdapter.accesslogFail=Exception while attempting to add an entry to the access log
coyoteAdapter.asyncDispatch=Exception while processing an asynchronous request
coyoteAdapter.authenticate=Authenticated user [{0}] provided by connector
@@ -56,6 +57,7 @@ coyoteRequest.filterAsyncSupportUnknown=Unable to determine if any filters do no
coyoteRequest.maxPostSizeExceeded=The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector
coyoteRequest.noAsync=Unable to start async because the following classes in the processing chain do not support async [{0}]
coyoteRequest.noMultipartConfig=Unable to process parts as no multi-part configuration has been provided
+coyoteRequest.trailersNotReady=It is illegal to call getTrailerFields() before isTrailerFieldsReady() has returned true
coyoteResponse.encoding.invalid=The encoding [{0}] is not recognised by the JRE
coyoteResponse.getOutputStream.ise=getWriter() has already been called for this response
diff --git a/src/main/java/org/apache/catalina/connector/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/connector/LocalStrings_es.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/connector/LocalStrings_es.properties
diff --git a/src/main/java/org/apache/catalina/connector/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/connector/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/connector/LocalStrings_fr.properties
diff --git a/src/main/java/org/apache/catalina/connector/LocalStrings_ja.properties b/core/src/main/java/org/apache/catalina/connector/LocalStrings_ja.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/LocalStrings_ja.properties
rename to core/src/main/java/org/apache/catalina/connector/LocalStrings_ja.properties
diff --git a/src/main/java/org/apache/catalina/connector/OutputBuffer.java b/core/src/main/java/org/apache/catalina/connector/OutputBuffer.java
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/OutputBuffer.java
rename to core/src/main/java/org/apache/catalina/connector/OutputBuffer.java
diff --git a/src/main/java/org/apache/catalina/connector/Request.java b/core/src/main/java/org/apache/catalina/connector/Request.java
similarity index 97%
rename from src/main/java/org/apache/catalina/connector/Request.java
rename to core/src/main/java/org/apache/catalina/connector/Request.java
index 4fa593e..2ec3b89 100644
--- a/src/main/java/org/apache/catalina/connector/Request.java
+++ b/core/src/main/java/org/apache/catalina/connector/Request.java
@@ -22,7 +22,6 @@
import java.io.InputStream;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
-import java.lang.reflect.InvocationTargetException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
@@ -33,7 +32,6 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -59,6 +57,7 @@
import javax.servlet.ServletResponse;
import javax.servlet.SessionTrackingMode;
import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
@@ -66,7 +65,6 @@
import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.Part;
import javax.servlet.http.PushBuilder;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.Container;
import org.apache.catalina.Context;
@@ -86,6 +84,7 @@
import org.apache.catalina.mapper.MappingData;
import org.apache.catalina.util.ParameterMap;
import org.apache.catalina.util.RequestUtil;
+import org.apache.catalina.util.TLSUtil;
import org.apache.catalina.util.URLEncoder;
import org.apache.coyote.ActionCode;
import org.apache.coyote.UpgradeToken;
@@ -170,7 +169,7 @@ public void setCoyoteRequest(org.apache.coyote.Request coyoteRequest) {
* @return the Coyote request object
*/
public org.apache.coyote.Request getCoyoteRequest() {
- return (this.coyoteRequest);
+ return this.coyoteRequest;
}
@@ -856,48 +855,46 @@ public void setServerPort(int port) {
*/
@Override
public Object getAttribute(String name) {
-
// Special attributes
SpecialAttributeAdapter adapter = specialAttributes.get(name);
if (adapter != null) {
return adapter.get(this, name);
}
- Object attr=attributes.get(name);
+ Object attr = attributes.get(name);
- if(attr!=null) {
- return(attr);
+ if (attr != null) {
+ return attr;
}
- attr = coyoteRequest.getAttribute(name);
- if(attr != null) {
+ attr = coyoteRequest.getAttribute(name);
+ if (attr != null) {
return attr;
}
- if( isSSLAttribute(name) || name.equals(SSLSupport.PROTOCOL_VERSION_KEY)) {
- coyoteRequest.action(ActionCode.REQ_SSL_ATTRIBUTE,
- coyoteRequest);
+ if (TLSUtil.isTLSRequestAttribute(name)) {
+ coyoteRequest.action(ActionCode.REQ_SSL_ATTRIBUTE, coyoteRequest);
attr = coyoteRequest.getAttribute(Globals.CERTIFICATES_ATTR);
- if( attr != null) {
+ if (attr != null) {
attributes.put(Globals.CERTIFICATES_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.CIPHER_SUITE_ATTR);
- if(attr != null) {
+ if (attr != null) {
attributes.put(Globals.CIPHER_SUITE_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.KEY_SIZE_ATTR);
- if(attr != null) {
+ if (attr != null) {
attributes.put(Globals.KEY_SIZE_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.SSL_SESSION_ID_ATTR);
- if(attr != null) {
+ if (attr != null) {
attributes.put(Globals.SSL_SESSION_ID_ATTR, attr);
}
attr = coyoteRequest.getAttribute(Globals.SSL_SESSION_MGR_ATTR);
- if(attr != null) {
+ if (attr != null) {
attributes.put(Globals.SSL_SESSION_MGR_ATTR, attr);
}
attr = coyoteRequest.getAttribute(SSLSupport.PROTOCOL_VERSION_KEY);
- if(attr != null) {
+ if (attr != null) {
attributes.put(SSLSupport.PROTOCOL_VERSION_KEY, attr);
}
attr = attributes.get(name);
@@ -912,18 +909,6 @@ public long getContentLengthLong() {
return coyoteRequest.getContentLengthLong();
}
- /**
- * Test if a given name is one of the special Servlet-spec SSL attributes.
- *
- * @return true if this is a special SSL attribute
- */
- static boolean isSSLAttribute(String name) {
- return Globals.CERTIFICATES_ATTR.equals(name) ||
- Globals.CIPHER_SUITE_ATTR.equals(name) ||
- Globals.KEY_SIZE_ATTR.equals(name) ||
- Globals.SSL_SESSION_ID_ATTR.equals(name) ||
- Globals.SSL_SESSION_MGR_ATTR.equals(name);
- }
/**
* Return the names of all request attributes for this Request, or an
@@ -971,9 +956,9 @@ public Enumeration getAttributeNames() {
*/
@Override
public String getCharacterEncoding() {
- Charset charset = coyoteRequest.getCharset();
- if (charset != null) {
- return charset.name();
+ String characterEncoding = coyoteRequest.getCharacterEncoding();
+ if (characterEncoding != null) {
+ return characterEncoding;
}
Context context = getContext();
@@ -986,7 +971,12 @@ public String getCharacterEncoding() {
private Charset getCharset() {
- Charset charset = coyoteRequest.getCharset();
+ Charset charset = null;
+ try {
+ charset = coyoteRequest.getCharset();
+ } catch (UnsupportedEncodingException e) {
+ // Ignore
+ }
if (charset != null) {
return charset;
}
@@ -1247,7 +1237,7 @@ public String getRealPath(String path) {
}
try {
- return (servletContext.getRealPath(path));
+ return servletContext.getRealPath(path);
} catch (IllegalArgumentException e) {
return null;
}
@@ -1360,7 +1350,7 @@ public RequestDispatcher getRequestDispatcher(String path) {
if (path == null) {
return null;
} else if (path.startsWith("/")) {
- return (context.getServletContext().getRequestDispatcher(path));
+ return context.getServletContext().getRequestDispatcher(path);
}
// Convert a request-relative path to a context-relative one
@@ -1457,8 +1447,6 @@ public void removeAttribute(String name) {
// Notify interested application event listeners
notifyAttributeRemoved(name, value);
- } else {
- return;
}
}
@@ -1776,8 +1764,8 @@ public void addCookie(Cookie cookie) {
}
Cookie[] newCookies = new Cookie[size + 1];
- for (int i = 0; i < size; i++) {
- newCookies[i] = cookies[i];
+ if (cookies != null) {
+ System.arraycopy(cookies, 0, newCookies, 0, size);
}
newCookies[size] = cookie;
@@ -1955,36 +1943,40 @@ private Subject newSubject(final Principal principal) {
// --------------------------------------------- HttpServletRequest Methods
+ @Override
+ public boolean isTrailerFieldsReady() {
+ return coyoteRequest.isTrailerFieldsReady();
+ }
+
+
@Override
public Map getTrailerFields() {
+ if (!isTrailerFieldsReady()) {
+ throw new IllegalStateException(sm.getString("coyoteRequest.trailersNotReady"));
+ }
Map result = new HashMap<>();
result.putAll(coyoteRequest.getTrailerFields());
return result;
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 4.0
- */
@Override
public PushBuilder newPushBuilder() {
+ return newPushBuilder(this);
+ }
+
+
+ public PushBuilder newPushBuilder(HttpServletRequest request) {
AtomicBoolean result = new AtomicBoolean();
coyoteRequest.action(ActionCode.IS_PUSH_SUPPORTED, result);
if (result.get()) {
- return new ApplicationPushBuilder(this);
+ return new ApplicationPushBuilder(this, request);
} else {
return null;
}
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 3.1
- */
@SuppressWarnings("unchecked")
@Override
public T upgrade(
@@ -2000,8 +1992,7 @@ public T upgrade(
instanceManager = getContext().getInstanceManager();
handler = (T) instanceManager.newInstance(httpUpgradeHandlerClass);
}
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- NamingException | IllegalArgumentException | NoSuchMethodException |
+ } catch (ReflectiveOperationException | NamingException | IllegalArgumentException |
SecurityException e) {
throw new ServletException(e);
}
@@ -2175,7 +2166,7 @@ public long getDateHeader(String name) {
String value = getHeader(name);
if (value == null) {
- return (-1L);
+ return -1L;
}
// Attempt to convert the date header in a variety of formats
@@ -2238,7 +2229,7 @@ public int getIntHeader(String name) {
String value = getHeader(name);
if (value == null) {
- return (-1);
+ return -1;
}
return Integer.parseInt(value);
@@ -2246,8 +2237,8 @@ public int getIntHeader(String name) {
@Override
- public ServletMapping getServletMapping() {
- return applicationMapping.getServletMapping();
+ public HttpServletMapping getHttpServletMapping() {
+ return applicationMapping.getHttpServletMapping();
}
@@ -2353,7 +2344,7 @@ public StringBuffer getRequestURL() {
*/
@Override
public String getServletPath() {
- return (mappingData.wrapperPath.toString());
+ return mappingData.wrapperPath.toString();
}
@@ -2429,7 +2420,7 @@ public boolean isRequestedSessionIdFromURL() {
@Override
@Deprecated
public boolean isRequestedSessionIdFromUrl() {
- return (isRequestedSessionIdFromURL());
+ return isRequestedSessionIdFromURL();
}
@@ -2523,7 +2514,7 @@ public boolean isUserInRole(String role) {
}
// Check for a role defined directly as a
- return (realm.hasRole(getWrapper(), userPrincipal, role));
+ return realm.hasRole(getWrapper(), userPrincipal, role);
}
@@ -2869,6 +2860,10 @@ private void parseParts(boolean explicit) {
partsParseException = e;
}
} finally {
+ // This might look odd but is correct. setParseFailedReason() only
+ // sets the failure reason if none is currently set. This code could
+ // be more efficient but it is written this way to be robust with
+ // respect to changes in the remainder of the method.
if (partsParseException != null || !success) {
parameters.setParseFailedReason(FailReason.UNKNOWN);
}
@@ -2882,10 +2877,7 @@ private void parseParts(boolean explicit) {
@Override
public Part getPart(String name) throws IOException, IllegalStateException,
ServletException {
- Collection c = getParts();
- Iterator iterator = c.iterator();
- while (iterator.hasNext()) {
- Part part = iterator.next();
+ for (Part part : getParts()) {
if (name.equals(part.getName())) {
return part;
}
@@ -2901,7 +2893,7 @@ protected Session doGetSession(boolean create) {
// There cannot be a session if no context has been assigned yet
Context context = getContext();
if (context == null) {
- return (null);
+ return null;
}
// Return the current session if it exists and is valid
@@ -2909,13 +2901,13 @@ protected Session doGetSession(boolean create) {
session = null;
}
if (session != null) {
- return (session);
+ return session;
}
// Return the requested session if it exists and is valid
Manager manager = context.getManager();
if (manager == null) {
- return (null); // Sessions are not supported
+ return null; // Sessions are not supported
}
if (requestedSessionId != null) {
try {
@@ -2928,13 +2920,13 @@ protected Session doGetSession(boolean create) {
}
if (session != null) {
session.access();
- return (session);
+ return session;
}
}
// Create a new session if requested and the response is not committed
if (!create) {
- return (null);
+ return null;
}
if (response != null
&& context.getServletContext()
diff --git a/src/main/java/org/apache/catalina/connector/RequestFacade.java b/core/src/main/java/org/apache/catalina/connector/RequestFacade.java
similarity index 98%
rename from src/main/java/org/apache/catalina/connector/RequestFacade.java
rename to core/src/main/java/org/apache/catalina/connector/RequestFacade.java
index b9fdc16..11ad088 100644
--- a/src/main/java/org/apache/catalina/connector/RequestFacade.java
+++ b/core/src/main/java/org/apache/catalina/connector/RequestFacade.java
@@ -34,13 +34,13 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.Part;
import javax.servlet.http.PushBuilder;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.Globals;
import org.apache.catalina.security.SecurityUtil;
@@ -738,14 +738,14 @@ public int getIntHeader(String name) {
@Override
- public ServletMapping getServletMapping() {
+ public HttpServletMapping getHttpServletMapping() {
if (request == null) {
throw new IllegalStateException(
sm.getString("requestFacade.nullRequest"));
}
- return request.getServletMapping();
+ return request.getHttpServletMapping();
}
@@ -1068,11 +1068,13 @@ public AsyncContext getAsyncContext() {
return request.getAsyncContext();
}
+
@Override
public DispatcherType getDispatcherType() {
return request.getDispatcherType();
}
+
@Override
public boolean authenticate(HttpServletResponse response)
throws IOException, ServletException {
@@ -1096,31 +1098,25 @@ public Collection getParts() throws IllegalStateException,
return request.getParts();
}
+
@Override
public Part getPart(String name) throws IllegalStateException, IOException,
ServletException {
return request.getPart(name);
}
+
public boolean getAllowTrace() {
return request.getConnector().getAllowTrace();
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 3.1
- */
+
@Override
public long getContentLengthLong() {
return request.getContentLengthLong();
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 3.1
- */
+
@Override
public T upgrade(
Class httpUpgradeHandlerClass) throws java.io.IOException, ServletException {
@@ -1128,22 +1124,23 @@ public T upgrade(
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 4.0
- */
@Override
public PushBuilder newPushBuilder() {
return request.newPushBuilder();
}
- /**
- * {@inheritDoc}
- *
- * @since Servlet 4.0
- */
+ public PushBuilder newPushBuilder(HttpServletRequest request) {
+ return this.request.newPushBuilder(request);
+ }
+
+
+ @Override
+ public boolean isTrailerFieldsReady() {
+ return request.isTrailerFieldsReady();
+ }
+
+
@Override
public Map getTrailerFields() {
return request.getTrailerFields();
diff --git a/src/main/java/org/apache/catalina/connector/Response.java b/core/src/main/java/org/apache/catalina/connector/Response.java
similarity index 97%
rename from src/main/java/org/apache/catalina/connector/Response.java
rename to core/src/main/java/org/apache/catalina/connector/Response.java
index c6d8f64..cf57aef 100644
--- a/src/main/java/org/apache/catalina/connector/Response.java
+++ b/core/src/main/java/org/apache/catalina/connector/Response.java
@@ -33,9 +33,11 @@
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.TimeZone;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Supplier;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
@@ -49,12 +51,10 @@
import org.apache.catalina.Session;
import org.apache.catalina.Wrapper;
import org.apache.catalina.security.SecurityUtil;
-import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.SessionConfig;
import org.apache.coyote.ActionCode;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tomcat.util.buf.CharChunk;
import org.apache.tomcat.util.buf.UEncoder;
import org.apache.tomcat.util.buf.UEncoder.SafeCharsSet;
@@ -63,6 +63,7 @@
import org.apache.tomcat.util.http.MimeHeaders;
import org.apache.tomcat.util.http.parser.MediaTypeCache;
import org.apache.tomcat.util.res.StringManager;
+import org.apache.tomcat.util.security.Escape;
/**
* Wrapper object for the Coyote response.
@@ -139,7 +140,7 @@ public org.apache.coyote.Response getCoyoteResponse() {
* @return the Context within which this Request is being processed.
*/
public Context getContext() {
- return (request.getContext());
+ return request.getContext();
}
@@ -330,9 +331,9 @@ public void setAppCommitted(boolean appCommitted) {
* @return true if the application has committed the response
*/
public boolean isAppCommitted() {
- return (this.appCommitted || isCommitted() || isSuspended()
+ return this.appCommitted || isCommitted() || isSuspended()
|| ((getContentLength() > 0)
- && (getContentWritten() >= getContentLength())));
+ && (getContentWritten() >= getContentLength()));
}
@@ -345,7 +346,7 @@ public boolean isAppCommitted() {
* @return the Request with which this Response is associated.
*/
public org.apache.catalina.connector.Request getRequest() {
- return (this.request);
+ return this.request;
}
/**
@@ -551,9 +552,9 @@ public int getBufferSize() {
*/
@Override
public String getCharacterEncoding() {
- Charset charset = getCoyoteResponse().getCharset();
+ String charset = getCoyoteResponse().getCharacterEncoding();
if (charset != null) {
- return charset.name();
+ return charset;
}
Context context = getContext();
@@ -600,7 +601,7 @@ public ServletOutputStream getOutputStream()
*/
@Override
public Locale getLocale() {
- return (getCoyoteResponse().getLocale());
+ return getCoyoteResponse().getLocale();
}
@@ -802,7 +803,7 @@ public void setContentType(String type) {
// Ignore charset if getWriter() has already been called
if (!usingWriter) {
try {
- getCoyoteResponse().setCharset(B2CConverter.getCharset(m[1]));
+ getCoyoteResponse().setCharacterEncoding(m[1]);
} catch (UnsupportedEncodingException e) {
log.warn(sm.getString("coyoteResponse.encoding.invalid", m[1]), e);
}
@@ -839,7 +840,7 @@ public void setCharacterEncoding(String charset) {
}
try {
- getCoyoteResponse().setCharset(B2CConverter.getCharset(charset));
+ getCoyoteResponse().setCharacterEncoding(charset);
} catch (UnsupportedEncodingException e) {
log.warn(sm.getString("coyoteResponse.encoding.invalid", charset), e);
return;
@@ -881,7 +882,7 @@ public void setLocale(Locale locale) {
String charset = getContext().getCharset(locale);
if (charset != null) {
try {
- getCoyoteResponse().setCharset(B2CConverter.getCharset(charset));
+ getCoyoteResponse().setCharacterEncoding(charset);
} catch (UnsupportedEncodingException e) {
log.warn(sm.getString("coyoteResponse.encoding.invalid", charset), e);
}
@@ -1152,6 +1153,18 @@ public boolean containsHeader(String name) {
}
+ @Override
+ public void setTrailerFields(Supplier> supplier) {
+ getCoyoteResponse().setTrailerFields(supplier);
+ }
+
+
+ @Override
+ public Supplier> getTrailerFields() {
+ return getCoyoteResponse().getTrailerFields();
+ }
+
+
/**
* Encode the session identifier associated with this response
* into the specified redirect URL, if necessary.
@@ -1161,13 +1174,11 @@ public boolean containsHeader(String name) {
*/
@Override
public String encodeRedirectURL(String url) {
-
if (isEncodeable(toAbsolute(url))) {
- return (toEncoded(url, request.getSessionInternal().getIdInternal()));
+ return toEncoded(url, request.getSessionInternal().getIdInternal());
} else {
- return (url);
+ return url;
}
-
}
@@ -1184,7 +1195,7 @@ public String encodeRedirectURL(String url) {
@Override
@Deprecated
public String encodeRedirectUrl(String url) {
- return (encodeRedirectURL(url));
+ return encodeRedirectURL(url);
}
@@ -1213,9 +1224,9 @@ public String encodeURL(String url) {
} else if (url.equals(absolute) && !hasPath(url)) {
url += '/';
}
- return (toEncoded(url, request.getSessionInternal().getIdInternal()));
+ return toEncoded(url, request.getSessionInternal().getIdInternal());
} else {
- return (url);
+ return url;
}
}
@@ -1234,7 +1245,7 @@ public String encodeURL(String url) {
@Override
@Deprecated
public String encodeUrl(String url) {
- return (encodeURL(url));
+ return encodeURL(url);
}
@@ -1363,7 +1374,7 @@ public void sendRedirect(String location, int status) throws IOException {
if (getContext().getSendRedirectBody()) {
PrintWriter writer = getWriter();
writer.print(sm.getString("coyoteResponse.sendRedirect.note",
- RequestUtil.filter(locationUri)));
+ Escape.htmlElementContent(locationUri)));
flushBuffer();
}
} catch (IllegalArgumentException e) {
@@ -1630,7 +1641,7 @@ private static boolean doIsEncodeable(Context context, Request hreq, Session ses
protected String toAbsolute(String location) {
if (location == null) {
- return (location);
+ return location;
}
boolean leadingSlash = location.startsWith("/");
@@ -1705,7 +1716,7 @@ protected String toAbsolute(String location) {
} else {
- return (location);
+ return location;
}
@@ -1801,9 +1812,7 @@ private void normalize(CharChunk cc) {
}
private void copyChars(char[] c, int dest, int src, int len) {
- for (int pos = 0; pos < len; pos++) {
- c[pos + dest] = c[pos + src];
- }
+ System.arraycopy(c, src, c, dest, len);
}
@@ -1834,9 +1843,8 @@ private boolean hasPath(String uri) {
* @return the encoded URL
*/
protected String toEncoded(String url, String sessionId) {
-
if ((url == null) || (sessionId == null)) {
- return (url);
+ return url;
}
String path = url;
@@ -1862,8 +1870,7 @@ protected String toEncoded(String url, String sessionId) {
}
sb.append(anchor);
sb.append(query);
- return (sb.toString());
-
+ return sb.toString();
}
diff --git a/src/main/java/org/apache/catalina/connector/ResponseFacade.java b/core/src/main/java/org/apache/catalina/connector/ResponseFacade.java
similarity index 97%
rename from src/main/java/org/apache/catalina/connector/ResponseFacade.java
rename to core/src/main/java/org/apache/catalina/connector/ResponseFacade.java
index 6767885..6c04b17 100644
--- a/src/main/java/org/apache/catalina/connector/ResponseFacade.java
+++ b/core/src/main/java/org/apache/catalina/connector/ResponseFacade.java
@@ -24,6 +24,8 @@
import java.security.PrivilegedExceptionAction;
import java.util.Collection;
import java.util.Locale;
+import java.util.Map;
+import java.util.function.Supplier;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
@@ -209,7 +211,7 @@ public ServletOutputStream getOutputStream()
if (isFinished()) {
response.setSuspended(true);
}
- return (sos);
+ return sos;
}
@@ -226,7 +228,7 @@ public PrintWriter getWriter()
if (isFinished()) {
response.setSuspended(true);
}
- return (writer);
+ return writer;
}
@@ -333,7 +335,7 @@ public boolean isCommitted() {
sm.getString("responseFacade.nullResponse"));
}
- return (response.isAppCommitted());
+ return response.isAppCommitted();
}
@@ -640,4 +642,16 @@ public Collection getHeaderNames() {
public Collection getHeaders(String name) {
return response.getHeaders(name);
}
+
+
+ @Override
+ public void setTrailerFields(Supplier> supplier) {
+ response.setTrailerFields(supplier);
+ }
+
+
+ @Override
+ public Supplier> getTrailerFields() {
+ return response.getTrailerFields();
+ }
}
diff --git a/src/main/java/org/apache/catalina/connector/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/connector/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/connector/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/connector/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/core/AccessLogAdapter.java b/core/src/main/java/org/apache/catalina/core/AccessLogAdapter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/AccessLogAdapter.java
rename to core/src/main/java/org/apache/catalina/core/AccessLogAdapter.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationContext.java b/core/src/main/java/org/apache/catalina/core/ApplicationContext.java
similarity index 94%
rename from src/main/java/org/apache/catalina/core/ApplicationContext.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationContext.java
index 0ac897c..09d6110 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationContext.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationContext.java
@@ -30,7 +30,6 @@
import java.util.EventListener;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -53,10 +52,10 @@
import javax.servlet.SessionCookieConfig;
import javax.servlet.SessionTrackingMode;
import javax.servlet.descriptor.JspConfigDescriptor;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionIdListener;
import javax.servlet.http.HttpSessionListener;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.Container;
import org.apache.catalina.Context;
@@ -213,7 +212,7 @@ public ApplicationContext(StandardContext context) {
@Override
public Object getAttribute(String name) {
- return (attributes.get(name));
+ return attributes.get(name);
}
@@ -348,14 +347,14 @@ public int getMinorVersion() {
public String getMimeType(String file) {
if (file == null)
- return (null);
+ return null;
int period = file.lastIndexOf('.');
if (period < 0)
- return (null);
+ return null;
String extension = file.substring(period + 1);
if (extension.length() < 1)
- return (null);
- return (context.findMimeMapping(extension));
+ return null;
+ return context.findMimeMapping(extension);
}
@@ -371,12 +370,12 @@ public RequestDispatcher getNamedDispatcher(String name) {
// Validate the name argument
if (name == null)
- return (null);
+ return null;
// Create and return a corresponding request dispatcher
Wrapper wrapper = (Wrapper) context.findChild(name);
if (wrapper == null)
- return (null);
+ return null;
return new ApplicationDispatcher(wrapper, null, null, null, null, null, name);
@@ -391,28 +390,35 @@ public String getRealPath(String path) {
@Override
- public RequestDispatcher getRequestDispatcher(String path) {
+ public RequestDispatcher getRequestDispatcher(final String path) {
// Validate the path argument
- if (path == null)
- return (null);
- if (!path.startsWith("/"))
- throw new IllegalArgumentException
- (sm.getString
- ("applicationContext.requestDispatcher.iae", path));
+ if (path == null) {
+ return null;
+ }
+ if (!path.startsWith("/")) {
+ throw new IllegalArgumentException(
+ sm.getString("applicationContext.requestDispatcher.iae", path));
+ }
- // Get query string
- String queryString = null;
- String normalizedPath = path;
- int pos = normalizedPath.indexOf('?');
+ // Need to separate the query string and the uri. This is required for
+ // the ApplicationDispatcher constructor. Mapping also requires the uri
+ // without the query string.
+ String uri;
+ String queryString;
+ int pos = path.indexOf('?');
if (pos >= 0) {
- queryString = normalizedPath.substring(pos + 1);
- normalizedPath = normalizedPath.substring(0, pos);
+ uri = path.substring(0, pos);
+ queryString = path.substring(pos + 1);
+ } else {
+ uri = path;
+ queryString = null;
}
- normalizedPath = RequestUtil.normalize(normalizedPath);
- if (normalizedPath == null)
- return (null);
+ String normalizedPath = RequestUtil.normalize(uri);
+ if (normalizedPath == null) {
+ return null;
+ }
if (getContext().getDispatchersUseEncodedPaths()) {
// Decode
@@ -432,6 +438,15 @@ public RequestDispatcher getRequestDispatcher(String path) {
new IllegalArgumentException());
return null;
}
+
+ // URI needs to include the context path
+ uri = URLEncoder.DEFAULT.encode(getContextPath(), StandardCharsets.UTF_8) + uri;
+ } else {
+ // uri is passed to the constructor for ApplicationDispatcher and is
+ // ultimately used as the value for getRequestURI() which returns
+ // encoded values. Therefore, since the value passed in for path
+ // was decoded, encode uri here.
+ uri = URLEncoder.DEFAULT.encode(getContextPath() + uri, StandardCharsets.UTF_8);
}
pos = normalizedPath.length();
@@ -464,7 +479,7 @@ public RequestDispatcher getRequestDispatcher(String path) {
uriCC.append(normalizedPath, 0, semicolon > 0 ? semicolon : pos);
service.getMapper().map(context, uriMB, mappingData);
if (mappingData.wrapper == null) {
- return (null);
+ return null;
}
/*
* Append any trailing path params (separated by ';') that were
@@ -477,20 +492,18 @@ public RequestDispatcher getRequestDispatcher(String path) {
} catch (Exception e) {
// Should never happen
log(sm.getString("applicationContext.mapping.error"), e);
- return (null);
+ return null;
}
Wrapper wrapper = mappingData.wrapper;
String wrapperPath = mappingData.wrapperPath.toString();
String pathInfo = mappingData.pathInfo.toString();
- ServletMapping mapping = (new ApplicationMapping(mappingData)).getServletMapping();
+ HttpServletMapping mapping = new ApplicationMapping(mappingData).getHttpServletMapping();
mappingData.recycle();
- String encodedUri = URLEncoder.DEFAULT.encode(uriCC.toString(), StandardCharsets.UTF_8);
-
// Construct a RequestDispatcher to process this request
- return new ApplicationDispatcher(wrapper, encodedUri, wrapperPath, pathInfo,
+ return new ApplicationDispatcher(wrapper, uri, wrapperPath, pathInfo,
queryString, mapping, null);
}
@@ -677,9 +690,10 @@ public void removeAttribute(String name) {
@Override
public void setAttribute(String name, Object value) {
// Name cannot be null
- if (name == null)
- throw new IllegalArgumentException
+ if (name == null) {
+ throw new NullPointerException
(sm.getString("applicationContext.setAttribute.namenull"));
+ }
// Null value is the same as removeAttribute()
if (value == null) {
@@ -812,8 +826,7 @@ public T createFilter(Class c) throws ServletException {
} catch (InvocationTargetException e) {
ExceptionUtils.handleThrowable(e.getCause());
throw new ServletException(e);
- } catch (IllegalAccessException | NamingException | InstantiationException |
- ClassNotFoundException | NoSuchMethodException e) {
+ } catch (ReflectiveOperationException | NamingException e) {
throw new ServletException(e);
}
}
@@ -946,8 +959,7 @@ public T createServlet(Class c)
} catch (InvocationTargetException e) {
ExceptionUtils.handleThrowable(e.getCause());
throw new ServletException(e);
- } catch (IllegalAccessException | NamingException | InstantiationException |
- ClassNotFoundException | NoSuchMethodException e) {
+ } catch (ReflectiveOperationException | NamingException e) {
throw new ServletException(e);
}
}
@@ -1042,6 +1054,11 @@ public void setSessionTrackingModes(Set sessionTrackingMode
@Override
public boolean setInitParameter(String name, String value) {
+ // Name cannot be null
+ if (name == null) {
+ throw new NullPointerException
+ (sm.getString("applicationContext.setAttribute.namenull"));
+ }
if (!context.getState().equals(LifecycleState.STARTING_PREP)) {
throw new IllegalStateException(
sm.getString("applicationContext.setInitParam.ise",
@@ -1087,8 +1104,7 @@ public void addListener(String className) {
throw new IllegalArgumentException(sm.getString(
"applicationContext.addListener.iae.cnfe", className),
e);
- } catch (IllegalAccessException | NamingException | InstantiationException |
- ClassNotFoundException | NoSuchMethodException e) {
+ } catch (ReflectiveOperationException| NamingException e) {
throw new IllegalArgumentException(sm.getString(
"applicationContext.addListener.iae.cnfe", className),
e);
@@ -1160,8 +1176,7 @@ public T createListener(Class c)
} catch (InvocationTargetException e) {
ExceptionUtils.handleThrowable(e.getCause());
throw new ServletException(e);
- } catch (IllegalAccessException | NamingException | InstantiationException |
- NoSuchMethodException e) {
+ } catch (ReflectiveOperationException | NamingException e) {
throw new ServletException(e);
}
}
@@ -1254,7 +1269,7 @@ public JspConfigDescriptor getJspConfigDescriptor() {
Container[] wrappers = context.findChildren();
for (Container wrapper : wrappers) {
- result.put(((Wrapper) wrapper).getName(),
+ result.put(wrapper.getName(),
new ApplicationServletRegistration(
(Wrapper) wrapper, context));
}
@@ -1337,17 +1352,14 @@ protected StandardContext getContext() {
protected void clearAttributes() {
// Create list of attributes to be removed
- ArrayList list = new ArrayList<>();
- Iterator iter = attributes.keySet().iterator();
- while (iter.hasNext()) {
- list.add(iter.next());
+ List list = new ArrayList<>();
+ for (String s : attributes.keySet()) {
+ list.add(s);
}
// Remove application originated attributes
// (read only attributes will be left in place)
- Iterator keys = list.iterator();
- while (keys.hasNext()) {
- String key = keys.next();
+ for (String key : list) {
removeAttribute(key);
}
@@ -1358,9 +1370,7 @@ protected void clearAttributes() {
* @return the facade associated with this ApplicationContext.
*/
protected ServletContext getFacade() {
-
- return (this.facade);
-
+ return this.facade;
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationContextFacade.java b/core/src/main/java/org/apache/catalina/core/ApplicationContextFacade.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/ApplicationContextFacade.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationContextFacade.java
index ed623f7..8d506b9 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationContextFacade.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationContextFacade.java
@@ -145,7 +145,7 @@ public ServletContext getContext(String uripath) {
(theContext instanceof ApplicationContext)){
theContext = ((ApplicationContext)theContext).getFacade();
}
- return (theContext);
+ return theContext;
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java b/core/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java
similarity index 98%
rename from src/main/java/org/apache/catalina/core/ApplicationDispatcher.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java
index e88ed38..a1062ae 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java
@@ -33,9 +33,9 @@
import javax.servlet.ServletResponse;
import javax.servlet.ServletResponseWrapper;
import javax.servlet.UnavailableException;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.AsyncDispatcher;
import org.apache.catalina.Context;
@@ -207,7 +207,7 @@ private static class State {
*/
public ApplicationDispatcher
(Wrapper wrapper, String requestURI, String servletPath,
- String pathInfo, String queryString, ServletMapping mapping, String name) {
+ String pathInfo, String queryString, HttpServletMapping mapping, String name) {
super();
@@ -264,7 +264,7 @@ private static class State {
/**
* The mapping for this RequestDispatcher.
*/
- private final ServletMapping mapping;
+ private final HttpServletMapping mapping;
/**
@@ -368,7 +368,7 @@ private void doForward(ServletRequest request, ServletResponse response)
hrequest.getPathInfo());
wrequest.setAttribute(RequestDispatcher.FORWARD_QUERY_STRING,
hrequest.getQueryString());
- wrequest.setAttribute(RequestDispatcher.FORWARD_MAPPING, hrequest.getServletMapping());
+ wrequest.setAttribute(RequestDispatcher.FORWARD_MAPPING, hrequest.getHttpServletMapping());
}
wrequest.setContextPath(context.getPath());
@@ -616,7 +616,7 @@ private void doDispatch(ServletRequest request, ServletResponse response)
wrequest.setAttribute(Globals.DISPATCHER_TYPE_ATTR, DispatcherType.ASYNC);
wrequest.setAttribute(Globals.DISPATCHER_REQUEST_PATH_ATTR, getCombinedPath());
- wrequest.setAttribute(AsyncContext.ASYNC_MAPPING, hrequest.getServletMapping());
+ wrequest.setAttribute(AsyncContext.ASYNC_MAPPING, hrequest.getHttpServletMapping());
wrequest.setContextPath(context.getPath());
wrequest.setRequestURI(requestURI);
@@ -626,7 +626,9 @@ private void doDispatch(ServletRequest request, ServletResponse response)
wrequest.setQueryString(queryString);
wrequest.setQueryParams(queryString);
}
- wrequest.setMapping(mapping);
+ if (!Globals.STRICT_SERVLET_COMPLIANCE) {
+ wrequest.setMapping(mapping);
+ }
invoke(state.outerRequest, state.outerResponse, state);
}
@@ -922,7 +924,7 @@ private ServletRequest wrapRequest(State state) {
else
((ServletRequestWrapper) previous).setRequest(wrapper);
state.wrapRequest = wrapper;
- return (wrapper);
+ return wrapper;
}
@@ -967,7 +969,7 @@ private ServletResponse wrapResponse(State state) {
else
((ServletResponseWrapper) previous).setResponse(wrapper);
state.wrapResponse = wrapper;
- return (wrapper);
+ return wrapper;
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationFilterChain.java b/core/src/main/java/org/apache/catalina/core/ApplicationFilterChain.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationFilterChain.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationFilterChain.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java b/core/src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java
similarity index 91%
rename from src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java
index 96d36f3..e8861a2 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationFilterConfig.java
@@ -20,7 +20,6 @@
import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
@@ -89,15 +88,12 @@ public final class ApplicationFilterConfig implements FilterConfig, Serializable
* instantiating the filter object
* @exception ServletException if thrown by the filter's init() method
* @throws NamingException
- * @throws InvocationTargetException
* @throws SecurityException
- * @throws NoSuchMethodException
* @throws IllegalArgumentException
*/
ApplicationFilterConfig(Context context, FilterDef filterDef)
- throws ClassCastException, ClassNotFoundException, IllegalAccessException,
- InstantiationException, ServletException, InvocationTargetException, NamingException,
- IllegalArgumentException, NoSuchMethodException, SecurityException {
+ throws ClassCastException, ReflectiveOperationException, ServletException,
+ NamingException, IllegalArgumentException, SecurityException {
super();
@@ -152,7 +148,7 @@ public final class ApplicationFilterConfig implements FilterConfig, Serializable
*/
@Override
public String getFilterName() {
- return (filterDef.getFilterName());
+ return filterDef.getFilterName();
}
/**
@@ -174,7 +170,7 @@ public String getInitParameter(String name) {
Map map = filterDef.getParameterMap();
if (map == null) {
- return (null);
+ return null;
}
return map.get(name);
@@ -214,15 +210,13 @@ public ServletContext getServletContext() {
*/
@Override
public String toString() {
-
StringBuilder sb = new StringBuilder("ApplicationFilterConfig[");
sb.append("name=");
sb.append(filterDef.getFilterName());
sb.append(", filterClass=");
sb.append(filterDef.getFilterClass());
sb.append("]");
- return (sb.toString());
-
+ return sb.toString();
}
// --------------------------------------------------------- Public Methods
@@ -246,18 +240,16 @@ public Map getFilterInitParameterMap() {
* instantiating the filter object
* @exception ServletException if thrown by the filter's init() method
* @throws NamingException
- * @throws InvocationTargetException
+ * @throws ReflectiveOperationException
* @throws SecurityException
- * @throws NoSuchMethodException
* @throws IllegalArgumentException
*/
- Filter getFilter() throws ClassCastException, ClassNotFoundException, IllegalAccessException,
- InstantiationException, ServletException, InvocationTargetException, NamingException,
- IllegalArgumentException, NoSuchMethodException, SecurityException {
+ Filter getFilter() throws ClassCastException, ReflectiveOperationException, ServletException,
+ NamingException, IllegalArgumentException, SecurityException {
// Return the existing filter instance, if any
if (this.filter != null)
- return (this.filter);
+ return this.filter;
// Identify the class loader we will be using
String filterClass = filterDef.getFilterClass();
@@ -265,7 +257,7 @@ Filter getFilter() throws ClassCastException, ClassNotFoundException, IllegalAcc
initFilter();
- return (this.filter);
+ return this.filter;
}
@@ -293,9 +285,7 @@ private void initFilter() throws ServletException {
* Return the filter definition we are configured for.
*/
FilterDef getFilterDef() {
-
- return (this.filterDef);
-
+ return this.filterDef;
}
/**
@@ -326,7 +316,7 @@ void release() {
}
if (!context.getIgnoreAnnotations()) {
try {
- ((StandardContext) context).getInstanceManager().destroyInstance(this.filter);
+ context.getInstanceManager().destroyInstance(this.filter);
} catch (Exception e) {
Throwable t = ExceptionUtils
.unwrapInvocationTargetException(e);
@@ -347,7 +337,7 @@ void release() {
private InstanceManager getInstanceManager() {
if (instanceManager == null) {
if (context instanceof StandardContext) {
- instanceManager = ((StandardContext)context).getInstanceManager();
+ instanceManager = context.getInstanceManager();
} else {
instanceManager = new DefaultInstanceManager(null,
new HashMap>(),
diff --git a/src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java b/core/src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java
similarity index 97%
rename from src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java
index 977eec7..e066f94 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationFilterFactory.java
@@ -85,7 +85,7 @@ public static ApplicationFilterChain createFilterChain(ServletRequest request,
// If there are no filter mappings, we are done
if ((filterMaps == null) || (filterMaps.length == 0))
- return (filterChain);
+ return filterChain;
// Acquire the information we will need to match filter mappings
DispatcherType dispatcher =
@@ -212,8 +212,8 @@ private static boolean matchFiltersURL(String testPath, String requestPath) {
&& (period != requestPath.length() - 1)
&& ((requestPath.length() - period)
== (testPath.length() - 1))) {
- return (testPath.regionMatches(2, requestPath, period + 1,
- testPath.length() - 2));
+ return testPath.regionMatches(2, requestPath, period + 1,
+ testPath.length() - 2);
}
}
@@ -260,27 +260,27 @@ else if (filterMap.getMatchAllServletNames()) {
private static boolean matchDispatcher(FilterMap filterMap, DispatcherType type) {
switch (type) {
case FORWARD :
- if ((filterMap.getDispatcherMapping() & FilterMap.FORWARD) > 0) {
- return true;
+ if ((filterMap.getDispatcherMapping() & FilterMap.FORWARD) != 0) {
+ return true;
}
break;
case INCLUDE :
- if ((filterMap.getDispatcherMapping() & FilterMap.INCLUDE) > 0) {
+ if ((filterMap.getDispatcherMapping() & FilterMap.INCLUDE) != 0) {
return true;
}
break;
case REQUEST :
- if ((filterMap.getDispatcherMapping() & FilterMap.REQUEST) > 0) {
+ if ((filterMap.getDispatcherMapping() & FilterMap.REQUEST) != 0) {
return true;
}
break;
case ERROR :
- if ((filterMap.getDispatcherMapping() & FilterMap.ERROR) > 0) {
+ if ((filterMap.getDispatcherMapping() & FilterMap.ERROR) != 0) {
return true;
}
break;
case ASYNC :
- if ((filterMap.getDispatcherMapping() & FilterMap.ASYNC) > 0) {
+ if ((filterMap.getDispatcherMapping() & FilterMap.ASYNC) != 0) {
return true;
}
break;
diff --git a/src/main/java/org/apache/catalina/core/ApplicationFilterRegistration.java b/core/src/main/java/org/apache/catalina/core/ApplicationFilterRegistration.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationFilterRegistration.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationFilterRegistration.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java b/core/src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java
similarity index 94%
rename from src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java
index 9be932c..fc3a1d6 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationHttpRequest.java
@@ -26,22 +26,26 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;
import javax.servlet.http.PushBuilder;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
+import org.apache.catalina.connector.RequestFacade;
import org.apache.catalina.util.ParameterMap;
import org.apache.catalina.util.RequestUtil;
import org.apache.tomcat.util.buf.B2CConverter;
@@ -192,7 +196,7 @@ public ApplicationHttpRequest(HttpServletRequest request, Context context,
/**
* The mapping for this request.
*/
- private ServletMapping mapping = null;
+ private HttpServletMapping mapping = null;
/**
@@ -261,7 +265,7 @@ public Object getAttribute(String name) {
*/
@Override
public Enumeration getAttributeNames() {
- return (new AttributeNamesEnumerator());
+ return new AttributeNamesEnumerator();
}
@@ -315,13 +319,13 @@ public void setAttribute(String name, Object value) {
public RequestDispatcher getRequestDispatcher(String path) {
if (context == null)
- return (null);
+ return null;
// If the path is already context-relative, just pass it through
if (path == null)
- return (null);
+ return null;
else if (path.startsWith("/"))
- return (context.getServletContext().getRequestDispatcher(path));
+ return context.getServletContext().getRequestDispatcher(path);
// Convert a request-relative path to a context-relative one
String servletPath =
@@ -347,7 +351,7 @@ else if (path.startsWith("/"))
relative = requestPath + path;
}
- return (context.getServletContext().getRequestDispatcher(relative));
+ return context.getServletContext().getRequestDispatcher(relative);
}
@@ -371,9 +375,7 @@ public DispatcherType getDispatcherType() {
*/
@Override
public String getContextPath() {
-
- return (this.contextPath);
-
+ return this.contextPath;
}
@@ -384,7 +386,6 @@ public String getContextPath() {
*/
@Override
public String getParameter(String name) {
-
parseParameters();
String[] value = parameters.get(name);
@@ -392,7 +393,6 @@ public String getParameter(String name) {
return null;
}
return value[0];
-
}
@@ -402,10 +402,8 @@ public String getParameter(String name) {
*/
@Override
public Map getParameterMap() {
-
parseParameters();
- return (parameters);
-
+ return parameters;
}
@@ -415,7 +413,6 @@ public Map getParameterMap() {
*/
@Override
public Enumeration getParameterNames() {
-
parseParameters();
return Collections.enumeration(parameters.keySet());
}
@@ -429,10 +426,8 @@ public Enumeration getParameterNames() {
*/
@Override
public String[] getParameterValues(String name) {
-
parseParameters();
return parameters.get(name);
-
}
@@ -441,9 +436,7 @@ public String[] getParameterValues(String name) {
*/
@Override
public String getPathInfo() {
-
- return (this.pathInfo);
-
+ return this.pathInfo;
}
@@ -467,9 +460,7 @@ public String getPathTranslated() {
*/
@Override
public String getQueryString() {
-
- return (this.queryString);
-
+ return this.queryString;
}
@@ -479,9 +470,7 @@ public String getQueryString() {
*/
@Override
public String getRequestURI() {
-
- return (this.requestURI);
-
+ return this.requestURI;
}
@@ -501,14 +490,12 @@ public StringBuffer getRequestURL() {
*/
@Override
public String getServletPath() {
-
- return (this.servletPath);
-
+ return this.servletPath;
}
@Override
- public ServletMapping getServletMapping() {
+ public HttpServletMapping getHttpServletMapping() {
return mapping;
}
@@ -519,7 +506,7 @@ public ServletMapping getServletMapping() {
*/
@Override
public HttpSession getSession() {
- return (getSession(true));
+ return getSession(true);
}
@@ -536,11 +523,11 @@ public HttpSession getSession(boolean create) {
// There cannot be a session if no context has been assigned yet
if (context == null)
- return (null);
+ return null;
// Return the current session if it exists and is valid
if (session != null && session.isValid()) {
- return (session.getSession());
+ return session.getSession();
}
HttpSession other = super.getSession(false);
@@ -620,7 +607,15 @@ public boolean isRequestedSessionIdValid() {
@Override
public PushBuilder newPushBuilder() {
- return new ApplicationPushBuilder(this);
+ ServletRequest current = getRequest();
+ while (current instanceof ServletRequestWrapper) {
+ current = ((ServletRequestWrapper) current).getRequest();
+ }
+ if (current instanceof RequestFacade) {
+ return ((RequestFacade) current).newPushBuilder(this);
+ } else {
+ return null;
+ }
}
@@ -692,7 +687,7 @@ void setRequest(HttpServletRequest request) {
queryString = request.getQueryString();
requestURI = request.getRequestURI();
servletPath = request.getServletPath();
- mapping = request.getServletMapping();
+ mapping = request.getHttpServletMapping();
}
@@ -751,7 +746,7 @@ void setQueryParams(String queryString) {
}
- void setMapping(ServletMapping mapping) {
+ void setMapping(HttpServletMapping mapping) {
this.mapping = mapping;
}
@@ -784,10 +779,10 @@ protected boolean isSpecial(String name) {
protected int getSpecial(String name) {
for (int i = 0; i < specials.length; i++) {
if (specials[i].equals(name)) {
- return (i);
+ return i;
}
}
- return (-1);
+ return -1;
}
@@ -831,7 +826,7 @@ protected boolean removeSpecial(String name) {
*/
private String[] mergeValues(String[] values1, String[] values2) {
- ArrayList results = new ArrayList<>();
+ List results = new ArrayList<>();
if (values1 == null) {
// Skip - nothing to merge
@@ -948,7 +943,7 @@ public String nextElement() {
for (int i = pos + 1; i <= last; i++) {
if (getAttribute(specials[i]) != null) {
pos = i;
- return (specials[i]);
+ return specials[i];
}
}
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationHttpResponse.java b/core/src/main/java/org/apache/catalina/core/ApplicationHttpResponse.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationHttpResponse.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationHttpResponse.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationMapping.java b/core/src/main/java/org/apache/catalina/core/ApplicationMapping.java
similarity index 55%
rename from src/main/java/org/apache/catalina/core/ApplicationMapping.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationMapping.java
index 42a5865..c6e4f0f 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationMapping.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationMapping.java
@@ -16,8 +16,8 @@
*/
package org.apache.catalina.core;
+import javax.servlet.http.HttpServletMapping;
import javax.servlet.http.MappingMatch;
-import javax.servlet.http.ServletMapping;
import org.apache.catalina.mapper.MappingData;
@@ -25,13 +25,13 @@ public class ApplicationMapping {
private final MappingData mappingData;
- private volatile ServletMapping mapping = null;
+ private volatile HttpServletMapping mapping = null;
public ApplicationMapping(MappingData mappingData) {
this.mappingData = mappingData;
}
- public ServletMapping getServletMapping() {
+ public HttpServletMapping getHttpServletMapping() {
if (mapping == null) {
String servletName;
if (mappingData.wrapper == null) {
@@ -39,36 +39,37 @@ public ServletMapping getServletMapping() {
} else {
servletName = mappingData.wrapper.getName();
}
- switch (mappingData.matchType) {
- case CONTEXT_ROOT:
- mapping = new MappingImpl("", "", mappingData.matchType, servletName);
- break;
- case DEFAULT:
- mapping = new MappingImpl("", "/", mappingData.matchType, servletName);
- break;
- case EXACT:
- mapping = new MappingImpl(mappingData.wrapperPath.toString().substring(1),
- mappingData.wrapperPath.toString(), mappingData.matchType, servletName);
- break;
- case EXTENSION:
- String path = mappingData.wrapperPath.toString();
- int extIndex = path.lastIndexOf('.');
- mapping = new MappingImpl(path.substring(1, extIndex),
- "*" + path.substring(extIndex), mappingData.matchType, servletName);
- break;
- case PATH:
- String matchValue;
- if (mappingData.pathInfo.isNull()) {
- matchValue = null;
- } else {
- matchValue = mappingData.pathInfo.toString().substring(1);
- }
- mapping = new MappingImpl(matchValue, mappingData.wrapperPath.toString() + "/*",
- mappingData.matchType, servletName);
- break;
- case UNKNOWN:
- mapping = new MappingImpl("", "", mappingData.matchType, servletName);
- break;
+ if (mappingData.matchType == null) {
+ mapping = new MappingImpl("", "", null, servletName);
+ } else {
+ switch (mappingData.matchType) {
+ case CONTEXT_ROOT:
+ mapping = new MappingImpl("", "", mappingData.matchType, servletName);
+ break;
+ case DEFAULT:
+ mapping = new MappingImpl("", "/", mappingData.matchType, servletName);
+ break;
+ case EXACT:
+ mapping = new MappingImpl(mappingData.wrapperPath.toString().substring(1),
+ mappingData.wrapperPath.toString(), mappingData.matchType, servletName);
+ break;
+ case EXTENSION:
+ String path = mappingData.wrapperPath.toString();
+ int extIndex = path.lastIndexOf('.');
+ mapping = new MappingImpl(path.substring(1, extIndex),
+ "*" + path.substring(extIndex), mappingData.matchType, servletName);
+ break;
+ case PATH:
+ String matchValue;
+ if (mappingData.pathInfo.isNull()) {
+ matchValue = null;
+ } else {
+ matchValue = mappingData.pathInfo.toString().substring(1);
+ }
+ mapping = new MappingImpl(matchValue, mappingData.wrapperPath.toString() + "/*",
+ mappingData.matchType, servletName);
+ break;
+ }
}
}
@@ -79,7 +80,7 @@ public void recycle() {
mapping = null;
}
- private static class MappingImpl implements ServletMapping {
+ private static class MappingImpl implements HttpServletMapping {
private final String matchValue;
private final String pattern;
diff --git a/src/main/java/org/apache/catalina/core/ApplicationPart.java b/core/src/main/java/org/apache/catalina/core/ApplicationPart.java
similarity index 96%
rename from src/main/java/org/apache/catalina/core/ApplicationPart.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationPart.java
index 9f1ec4e..d6400b5 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationPart.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationPart.java
@@ -62,7 +62,7 @@ public String getContentType() {
@Override
public String getHeader(String name) {
if (fileItem instanceof DiskFileItem) {
- return ((DiskFileItem) fileItem).getHeaders().getHeader(name);
+ return fileItem.getHeaders().getHeader(name);
}
return null;
}
@@ -72,7 +72,7 @@ public Collection getHeaderNames() {
if (fileItem instanceof DiskFileItem) {
LinkedHashSet headerNames = new LinkedHashSet<>();
Iterator iter =
- ((DiskFileItem) fileItem).getHeaders().getHeaderNames();
+ fileItem.getHeaders().getHeaderNames();
while (iter.hasNext()) {
headerNames.add(iter.next());
}
@@ -86,7 +86,7 @@ public Collection getHeaders(String name) {
if (fileItem instanceof DiskFileItem) {
LinkedHashSet headers = new LinkedHashSet<>();
Iterator iter =
- ((DiskFileItem) fileItem).getHeaders().getHeaders(name);
+ fileItem.getHeaders().getHeaders(name);
while (iter.hasNext()) {
headers.add(iter.next());
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java b/core/src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java
similarity index 91%
rename from src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java
index cfa474d..a2f163e 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationPushBuilder.java
@@ -26,8 +26,6 @@
import java.util.Map;
import java.util.Set;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletRequestWrapper;
import javax.servlet.SessionTrackingMode;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@@ -35,6 +33,7 @@
import javax.servlet.http.PushBuilder;
import org.apache.catalina.Context;
+import org.apache.catalina.authenticator.AuthenticatorBase;
import org.apache.catalina.connector.Request;
import org.apache.catalina.util.SessionConfig;
import org.apache.coyote.ActionCode;
@@ -72,22 +71,14 @@ public class ApplicationPushBuilder implements PushBuilder {
private String path;
private String queryString;
private String sessionId;
+ private String userName;
- public ApplicationPushBuilder(HttpServletRequest request) {
+ public ApplicationPushBuilder(Request catalinaRequest, HttpServletRequest request) {
+
baseRequest = request;
- // Need a reference to the CoyoteRequest in order to process the push
- ServletRequest current = request;
- while (current instanceof ServletRequestWrapper) {
- current = ((ServletRequestWrapper) current).getRequest();
- }
- if (current instanceof Request) {
- catalinaRequest = ((Request) current);
- coyoteRequest = catalinaRequest.getCoyoteRequest();
- } else {
- throw new UnsupportedOperationException(sm.getString(
- "applicationPushBuilder.noCoyoteRequest", current.getClass().getName()));
- }
+ this.catalinaRequest = catalinaRequest;
+ coyoteRequest = catalinaRequest.getCoyoteRequest();
// Populate the initial list of HTTP headers
Enumeration headerNames = request.getHeaderNames();
@@ -119,7 +110,6 @@ public ApplicationPushBuilder(HttpServletRequest request) {
if (request.getQueryString() != null) {
referer.append('?');
referer.append(request.getQueryString());
-
}
addHeader("referer", referer.toString());
@@ -167,8 +157,18 @@ public ApplicationPushBuilder(HttpServletRequest request) {
cookies.add(new Cookie(responseCookie.getName(), responseCookie.getValue()));
}
}
- }
+ // Authentication
+ if (catalinaRequest.getPrincipal() != null) {
+ if ((session == null) || catalinaRequest.getSessionInternal(false).getPrincipal() == null
+ || !(context.getAuthenticator() instanceof AuthenticatorBase)
+ || !((AuthenticatorBase) context.getAuthenticator()).getCache()) {
+ // Set a username only if there is no session cache for the principal
+ userName = catalinaRequest.getPrincipal().getName();
+ }
+ setHeader("authorization", "x-push");
+ }
+ }
@Override
public PushBuilder path(String path) {
@@ -196,7 +196,7 @@ public String getPath() {
@Override
public PushBuilder method(String method) {
String upperMethod = method.trim().toUpperCase();
- if (DISALLOWED_METHODS.contains(upperMethod)) {
+ if (DISALLOWED_METHODS.contains(upperMethod) || upperMethod.length() == 0) {
throw new IllegalArgumentException(
sm.getString("applicationPushBuilder.methodInvalid", upperMethod));
}
@@ -357,9 +357,16 @@ public void push() {
}
// Cookies
- setHeader("cookie", generateCookieHeader(cookies,
+ pushTarget.getMimeHeaders().addValue("cookie")
+ .setString(generateCookieHeader(cookies,
catalinaRequest.getContext().getCookieProcessor()));
+ // Authorization
+ if (userName != null) {
+ pushTarget.getRemoteUser().setString(userName);
+ pushTarget.setRemoteUserNeedsAuthorization(true);
+ }
+
coyoteRequest.action(ActionCode.PUSH_REQUEST, pushTarget);
// Reset for next call to this method
@@ -382,7 +389,7 @@ static String decode(String input, Charset charset) {
StringBuilder result = new StringBuilder(input.length());
while (start != -1) {
- // Found the start of a %nn sequence. Copy everything form the last
+ // Found the start of a %nn sequence. Copy everything from the last
// end to this start to the output.
result.append(input.substring(end, start));
// Advance the end 3 characters: %nn
@@ -403,7 +410,7 @@ static String decode(String input, Charset charset) {
private static String decodePercentSequence(String sequence, Charset charset) {
byte[] bytes = new byte[sequence.length()/3];
for (int i = 0; i < bytes.length; i += 3) {
- bytes[i] = (byte) (HexUtils.getDec(sequence.charAt(1 + 3 * i)) << 4 +
+ bytes[i] = (byte) ((HexUtils.getDec(sequence.charAt(1 + 3 * i)) << 4) +
HexUtils.getDec(sequence.charAt(2 + 3 * i)));
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationRequest.java b/core/src/main/java/org/apache/catalina/core/ApplicationRequest.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/ApplicationRequest.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationRequest.java
index 0c0125a..87c6c17 100644
--- a/src/main/java/org/apache/catalina/core/ApplicationRequest.java
+++ b/core/src/main/java/org/apache/catalina/core/ApplicationRequest.java
@@ -104,7 +104,7 @@ public ApplicationRequest(ServletRequest request) {
public Object getAttribute(String name) {
synchronized (attributes) {
- return (attributes.get(name));
+ return attributes.get(name);
}
}
diff --git a/src/main/java/org/apache/catalina/core/ApplicationResponse.java b/core/src/main/java/org/apache/catalina/core/ApplicationResponse.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationResponse.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationResponse.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationServletRegistration.java b/core/src/main/java/org/apache/catalina/core/ApplicationServletRegistration.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationServletRegistration.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationServletRegistration.java
diff --git a/src/main/java/org/apache/catalina/core/ApplicationSessionCookieConfig.java b/core/src/main/java/org/apache/catalina/core/ApplicationSessionCookieConfig.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ApplicationSessionCookieConfig.java
rename to core/src/main/java/org/apache/catalina/core/ApplicationSessionCookieConfig.java
diff --git a/src/main/java/org/apache/catalina/core/AprLifecycleListener.java b/core/src/main/java/org/apache/catalina/core/AprLifecycleListener.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/AprLifecycleListener.java
rename to core/src/main/java/org/apache/catalina/core/AprLifecycleListener.java
index b3d6534..5687c29 100644
--- a/src/main/java/org/apache/catalina/core/AprLifecycleListener.java
+++ b/core/src/main/java/org/apache/catalina/core/AprLifecycleListener.java
@@ -66,9 +66,9 @@ public class AprLifecycleListener
protected static final int TCN_REQUIRED_MAJOR = 1;
protected static final int TCN_REQUIRED_MINOR = 2;
- protected static final int TCN_REQUIRED_PATCH = 6;
+ protected static final int TCN_REQUIRED_PATCH = 14;
protected static final int TCN_RECOMMENDED_MINOR = 2;
- protected static final int TCN_RECOMMENDED_PV = 8;
+ protected static final int TCN_RECOMMENDED_PV = 14;
// ---------------------------------------------- Properties
diff --git a/src/main/java/org/apache/catalina/core/AsyncContextImpl.java b/core/src/main/java/org/apache/catalina/core/AsyncContextImpl.java
similarity index 95%
rename from src/main/java/org/apache/catalina/core/AsyncContextImpl.java
rename to core/src/main/java/org/apache/catalina/core/AsyncContextImpl.java
index f4d9632..722b752 100644
--- a/src/main/java/org/apache/catalina/core/AsyncContextImpl.java
+++ b/core/src/main/java/org/apache/catalina/core/AsyncContextImpl.java
@@ -42,7 +42,6 @@
import org.apache.catalina.Host;
import org.apache.catalina.Valve;
import org.apache.catalina.connector.Request;
-import org.apache.catalina.util.URLEncoder;
import org.apache.coyote.ActionCode;
import org.apache.coyote.AsyncContextCallback;
import org.apache.coyote.RequestInfo;
@@ -50,6 +49,7 @@
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.buf.UDecoder;
import org.apache.tomcat.util.res.StringManager;
public class AsyncContextImpl implements AsyncContext, AsyncContextCallback {
@@ -123,6 +123,8 @@ public void fireOnComplete() {
public boolean timeout() {
AtomicBoolean result = new AtomicBoolean();
request.getCoyoteRequest().action(ActionCode.ASYNC_TIMEOUT, result);
+ // Avoids NPEs during shutdown. A call to recycle will null this field.
+ Context context = this.context;
if (result.get()) {
ClassLoader oldCL = context.bind(false, null);
@@ -151,21 +153,21 @@ public boolean timeout() {
public void dispatch() {
check();
String path;
- String pathInfo;
+ String cpath;
ServletRequest servletRequest = getRequest();
if (servletRequest instanceof HttpServletRequest) {
HttpServletRequest sr = (HttpServletRequest) servletRequest;
- path = sr.getServletPath();
- pathInfo = sr.getPathInfo();
+ path = sr.getRequestURI();
+ cpath = sr.getContextPath();
} else {
- path = request.getServletPath();
- pathInfo = request.getPathInfo();
+ path = request.getRequestURI();
+ cpath = request.getContextPath();
}
- if (pathInfo != null) {
- path += pathInfo;
+ if (cpath.length() > 1) {
+ path = path.substring(cpath.length());
}
- if (this.context.getDispatchersUseEncodedPaths()) {
- path = URLEncoder.DEFAULT.encode(path, StandardCharsets.UTF_8);
+ if (!context.getDispatchersUseEncodedPaths()) {
+ path = UDecoder.URLDecode(path, StandardCharsets.UTF_8);
}
dispatch(path);
}
@@ -268,8 +270,7 @@ public T createListener(Class clazz)
try {
listener = (T) getInstanceManager().newInstance(clazz.getName(),
clazz.getClassLoader());
- } catch (InstantiationException | IllegalAccessException | NamingException |
- ClassNotFoundException e) {
+ } catch (ReflectiveOperationException | NamingException e) {
ServletException se = new ServletException(e);
throw se;
} catch (Exception e) {
@@ -394,7 +395,7 @@ public void setErrorState(Throwable t, boolean fireOnError) {
try {
listener.fireOnError(errorEvent);
} catch (Throwable t2) {
- ExceptionUtils.handleThrowable(t);
+ ExceptionUtils.handleThrowable(t2);
log.warn("onError() failed for listener of type [" +
listener.getClass().getName() + "]", t2);
}
@@ -407,6 +408,10 @@ public void setErrorState(Throwable t, boolean fireOnError) {
if (result.get()) {
// No listener called dispatch() or complete(). This is an error.
// SRV.2.3.3.3 (search for "error dispatch")
+ // Take a local copy to avoid threading issues if another thread
+ // clears this (can happen during error handling with non-container
+ // threads)
+ ServletResponse servletResponse = this.servletResponse;
if (servletResponse instanceof HttpServletResponse) {
((HttpServletResponse) servletResponse).setStatus(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -486,7 +491,7 @@ private void logDebug(String method) {
private InstanceManager getInstanceManager() {
if (instanceManager == null) {
if (context instanceof StandardContext) {
- instanceManager = ((StandardContext)context).getInstanceManager();
+ instanceManager = context.getInstanceManager();
} else {
instanceManager = new DefaultInstanceManager(null,
new HashMap>(),
diff --git a/src/main/java/org/apache/catalina/core/AsyncListenerWrapper.java b/core/src/main/java/org/apache/catalina/core/AsyncListenerWrapper.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/AsyncListenerWrapper.java
rename to core/src/main/java/org/apache/catalina/core/AsyncListenerWrapper.java
diff --git a/src/main/java/org/apache/catalina/core/Constants.java b/core/src/main/java/org/apache/catalina/core/Constants.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/Constants.java
rename to core/src/main/java/org/apache/catalina/core/Constants.java
diff --git a/src/main/java/org/apache/catalina/core/ContainerBase.java b/core/src/main/java/org/apache/catalina/core/ContainerBase.java
similarity index 98%
rename from src/main/java/org/apache/catalina/core/ContainerBase.java
rename to core/src/main/java/org/apache/catalina/core/ContainerBase.java
index 494fad0..04dcd71 100644
--- a/src/main/java/org/apache/catalina/core/ContainerBase.java
+++ b/core/src/main/java/org/apache/catalina/core/ContainerBase.java
@@ -23,7 +23,6 @@
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
@@ -354,12 +353,10 @@ public void setBackgroundProcessorDelay(int delay) {
*/
@Override
public Log getLogger() {
-
if (logger != null)
- return (logger);
+ return logger;
logger = LogFactory.getLog(getLogName());
- return (logger);
-
+ return logger;
}
@@ -484,9 +481,7 @@ public void setCluster(Cluster cluster) {
*/
@Override
public String getName() {
-
- return (name);
-
+ return name;
}
@@ -517,9 +512,7 @@ public void setName(String name) {
* @return true if the children will be started
*/
public boolean getStartChildren() {
-
- return (startChildren);
-
+ return startChildren;
}
@@ -543,9 +536,7 @@ public void setStartChildren(boolean startChildren) {
*/
@Override
public Container getParent() {
-
- return (parent);
-
+ return parent;
}
@@ -578,12 +569,11 @@ public void setParent(Container container) {
@Override
public ClassLoader getParentClassLoader() {
if (parentClassLoader != null)
- return (parentClassLoader);
+ return parentClassLoader;
if (parent != null) {
- return (parent.getParentClassLoader());
+ return parent.getParentClassLoader();
}
- return (ClassLoader.getSystemClassLoader());
-
+ return ClassLoader.getSystemClassLoader();
}
@@ -612,9 +602,7 @@ public void setParentClassLoader(ClassLoader parent) {
*/
@Override
public Pipeline getPipeline() {
-
- return (this.pipeline);
-
+ return this.pipeline;
}
@@ -630,9 +618,9 @@ public Realm getRealm() {
l.lock();
try {
if (realm != null)
- return (realm);
+ return realm;
if (parent != null)
- return (parent.getRealm());
+ return parent.getRealm();
return null;
} finally {
l.unlock();
@@ -1284,11 +1272,9 @@ public String getMBeanKeyProperties() {
public ObjectName[] getChildren() {
List names = new ArrayList<>(children.size());
- Iterator it = children.values().iterator();
- while (it.hasNext()) {
- Object next = it.next();
+ for (Container next : children.values()) {
if (next instanceof ContainerBase) {
- names.add(((ContainerBase)next).getObjectName());
+ names.add(next.getObjectName());
}
}
return names.toArray(new ObjectName[names.size()]);
diff --git a/src/main/java/org/apache/catalina/core/DefaultInstanceManager.java b/core/src/main/java/org/apache/catalina/core/DefaultInstanceManager.java
similarity index 91%
rename from src/main/java/org/apache/catalina/core/DefaultInstanceManager.java
rename to core/src/main/java/org/apache/catalina/core/DefaultInstanceManager.java
index 93bef7d..ea70795 100644
--- a/src/main/java/org/apache/catalina/core/DefaultInstanceManager.java
+++ b/core/src/main/java/org/apache/catalina/core/DefaultInstanceManager.java
@@ -67,6 +67,37 @@ public class DefaultInstanceManager implements InstanceManager {
protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+ private static final boolean EJB_PRESENT;
+ private static final boolean JPA_PRESENT;
+ private static final boolean WS_PRESENT;
+
+ static {
+ Class> clazz = null;
+ try {
+ clazz = Class.forName("javax.ejb.EJB");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ EJB_PRESENT = (clazz != null);
+
+ clazz = null;
+ try {
+ clazz = Class.forName("javax.persistence.PersistenceContext");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ JPA_PRESENT = (clazz != null);
+
+ clazz = null;
+ try {
+ clazz = Class.forName("javax.xml.ws.WebServiceRef");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ WS_PRESENT = (clazz != null);
+ }
+
+
private final Context context;
private final Map> injectionMap;
protected final ClassLoader classLoader;
@@ -283,10 +314,10 @@ protected void populateAnnotationsCache(Class> clazz,
Field[] fields = Introspection.getDeclaredFields(clazz);
for (Field field : fields) {
Resource resourceAnnotation;
- EJB ejbAnnotation;
- WebServiceRef webServiceRefAnnotation;
- PersistenceContext persistenceContextAnnotation;
- PersistenceUnit persistenceUnitAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
if (injections != null && injections.containsKey(field.getName())) {
annotations.add(new AnnotationCacheEntry(
field.getName(), null,
@@ -296,24 +327,24 @@ protected void populateAnnotationsCache(Class> clazz,
field.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
resourceAnnotation.name(), AnnotationCacheEntryType.FIELD));
- } else if ((ejbAnnotation =
- field.getAnnotation(EJB.class)) != null) {
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = field.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ejbAnnotation.name(), AnnotationCacheEntryType.FIELD));
- } else if ((webServiceRefAnnotation =
+ ((EJB) ejbAnnotation).name(), AnnotationCacheEntryType.FIELD));
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
field.getAnnotation(WebServiceRef.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- webServiceRefAnnotation.name(),
+ ((WebServiceRef) webServiceRefAnnotation).name(),
AnnotationCacheEntryType.FIELD));
- } else if ((persistenceContextAnnotation =
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
field.getAnnotation(PersistenceContext.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- persistenceContextAnnotation.name(),
+ ((PersistenceContext) persistenceContextAnnotation).name(),
AnnotationCacheEntryType.FIELD));
- } else if ((persistenceUnitAnnotation =
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
field.getAnnotation(PersistenceUnit.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- persistenceUnitAnnotation.name(),
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
AnnotationCacheEntryType.FIELD));
}
}
@@ -341,10 +372,10 @@ protected void populateAnnotationsCache(Class> clazz,
}
}
Resource resourceAnnotation;
- EJB ejbAnnotation;
- WebServiceRef webServiceRefAnnotation;
- PersistenceContext persistenceContextAnnotation;
- PersistenceUnit persistenceUnitAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
if ((resourceAnnotation =
method.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(
@@ -352,32 +383,33 @@ protected void populateAnnotationsCache(Class> clazz,
method.getParameterTypes(),
resourceAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if ((ejbAnnotation =
- method.getAnnotation(EJB.class)) != null) {
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = method.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- ejbAnnotation.name(),
+ ((EJB) ejbAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((webServiceRefAnnotation =
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
method.getAnnotation(WebServiceRef.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- webServiceRefAnnotation.name(),
+ ((WebServiceRef) webServiceRefAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((persistenceContextAnnotation =
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
method.getAnnotation(PersistenceContext.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- persistenceContextAnnotation.name(),
+ ((PersistenceContext) persistenceContextAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((persistenceUnitAnnotation = method.getAnnotation(PersistenceUnit.class)) != null) {
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
+ method.getAnnotation(PersistenceUnit.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- persistenceUnitAnnotation.name(),
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
AnnotationCacheEntryType.SETTER));
}
}
@@ -736,7 +768,7 @@ public AnnotationCacheEntryType getType() {
}
- private static enum AnnotationCacheEntryType {
+ private enum AnnotationCacheEntryType {
FIELD, SETTER, POST_CONSTRUCT, PRE_DESTROY
}
diff --git a/src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java b/core/src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
similarity index 96%
rename from src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
rename to core/src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
index bc96f02..1823687 100644
--- a/src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
+++ b/core/src/main/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
@@ -20,8 +20,6 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.net.URLConnection;
import java.sql.DriverManager;
import java.util.StringTokenizer;
@@ -289,22 +287,17 @@ public void lifecycleEvent(LifecycleEvent event) {
* - javax.xml.bind.JAXBContext.newInstance()
*
* https://bugs.openjdk.java.net/browse/JDK-8163449
+ *
+ * Java 9 onwards disables caching for JAR URLConnections
+ * Java 8 and earlier disables caching for all URLConnections
*/
// Set the default URL caching policy to not to cache
if (urlCacheProtection) {
try {
- // Doesn't matter that this JAR doesn't exist - just as
- // long as the URL is well-formed
- URL url = new URL("jar:file://dummy.jar!/");
- URLConnection uConn = url.openConnection();
- uConn.setDefaultUseCaches(false);
- } catch (MalformedURLException e) {
- log.error(sm.getString(
- "jreLeakListener.jarUrlConnCacheFail"), e);
+ JreCompat.getInstance().disableCachingForJarUrlConnections();
} catch (IOException e) {
- log.error(sm.getString(
- "jreLeakListener.jarUrlConnCacheFail"), e);
+ log.error(sm.getString("jreLeakListener.jarUrlConnCacheFail"), e);
}
}
diff --git a/src/main/java/org/apache/catalina/core/LocalStrings.properties b/core/src/main/java/org/apache/catalina/core/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/core/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/core/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/core/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/core/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/core/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/core/LocalStrings_es.properties
index f78ea8a..f138d17 100644
--- a/src/main/java/org/apache/catalina/core/LocalStrings_es.properties
+++ b/core/src/main/java/org/apache/catalina/core/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
applicationContext.addFilter.ise = No se pueden a\u00F1adir filtros al contexto [{0}] ya que \u00E9ste ha sido inicializado
applicationContext.addListener.iae.cnfe = No puedo crear una instancia del tipo [{0}]
applicationContext.addListener.iae.wrongType = El tipo especificado [{0}] no es uno de los tipos de escuchador esperados
diff --git a/src/main/java/org/apache/catalina/core/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/core/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/core/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/core/LocalStrings_fr.properties
diff --git a/src/main/java/org/apache/catalina/core/LocalStrings_ja.properties b/core/src/main/java/org/apache/catalina/core/LocalStrings_ja.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/core/LocalStrings_ja.properties
rename to core/src/main/java/org/apache/catalina/core/LocalStrings_ja.properties
diff --git a/src/main/java/org/apache/catalina/core/NamingContextListener.java b/core/src/main/java/org/apache/catalina/core/NamingContextListener.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/NamingContextListener.java
rename to core/src/main/java/org/apache/catalina/core/NamingContextListener.java
index ebfbc4a..bd8b5ac 100644
--- a/src/main/java/org/apache/catalina/core/NamingContextListener.java
+++ b/core/src/main/java/org/apache/catalina/core/NamingContextListener.java
@@ -179,7 +179,7 @@ public void setExceptionOnFailedWrite(boolean exceptionOnFailedWrite) {
* @return the "name" property.
*/
public String getName() {
- return (this.name);
+ return this.name;
}
@@ -761,7 +761,7 @@ protected ObjectName createObjectName(ContextResource resource)
",name=" + quotedResourceName);
}
- return (name);
+ return name;
}
diff --git a/src/main/java/org/apache/catalina/core/RestrictedFilters.properties b/core/src/main/java/org/apache/catalina/core/RestrictedFilters.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/core/RestrictedFilters.properties
rename to core/src/main/java/org/apache/catalina/core/RestrictedFilters.properties
diff --git a/src/main/java/org/apache/tomcat/util/threads/res/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/core/RestrictedListeners.properties
similarity index 100%
rename from src/main/java/org/apache/tomcat/util/threads/res/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/core/RestrictedListeners.properties
diff --git a/src/main/java/org/apache/catalina/core/RestrictedServlets.properties b/core/src/main/java/org/apache/catalina/core/RestrictedServlets.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/core/RestrictedServlets.properties
rename to core/src/main/java/org/apache/catalina/core/RestrictedServlets.properties
diff --git a/src/main/java/org/apache/catalina/core/StandardContext.java b/core/src/main/java/org/apache/catalina/core/StandardContext.java
similarity index 97%
rename from src/main/java/org/apache/catalina/core/StandardContext.java
rename to core/src/main/java/org/apache/catalina/core/StandardContext.java
index 869d46c..fea74eb 100644
--- a/src/main/java/org/apache/catalina/core/StandardContext.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardContext.java
@@ -370,22 +370,21 @@ public StandardContext() {
* The exception pages for this web application, keyed by fully qualified
* class name of the Java exception.
*/
- private HashMap exceptionPages = new HashMap<>();
+ private Map exceptionPages = new HashMap<>();
/**
* The set of filter configurations (and associated filter instances) we
* have initialized, keyed by filter name.
*/
- private HashMap filterConfigs =
- new HashMap<>();
+ private Map filterConfigs = new HashMap<>();
/**
* The set of filter definitions for this application, keyed by
* filter name.
*/
- private HashMap filterDefs = new HashMap<>();
+ private Map filterDefs = new HashMap<>();
/**
@@ -443,7 +442,7 @@ public StandardContext() {
/**
* The MIME mappings for this web application, keyed by extension.
*/
- private HashMap mimeMappings = new HashMap<>();
+ private Map mimeMappings = new HashMap<>();
/**
@@ -517,7 +516,7 @@ public StandardContext() {
* The security role mappings for this application, keyed by role
* name (as used within the application).
*/
- private HashMap roleMappings = new HashMap<>();
+ private Map roleMappings = new HashMap<>();
/**
@@ -532,7 +531,7 @@ public StandardContext() {
* The servlet mappings for this web application, keyed by
* matching pattern.
*/
- private HashMap servletMappings = new HashMap<>();
+ private Map servletMappings = new HashMap<>();
private final Object servletMappingsLock = new Object();
@@ -552,7 +551,7 @@ public StandardContext() {
* HTTP status code (as an Integer). Note status code zero is used for the
* default error page.
*/
- private HashMap statusPages = new HashMap<>();
+ private Map statusPages = new HashMap<>();
/**
@@ -835,7 +834,17 @@ public String getResponseCharacterEncoding() {
@Override
public void setResponseCharacterEncoding(String responseEncoding) {
- this.responseEncoding = responseEncoding;
+ /*
+ * This ensures that the context response encoding is represented by a
+ * unique String object. This enables the Default Servlet to
+ * differentiate between a Response using this default encoding and one
+ * that has been explicitly configured.
+ */
+ if (responseEncoding == null) {
+ this.responseEncoding = null;
+ } else {
+ this.responseEncoding = new String(responseEncoding);
+ }
}
@@ -1208,9 +1217,7 @@ public void addServletContainerInitializer(
* @return true if classloading delegates to the parent classloader first
*/
public boolean getDelegate() {
-
- return (this.delegate);
-
+ return this.delegate;
}
@@ -1234,9 +1241,7 @@ public void setDelegate(boolean delegate) {
* @return true if the internal naming support is used.
*/
public boolean isUseNaming() {
-
- return (useNaming);
-
+ return useNaming;
}
@@ -1285,7 +1290,7 @@ public void addApplicationEventListener(Object listener) {
@Override
public Object[] getApplicationLifecycleListeners() {
- return (applicationLifecycleListenersObjects);
+ return applicationLifecycleListenersObjects;
}
@@ -1321,9 +1326,7 @@ public void addApplicationLifecycleListener(Object listener) {
* @return the antiResourceLocking flag for this Context.
*/
public boolean getAntiResourceLocking() {
-
- return (this.antiResourceLocking);
-
+ return this.antiResourceLocking;
}
@@ -1359,7 +1362,7 @@ public CharsetMapper getCharsetMapper() {
}
}
- return (this.charsetMapper);
+ return this.charsetMapper;
}
@@ -1664,9 +1667,7 @@ public void setDenyUncoveredHttpMethods(boolean denyUncoveredHttpMethods) {
*/
@Override
public String getDisplayName() {
-
- return (this.displayName);
-
+ return this.displayName;
}
@@ -1713,9 +1714,7 @@ public void setDisplayName(String displayName) {
*/
@Override
public boolean getDistributable() {
-
- return (this.distributable);
-
+ return this.distributable;
}
/**
@@ -1739,9 +1738,7 @@ public void setDistributable(boolean distributable) {
*/
@Override
public String getDocBase() {
-
- return (this.docBase);
-
+ return this.docBase;
}
@@ -1753,9 +1750,7 @@ public String getDocBase() {
*/
@Override
public void setDocBase(String docBase) {
-
this.docBase = docBase;
-
}
public String getJ2EEApplication() {
@@ -1913,9 +1908,7 @@ public void setIgnoreAnnotations(boolean ignoreAnnotations) {
*/
@Override
public LoginConfig getLoginConfig() {
-
- return (this.loginConfig);
-
+ return this.loginConfig;
}
@@ -1972,12 +1965,10 @@ public void setLoginConfig(LoginConfig config) {
*/
@Override
public NamingResourcesImpl getNamingResources() {
-
if (namingResources == null) {
setNamingResources(new NamingResourcesImpl());
}
- return (namingResources);
-
+ return namingResources;
}
@@ -2038,7 +2029,7 @@ public void setNamingResources(NamingResourcesImpl namingResources) {
*/
@Override
public String getPath() {
- return (path);
+ return path;
}
@@ -2080,9 +2071,7 @@ public void setPath(String path) {
*/
@Override
public String getPublicId() {
-
- return (this.publicId);
-
+ return this.publicId;
}
@@ -2111,9 +2100,7 @@ public void setPublicId(String publicId) {
*/
@Override
public boolean getReloadable() {
-
- return (this.reloadable);
-
+ return this.reloadable;
}
@@ -2122,9 +2109,7 @@ public boolean getReloadable() {
*/
@Override
public boolean getOverride() {
-
- return (this.override);
-
+ return this.override;
}
@@ -2134,9 +2119,7 @@ public boolean getOverride() {
* Is only set as deployment has change docRoot!
*/
public String getOriginalDocBase() {
-
- return (this.originalDocBase);
-
+ return this.originalDocBase;
}
/**
@@ -2159,13 +2142,13 @@ public void setOriginalDocBase(String docBase) {
@Override
public ClassLoader getParentClassLoader() {
if (parentClassLoader != null)
- return (parentClassLoader);
+ return parentClassLoader;
if (getPrivileged()) {
return this.getClass().getClassLoader();
} else if (parent != null) {
- return (parent.getParentClassLoader());
+ return parent.getParentClassLoader();
}
- return (ClassLoader.getSystemClassLoader());
+ return ClassLoader.getSystemClassLoader();
}
@@ -2174,9 +2157,7 @@ public ClassLoader getParentClassLoader() {
*/
@Override
public boolean getPrivileged() {
-
- return (this.privileged);
-
+ return this.privileged;
}
@@ -2252,14 +2233,12 @@ public void setReplaceWelcomeFiles(boolean replaceWelcomeFiles) {
*/
@Override
public ServletContext getServletContext() {
-
if (context == null) {
context = new ApplicationContext(this);
if (altDDName != null)
context.setAttribute(Globals.ALT_DD_ATTR,altDDName);
}
- return (context.getFacade());
-
+ return context.getFacade();
}
@@ -2269,9 +2248,7 @@ public ServletContext getServletContext() {
*/
@Override
public int getSessionTimeout() {
-
- return (this.sessionTimeout);
-
+ return this.sessionTimeout;
}
@@ -2303,9 +2280,7 @@ public void setSessionTimeout(int timeout) {
*/
@Override
public boolean getSwallowOutput() {
-
- return (this.swallowOutput);
-
+ return this.swallowOutput;
}
@@ -2332,9 +2307,7 @@ public void setSwallowOutput(boolean swallowOutput) {
* @return the value of the unloadDelay flag.
*/
public long getUnloadDelay() {
-
- return (this.unloadDelay);
-
+ return this.unloadDelay;
}
@@ -2361,9 +2334,7 @@ public void setUnloadDelay(long unloadDelay) {
* @return unpack WAR flag.
*/
public boolean getUnpackWAR() {
-
- return (unpackWAR);
-
+ return unpackWAR;
}
@@ -2373,9 +2344,7 @@ public boolean getUnpackWAR() {
* @param unpackWAR true to unpack WARs on deployment
*/
public void setUnpackWAR(boolean unpackWAR) {
-
this.unpackWAR = unpackWAR;
-
}
@@ -2408,9 +2377,7 @@ public void setCopyXML(boolean copyXML) {
*/
@Override
public String getWrapperClass() {
-
- return (this.wrapperClassName);
-
+ return this.wrapperClassName;
}
@@ -2533,9 +2500,7 @@ public void setJndiExceptionOnFailedWrite(
* @return the Locale to character set mapper class for this Context.
*/
public String getCharsetMapperClass() {
-
- return (this.charsetMapperClass);
-
+ return this.charsetMapperClass;
}
@@ -2581,9 +2546,7 @@ public String getWorkPath() {
* @return the work directory for this Context.
*/
public String getWorkDir() {
-
- return (this.workDir);
-
+ return this.workDir;
}
@@ -2619,9 +2582,7 @@ public void setClearReferencesRmiTargets(boolean clearReferencesRmiTargets) {
* @return the clearReferencesStopThreads flag for this Context.
*/
public boolean getClearReferencesStopThreads() {
-
- return (this.clearReferencesStopThreads);
-
+ return this.clearReferencesStopThreads;
}
@@ -2646,7 +2607,7 @@ public void setClearReferencesStopThreads(
* @return the clearReferencesStopTimerThreads flag for this Context.
*/
public boolean getClearReferencesStopTimerThreads() {
- return (this.clearReferencesStopTimerThreads);
+ return this.clearReferencesStopTimerThreads;
}
@@ -2672,7 +2633,7 @@ public void setClearReferencesStopTimerThreads(
* Context.
*/
public boolean getClearReferencesHttpClientKeepAliveThread() {
- return (this.clearReferencesHttpClientKeepAliveThread);
+ return this.clearReferencesHttpClientKeepAliveThread;
}
@@ -2855,10 +2816,7 @@ public void addConstraint(SecurityConstraint constraint) {
// Add this constraint to the set for our web application
synchronized (constraintsLock) {
- SecurityConstraint results[] =
- new SecurityConstraint[constraints.length + 1];
- for (int i = 0; i < constraints.length; i++)
- results[i] = constraints[i];
+ SecurityConstraint[] results = Arrays.copyOf(constraints, constraints.length + 1);
results[constraints.length] = constraint;
constraints = results;
}
@@ -3113,9 +3071,7 @@ public void addRoleMapping(String role, String link) {
public void addSecurityRole(String role) {
synchronized (securityRolesLock) {
- String results[] =new String[securityRoles.length + 1];
- for (int i = 0; i < securityRoles.length; i++)
- results[i] = securityRoles[i];
+ String[] results = Arrays.copyOf(securityRoles, securityRoles.length + 1);
results[securityRoles.length] = role;
securityRoles = results;
}
@@ -3174,9 +3130,7 @@ public void addServletMappingDecoded(String pattern, String name,
public void addWatchedResource(String name) {
synchronized (watchedResourcesLock) {
- String results[] = new String[watchedResources.length + 1];
- for (int i = 0; i < watchedResources.length; i++)
- results[i] = watchedResources[i];
+ String[] results = Arrays.copyOf(watchedResources, watchedResources.length + 1);
results[watchedResources.length] = name;
watchedResources = results;
}
@@ -3200,9 +3154,7 @@ public void addWelcomeFile(String name) {
welcomeFiles = new String[0];
setReplaceWelcomeFiles(false);
}
- String results[] =new String[welcomeFiles.length + 1];
- for (int i = 0; i < welcomeFiles.length; i++)
- results[i] = welcomeFiles[i];
+ String[] results = Arrays.copyOf(welcomeFiles, welcomeFiles.length + 1);
results[welcomeFiles.length] = name;
welcomeFiles = results;
}
@@ -3221,9 +3173,7 @@ public void addWelcomeFile(String name) {
public void addWrapperLifecycle(String listener) {
synchronized (wrapperLifecyclesLock) {
- String results[] =new String[wrapperLifecycles.length + 1];
- for (int i = 0; i < wrapperLifecycles.length; i++)
- results[i] = wrapperLifecycles[i];
+ String[] results = Arrays.copyOf(wrapperLifecycles, wrapperLifecycles.length + 1);
results[wrapperLifecycles.length] = listener;
wrapperLifecycles = results;
}
@@ -3242,9 +3192,7 @@ public void addWrapperLifecycle(String listener) {
public void addWrapperListener(String listener) {
synchronized (wrapperListenersLock) {
- String results[] =new String[wrapperListeners.length + 1];
- for (int i = 0; i < wrapperListeners.length; i++)
- results[i] = wrapperListeners[i];
+ String[] results = Arrays.copyOf(wrapperListeners, wrapperListeners.length + 1);
results[wrapperListeners.length] = listener;
wrapperListeners = results;
}
@@ -3326,7 +3274,7 @@ public String[] findApplicationListeners() {
public ApplicationParameter[] findApplicationParameters() {
synchronized (applicationParametersLock) {
- return (applicationParameters);
+ return applicationParameters;
}
}
@@ -3338,9 +3286,7 @@ public ApplicationParameter[] findApplicationParameters() {
*/
@Override
public SecurityConstraint[] findConstraints() {
-
- return (constraints);
-
+ return constraints;
}
@@ -3364,11 +3310,9 @@ public ErrorPage findErrorPage(int errorCode) {
*/
@Override
public ErrorPage findErrorPage(String exceptionType) {
-
synchronized (exceptionPages) {
- return (exceptionPages.get(exceptionType));
+ return exceptionPages.get(exceptionType);
}
-
}
@@ -3391,7 +3335,7 @@ public ErrorPage[] findErrorPages() {
results[i] = results1[i];
for (int i = results1.length; i < results.length; i++)
results[i] = results2[i - results1.length];
- return (results);
+ return results;
}
}
@@ -3406,11 +3350,9 @@ public ErrorPage[] findErrorPages() {
*/
@Override
public FilterDef findFilterDef(String filterName) {
-
synchronized (filterDefs) {
- return (filterDefs.get(filterName));
+ return filterDefs.get(filterName);
}
-
}
@@ -3419,12 +3361,10 @@ public FilterDef findFilterDef(String filterName) {
*/
@Override
public FilterDef[] findFilterDefs() {
-
synchronized (filterDefs) {
FilterDef results[] = new FilterDef[filterDefs.size()];
- return (filterDefs.values().toArray(results));
+ return filterDefs.values().toArray(results);
}
-
}
@@ -3444,11 +3384,9 @@ public FilterMap[] findFilterMaps() {
* @param name Name of the desired message destination
*/
public MessageDestination findMessageDestination(String name) {
-
synchronized (messageDestinations) {
- return (messageDestinations.get(name));
+ return messageDestinations.get(name);
}
-
}
@@ -3458,13 +3396,11 @@ public MessageDestination findMessageDestination(String name) {
* is returned.
*/
public MessageDestination[] findMessageDestinations() {
-
synchronized (messageDestinations) {
MessageDestination results[] =
new MessageDestination[messageDestinations.size()];
- return (messageDestinations.values().toArray(results));
+ return messageDestinations.values().toArray(results);
}
-
}
@@ -3475,9 +3411,7 @@ public MessageDestination[] findMessageDestinations() {
* @param name Name of the desired message destination ref
*/
public MessageDestinationRef findMessageDestinationRef(String name) {
-
return namingResources.findMessageDestinationRef(name);
-
}
@@ -3487,9 +3421,7 @@ public MessageDestinationRef findMessageDestinationRef(String name) {
* is returned.
*/
public MessageDestinationRef[] findMessageDestinationRefs() {
-
return namingResources.findMessageDestinationRefs();
-
}
@@ -3501,9 +3433,7 @@ public MessageDestinationRef[] findMessageDestinationRefs() {
*/
@Override
public String findMimeMapping(String extension) {
-
- return (mimeMappings.get(extension.toLowerCase(Locale.ENGLISH)));
-
+ return mimeMappings.get(extension.toLowerCase(Locale.ENGLISH));
}
@@ -3513,13 +3443,10 @@ public String findMimeMapping(String extension) {
*/
@Override
public String[] findMimeMappings() {
-
synchronized (mimeMappings) {
String results[] = new String[mimeMappings.size()];
- return
- (mimeMappings.keySet().toArray(results));
+ return mimeMappings.keySet().toArray(results);
}
-
}
@@ -3558,16 +3485,14 @@ public String[] findParameters() {
*/
@Override
public String findRoleMapping(String role) {
-
String realRole = null;
synchronized (roleMappings) {
realRole = roleMappings.get(role);
}
if (realRole != null)
- return (realRole);
+ return realRole;
else
- return (role);
-
+ return role;
}
@@ -3597,11 +3522,9 @@ public boolean findSecurityRole(String role) {
*/
@Override
public String[] findSecurityRoles() {
-
synchronized (securityRolesLock) {
- return (securityRoles);
+ return securityRoles;
}
-
}
@@ -3613,11 +3536,9 @@ public String[] findSecurityRoles() {
*/
@Override
public String findServletMapping(String pattern) {
-
synchronized (servletMappingsLock) {
- return (servletMappings.get(pattern));
+ return servletMappings.get(pattern);
}
-
}
@@ -3627,13 +3548,10 @@ public String findServletMapping(String pattern) {
*/
@Override
public String[] findServletMappings() {
-
synchronized (servletMappingsLock) {
String results[] = new String[servletMappings.size()];
- return
- (servletMappings.keySet().toArray(results));
+ return servletMappings.keySet().toArray(results);
}
-
}
@@ -3662,16 +3580,14 @@ public String findStatusPage(int status) {
*/
@Override
public int[] findStatusPages() {
-
synchronized (statusPages) {
int results[] = new int[statusPages.size()];
Iterator elements = statusPages.keySet().iterator();
int i = 0;
while (elements.hasNext())
results[i++] = elements.next().intValue();
- return (results);
+ return results;
}
-
}
@@ -3713,11 +3629,9 @@ public String[] findWatchedResources() {
*/
@Override
public String[] findWelcomeFiles() {
-
synchronized (welcomeFilesLock) {
- return (welcomeFiles);
+ return welcomeFiles;
}
-
}
@@ -3727,11 +3641,9 @@ public String[] findWelcomeFiles() {
*/
@Override
public String[] findWrapperLifecycles() {
-
synchronized (wrapperLifecyclesLock) {
- return (wrapperLifecycles);
+ return wrapperLifecycles;
}
-
}
@@ -3741,11 +3653,9 @@ public String[] findWrapperLifecycles() {
*/
@Override
public String[] findWrapperListeners() {
-
synchronized (wrapperListenersLock) {
- return (wrapperListeners);
+ return wrapperListeners;
}
-
}
@@ -4627,9 +4537,7 @@ public boolean filterStop() {
* @return the filter config object
*/
public FilterConfig findFilterConfig(String name) {
-
- return (filterConfigs.get(name));
-
+ return filterConfigs.get(name);
}
@@ -4669,8 +4577,8 @@ public boolean listenerStart() {
}
// Sort listeners in two arrays
- ArrayList eventListeners = new ArrayList<>();
- ArrayList lifecycleListeners = new ArrayList<>();
+ List eventListeners = new ArrayList<>();
+ List lifecycleListeners = new ArrayList<>();
for (int i = 0; i < results.length; i++) {
if ((results[i] instanceof ServletContextAttributeListener)
|| (results[i] instanceof ServletRequestAttributeListener)
@@ -4744,7 +4652,7 @@ public boolean listenerStart() {
ok = false;
}
}
- return (ok);
+ return ok;
}
@@ -4966,6 +4874,9 @@ protected synchronized void startInternal() throws LifecycleException {
namingResources.start();
}
+ // Post work directory
+ postWorkDirectory();
+
// Add missing components as necessary
if (getResources() == null) { // (1) Required by Loader
if (log.isDebugEnabled())
@@ -4996,9 +4907,6 @@ protected synchronized void startInternal() throws LifecycleException {
// Initialize character set mapper
getCharsetMapper();
- // Post work directory
- postWorkDirectory();
-
// Validate required extensions
boolean dependencyCheck = true;
try {
@@ -5638,15 +5546,15 @@ private void resetContext() throws Exception {
protected String adjustURLPattern(String urlPattern) {
if (urlPattern == null)
- return (urlPattern);
+ return urlPattern;
if (urlPattern.startsWith("/") || urlPattern.startsWith("*."))
- return (urlPattern);
+ return urlPattern;
if (!isServlet22())
- return (urlPattern);
+ return urlPattern;
if(log.isDebugEnabled())
log.debug(sm.getString("standardContext.urlPattern.patternWarning",
urlPattern));
- return ("/" + urlPattern);
+ return "/" + urlPattern;
}
@@ -5902,9 +5810,7 @@ public void setNamingContextListener(NamingContextListener namingContextListener
*/
@Override
public boolean getPaused() {
-
- return (this.paused);
-
+ return this.paused;
}
@@ -6149,8 +6055,7 @@ private boolean validateURLPattern(String urlPattern) {
} else
return false;
}
- if ( (urlPattern.startsWith("/")) &&
- (urlPattern.indexOf("*.") < 0)) {
+ if (urlPattern.startsWith("/") && !urlPattern.contains("*.")) {
checkUnusualURLPattern(urlPattern);
return true;
} else
diff --git a/src/main/java/org/apache/catalina/core/StandardContextValve.java b/core/src/main/java/org/apache/catalina/core/StandardContextValve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/StandardContextValve.java
rename to core/src/main/java/org/apache/catalina/core/StandardContextValve.java
diff --git a/src/main/java/org/apache/catalina/core/StandardEngine.java b/core/src/main/java/org/apache/catalina/core/StandardEngine.java
similarity index 98%
rename from src/main/java/org/apache/catalina/core/StandardEngine.java
rename to core/src/main/java/org/apache/catalina/core/StandardEngine.java
index c3e403b..2522de6 100644
--- a/src/main/java/org/apache/catalina/core/StandardEngine.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardEngine.java
@@ -131,9 +131,7 @@ public Realm getRealm() {
*/
@Override
public String getDefaultHost() {
-
- return (defaultHost);
-
+ return defaultHost;
}
@@ -184,9 +182,7 @@ public String getJvmRoute() {
*/
@Override
public Service getService() {
-
- return (this.service);
-
+ return this.service;
}
@@ -337,11 +333,11 @@ public void logAccess(Request request, Response response, long time,
@Override
public ClassLoader getParentClassLoader() {
if (parentClassLoader != null)
- return (parentClassLoader);
+ return parentClassLoader;
if (service != null) {
- return (service.getParentClassLoader());
+ return service.getParentClassLoader();
}
- return (ClassLoader.getSystemClassLoader());
+ return ClassLoader.getSystemClassLoader();
}
diff --git a/src/main/java/org/apache/catalina/core/StandardEngineValve.java b/core/src/main/java/org/apache/catalina/core/StandardEngineValve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/StandardEngineValve.java
rename to core/src/main/java/org/apache/catalina/core/StandardEngineValve.java
diff --git a/src/main/java/org/apache/catalina/core/StandardHost.java b/core/src/main/java/org/apache/catalina/core/StandardHost.java
similarity index 97%
rename from src/main/java/org/apache/catalina/core/StandardHost.java
rename to core/src/main/java/org/apache/catalina/core/StandardHost.java
index 89ceb97..33eb501 100644
--- a/src/main/java/org/apache/catalina/core/StandardHost.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardHost.java
@@ -19,6 +19,7 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -212,7 +213,7 @@ public ExecutorService getStartStopExecutor() {
*/
@Override
public String getAppBase() {
- return (this.appBase);
+ return this.appBase;
}
@@ -272,9 +273,7 @@ public void setAppBase(String appBase) {
*/
@Override
public String getXmlBase() {
-
- return (this.xmlBase);
-
+ return this.xmlBase;
}
@@ -288,11 +287,9 @@ public String getXmlBase() {
*/
@Override
public void setXmlBase(String xmlBase) {
-
String oldXmlBase = this.xmlBase;
this.xmlBase = xmlBase;
support.firePropertyChange("xmlBase", oldXmlBase, this.xmlBase);
-
}
@@ -354,9 +351,7 @@ public void setCreateDirs(boolean createDirs) {
*/
@Override
public boolean getAutoDeploy() {
-
- return (this.autoDeploy);
-
+ return this.autoDeploy;
}
@@ -382,9 +377,7 @@ public void setAutoDeploy(boolean autoDeploy) {
*/
@Override
public String getConfigClass() {
-
- return (this.configClass);
-
+ return this.configClass;
}
@@ -410,9 +403,7 @@ public void setConfigClass(String configClass) {
* for new web applications.
*/
public String getContextClass() {
-
- return (this.contextClass);
-
+ return this.contextClass;
}
@@ -439,9 +430,7 @@ public void setContextClass(String contextClass) {
*/
@Override
public boolean getDeployOnStartup() {
-
- return (this.deployOnStartup);
-
+ return this.deployOnStartup;
}
@@ -465,9 +454,7 @@ public void setDeployOnStartup(boolean deployOnStartup) {
* @return true if XML context descriptors should be deployed.
*/
public boolean isDeployXML() {
-
return deployXML;
-
}
@@ -477,9 +464,7 @@ public boolean isDeployXML() {
* @param deployXML true if context descriptors should be deployed
*/
public void setDeployXML(boolean deployXML) {
-
this.deployXML = deployXML;
-
}
@@ -487,9 +472,7 @@ public void setDeployXML(boolean deployXML) {
* @return the copy XML config file flag for this component.
*/
public boolean isCopyXML() {
-
return this.copyXML;
-
}
@@ -499,9 +482,7 @@ public boolean isCopyXML() {
* @param copyXML The new copy XML flag
*/
public void setCopyXML(boolean copyXML) {
-
this.copyXML = copyXML;
-
}
@@ -510,9 +491,7 @@ public void setCopyXML(boolean copyXML) {
* for new web applications.
*/
public String getErrorReportValveClass() {
-
- return (this.errorReportValveClass);
-
+ return this.errorReportValveClass;
}
@@ -539,9 +518,7 @@ public void setErrorReportValveClass(String errorReportValveClass) {
*/
@Override
public String getName() {
-
- return (name);
-
+ return name;
}
@@ -573,9 +550,7 @@ public void setName(String name) {
* @return true if WARs should be unpacked on deployment.
*/
public boolean isUnpackWARs() {
-
- return (unpackWARs);
-
+ return unpackWARs;
}
@@ -585,9 +560,7 @@ public boolean isUnpackWARs() {
* @param unpackWARs true to unpack WARs on deployment
*/
public void setUnpackWARs(boolean unpackWARs) {
-
this.unpackWARs = unpackWARs;
-
}
@@ -595,8 +568,7 @@ public void setUnpackWARs(boolean unpackWARs) {
* @return host work directory base.
*/
public String getWorkDir() {
-
- return (workDir);
+ return workDir;
}
@@ -606,7 +578,6 @@ public String getWorkDir() {
* @param workDir the new base work folder for this host
*/
public void setWorkDir(String workDir) {
-
this.workDir = workDir;
}
@@ -705,9 +676,7 @@ public void addAlias(String alias) {
return;
}
// Add this alias to the list
- String newAliases[] = new String[aliases.length + 1];
- for (int i = 0; i < aliases.length; i++)
- newAliases[i] = aliases[i];
+ String newAliases[] = Arrays.copyOf(aliases, aliases.length + 1);
newAliases[aliases.length] = alias;
aliases = newAliases;
}
@@ -787,11 +756,9 @@ public String[] findReloadedContextMemoryLeaks() {
*/
@Override
public String[] findAliases() {
-
synchronized (aliasesLock) {
- return (this.aliases);
+ return this.aliases;
}
-
}
diff --git a/src/main/java/org/apache/catalina/core/StandardHostValve.java b/core/src/main/java/org/apache/catalina/core/StandardHostValve.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/StandardHostValve.java
rename to core/src/main/java/org/apache/catalina/core/StandardHostValve.java
index 6b164fe..7b6ea52 100644
--- a/src/main/java/org/apache/catalina/core/StandardHostValve.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardHostValve.java
@@ -424,14 +424,14 @@ private boolean custom(Request request, Response response,
(Context context, Throwable exception) {
if (exception == null) {
- return (null);
+ return null;
}
Class> clazz = exception.getClass();
String name = clazz.getName();
while (!Object.class.equals(clazz)) {
ErrorPage errorPage = context.findErrorPage(name);
if (errorPage != null) {
- return (errorPage);
+ return errorPage;
}
clazz = clazz.getSuperclass();
if (clazz == null) {
@@ -439,7 +439,7 @@ private boolean custom(Request request, Response response,
}
name = clazz.getName();
}
- return (null);
+ return null;
}
}
diff --git a/src/main/java/org/apache/catalina/core/StandardPipeline.java b/core/src/main/java/org/apache/catalina/core/StandardPipeline.java
similarity index 98%
rename from src/main/java/org/apache/catalina/core/StandardPipeline.java
rename to core/src/main/java/org/apache/catalina/core/StandardPipeline.java
index add2ccc..1c3354f 100644
--- a/src/main/java/org/apache/catalina/core/StandardPipeline.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardPipeline.java
@@ -20,6 +20,7 @@
import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
import javax.management.ObjectName;
@@ -137,9 +138,7 @@ public void findNonAsyncValves(Set result) {
*/
@Override
public Container getContainer() {
-
- return (this.container);
-
+ return this.container;
}
@@ -150,9 +149,7 @@ public Container getContainer() {
*/
@Override
public void setContainer(Container container) {
-
this.container = container;
-
}
@@ -239,9 +236,7 @@ public String toString() {
*/
@Override
public Valve getBasic() {
-
- return (this.basic);
-
+ return this.basic;
}
@@ -378,7 +373,7 @@ public void addValve(Valve valve) {
@Override
public Valve[] getValves() {
- ArrayList valveList = new ArrayList<>();
+ List valveList = new ArrayList<>();
Valve current = first;
if (current == null) {
current = basic;
@@ -394,7 +389,7 @@ public Valve[] getValves() {
public ObjectName[] getValveObjectNames() {
- ArrayList valveList = new ArrayList<>();
+ List valveList = new ArrayList<>();
Valve current = first;
if (current == null) {
current = basic;
diff --git a/src/main/java/org/apache/catalina/core/StandardServer.java b/core/src/main/java/org/apache/catalina/core/StandardServer.java
similarity index 97%
rename from src/main/java/org/apache/catalina/core/StandardServer.java
rename to core/src/main/java/org/apache/catalina/core/StandardServer.java
index 9a3c9ec..82f4ff7 100644
--- a/src/main/java/org/apache/catalina/core/StandardServer.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardServer.java
@@ -187,9 +187,7 @@ public Object getNamingToken() {
*/
@Override
public javax.naming.Context getGlobalNamingContext() {
-
- return (this.globalNamingContext);
-
+ return this.globalNamingContext;
}
@@ -198,11 +196,8 @@ public javax.naming.Context getGlobalNamingContext() {
*
* @param globalNamingContext The new global naming resource context
*/
- public void setGlobalNamingContext
- (javax.naming.Context globalNamingContext) {
-
+ public void setGlobalNamingContext(javax.naming.Context globalNamingContext) {
this.globalNamingContext = globalNamingContext;
-
}
@@ -211,9 +206,7 @@ public javax.naming.Context getGlobalNamingContext() {
*/
@Override
public NamingResourcesImpl getGlobalNamingResources() {
-
- return (this.globalNamingResources);
-
+ return this.globalNamingResources;
}
@@ -269,9 +262,7 @@ public String getServerNumber() {
*/
@Override
public int getPort() {
-
- return (this.port);
-
+ return this.port;
}
@@ -282,9 +273,7 @@ public int getPort() {
*/
@Override
public void setPort(int port) {
-
this.port = port;
-
}
@@ -293,9 +282,7 @@ public void setPort(int port) {
*/
@Override
public String getAddress() {
-
- return (this.address);
-
+ return this.address;
}
@@ -306,9 +293,7 @@ public String getAddress() {
*/
@Override
public void setAddress(String address) {
-
this.address = address;
-
}
/**
@@ -316,9 +301,7 @@ public void setAddress(String address) {
*/
@Override
public String getShutdown() {
-
- return (this.shutdown);
-
+ return this.shutdown;
}
@@ -329,9 +312,7 @@ public String getShutdown() {
*/
@Override
public void setShutdown(String shutdown) {
-
this.shutdown = shutdown;
-
}
@@ -552,19 +533,17 @@ public void await() {
*/
@Override
public Service findService(String name) {
-
if (name == null) {
- return (null);
+ return null;
}
synchronized (servicesLock) {
for (int i = 0; i < services.length; i++) {
if (name.equals(services[i].getName())) {
- return (services[i]);
+ return services[i];
}
}
}
- return (null);
-
+ return null;
}
@@ -689,12 +668,10 @@ public void removePropertyChangeListener(PropertyChangeListener listener) {
*/
@Override
public String toString() {
-
StringBuilder sb = new StringBuilder("StandardServer[");
sb.append(getPort());
sb.append("]");
- return (sb.toString());
-
+ return sb.toString();
}
@@ -898,11 +875,11 @@ protected void destroyInternal() throws LifecycleException {
@Override
public ClassLoader getParentClassLoader() {
if (parentClassLoader != null)
- return (parentClassLoader);
+ return parentClassLoader;
if (catalina != null) {
- return (catalina.getParentClassLoader());
+ return catalina.getParentClassLoader();
}
- return (ClassLoader.getSystemClassLoader());
+ return ClassLoader.getSystemClassLoader();
}
/**
diff --git a/src/main/java/org/apache/catalina/core/StandardService.java b/core/src/main/java/org/apache/catalina/core/StandardService.java
similarity index 99%
rename from src/main/java/org/apache/catalina/core/StandardService.java
rename to core/src/main/java/org/apache/catalina/core/StandardService.java
index 6f1e805..b8852f8 100644
--- a/src/main/java/org/apache/catalina/core/StandardService.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardService.java
@@ -327,7 +327,7 @@ public String toString() {
StringBuilder sb = new StringBuilder("StandardService[");
sb.append(getName());
sb.append("]");
- return (sb.toString());
+ return sb.toString();
}
diff --git a/src/main/java/org/apache/catalina/core/StandardThreadExecutor.java b/core/src/main/java/org/apache/catalina/core/StandardThreadExecutor.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/StandardThreadExecutor.java
rename to core/src/main/java/org/apache/catalina/core/StandardThreadExecutor.java
diff --git a/src/main/java/org/apache/catalina/core/StandardWrapper.java b/core/src/main/java/org/apache/catalina/core/StandardWrapper.java
similarity index 97%
rename from src/main/java/org/apache/catalina/core/StandardWrapper.java
rename to core/src/main/java/org/apache/catalina/core/StandardWrapper.java
index a0715c5..0d0a6c3 100644
--- a/src/main/java/org/apache/catalina/core/StandardWrapper.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardWrapper.java
@@ -25,6 +25,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Set;
import java.util.Stack;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -298,9 +299,7 @@ public void setOverridable(boolean overridable) {
*/
@Override
public long getAvailable() {
-
- return (this.available);
-
+ return this.available;
}
@@ -315,7 +314,6 @@ public long getAvailable() {
*/
@Override
public void setAvailable(long available) {
-
long oldAvailable = this.available;
if (available > System.currentTimeMillis())
this.available = available;
@@ -323,7 +321,6 @@ public void setAvailable(long available) {
this.available = 0L;
support.firePropertyChange("available", Long.valueOf(oldAvailable),
Long.valueOf(this.available));
-
}
@@ -352,7 +349,7 @@ public int getLoadOnStartup() {
*/
return Integer.MAX_VALUE;
} else {
- return (this.loadOnStartup);
+ return this.loadOnStartup;
}
}
@@ -406,9 +403,7 @@ public String getLoadOnStartupString() {
* thread model servlet is used.
*/
public int getMaxInstances() {
-
- return (this.maxInstances);
-
+ return this.maxInstances;
}
@@ -454,9 +449,7 @@ public void setParent(Container container) {
*/
@Override
public String getRunAs() {
-
- return (this.runAs);
-
+ return this.runAs;
}
@@ -480,9 +473,7 @@ public void setRunAs(String runAs) {
*/
@Override
public String getServletClass() {
-
- return (this.servletClass);
-
+ return this.servletClass;
}
@@ -570,7 +561,7 @@ public String[] getServletMethods() throws ServletException {
return DEFAULT_SERVLET_METHODS;
}
- HashSet allow = new HashSet<>();
+ Set allow = new HashSet<>();
allow.add("TRACE");
allow.add("OPTIONS");
@@ -1081,9 +1072,9 @@ public synchronized Servlet loadServlet() throws ServletException {
processServletSecurityAnnotation(servlet.getClass());
// Special handling for ContainerServlet instances
- if ((servlet instanceof ContainerServlet) &&
- (isContainerProvidedServlet(servletClass) ||
- ((Context) getParent()).getPrivileged() )) {
+ // Note: The InstanceManager checks if the application is permitted
+ // to load ContainerServlets
+ if (servlet instanceof ContainerServlet) {
((ContainerServlet) servlet).setWrapper(this);
}
@@ -1435,9 +1426,7 @@ public synchronized void unload() throws ServletException {
*/
@Override
public String getInitParameter(String name) {
-
- return (findInitParameter(name));
-
+ return findInitParameter(name);
}
@@ -1463,14 +1452,12 @@ public Enumeration getInitParameterNames() {
*/
@Override
public ServletContext getServletContext() {
-
if (parent == null)
- return (null);
+ return null;
else if (!(parent instanceof Context))
- return (null);
+ return null;
else
- return (((Context) parent).getServletContext());
-
+ return ((Context) parent).getServletContext();
}
@@ -1479,9 +1466,7 @@ else if (!(parent instanceof Context))
*/
@Override
public String getServletName() {
-
- return (getName());
-
+ return getName();
}
public long getProcessingTime() {
@@ -1557,30 +1542,6 @@ public void setEnabled(boolean enabled) {
// -------------------------------------------------------- protected Methods
- /**
- * @return true if the specified class name represents a
- * container provided servlet class that should be loaded by the
- * server class loader.
- *
- * @param classname Name of the class to be checked
- */
- protected boolean isContainerProvidedServlet(String classname) {
-
- if (classname.startsWith("org.apache.catalina.")) {
- return true;
- }
- try {
- Class> clazz =
- this.getClass().getClassLoader().loadClass(classname);
- return (ContainerServlet.class.isAssignableFrom(clazz));
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- return false;
- }
-
- }
-
-
protected Method[] getAllDeclaredMethods(Class> c) {
if (c.equals(javax.servlet.http.HttpServlet.class)) {
@@ -1726,7 +1687,7 @@ private String getWebModuleKeyProperties() {
keyProperties.append(hostName);
}
- String contextName = ((Context) getParent()).getName();
+ String contextName = getParent().getName();
if (!contextName.startsWith("/")) {
keyProperties.append('/');
}
diff --git a/src/main/java/org/apache/catalina/core/StandardWrapperFacade.java b/core/src/main/java/org/apache/catalina/core/StandardWrapperFacade.java
similarity index 98%
rename from src/main/java/org/apache/catalina/core/StandardWrapperFacade.java
rename to core/src/main/java/org/apache/catalina/core/StandardWrapperFacade.java
index f48b303..7dc506f 100644
--- a/src/main/java/org/apache/catalina/core/StandardWrapperFacade.java
+++ b/core/src/main/java/org/apache/catalina/core/StandardWrapperFacade.java
@@ -81,7 +81,7 @@ public ServletContext getServletContext() {
context = ((ApplicationContext) context).getFacade();
}
}
- return (context);
+ return context;
}
diff --git a/src/main/java/org/apache/catalina/core/StandardWrapperValve.java b/core/src/main/java/org/apache/catalina/core/StandardWrapperValve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/StandardWrapperValve.java
rename to core/src/main/java/org/apache/catalina/core/StandardWrapperValve.java
diff --git a/src/main/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java b/core/src/main/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
rename to core/src/main/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
diff --git a/src/main/java/org/apache/catalina/core/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/core/mbeans-descriptors.xml
similarity index 99%
rename from src/main/java/org/apache/catalina/core/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/core/mbeans-descriptors.xml
index e156ade..d606e7c 100644
--- a/src/main/java/org/apache/catalina/core/mbeans-descriptors.xml
+++ b/core/src/main/java/org/apache/catalina/core/mbeans-descriptors.xml
@@ -264,11 +264,6 @@
description="The J2EE Server this module is deployed on"
type="java.lang.String"/>
-
-
@@ -1670,11 +1665,11 @@
diff --git a/src/main/java/org/apache/catalina/deploy/LocalStrings.properties b/core/src/main/java/org/apache/catalina/deploy/LocalStrings.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/deploy/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/deploy/LocalStrings.properties
index 3393e52..ddcdf76 100644
--- a/src/main/java/org/apache/catalina/deploy/LocalStrings.properties
+++ b/core/src/main/java/org/apache/catalina/deploy/LocalStrings.properties
@@ -12,6 +12,7 @@
# 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.
+
namingResources.cleanupCloseFailed=Failed to invoke method [{0}] for resource [{1}] in container [{2}] so no cleanup was performed for that resource
namingResources.cleanupCloseSecurity=Unable to retrieve method [{0}] for resource [{1}] in container [{2}] so no cleanup was performed for that resource
namingResources.cleanupNoClose=Resource [{0}] in container [{1}] does not have a [{2}] method so no cleanup was performed for that resource
diff --git a/src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java b/core/src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java
similarity index 99%
rename from src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java
rename to core/src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java
index 0817523..50aec72 100644
--- a/src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java
+++ b/core/src/main/java/org/apache/catalina/deploy/NamingResourcesImpl.java
@@ -24,6 +24,7 @@
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import javax.naming.NamingException;
@@ -103,27 +104,27 @@ public NamingResourcesImpl() {
/**
* The EJB resource references for this web application, keyed by name.
*/
- private final HashMap ejbs = new HashMap<>();
+ private final Map ejbs = new HashMap<>();
/**
* The environment entries for this web application, keyed by name.
*/
- private final HashMap envs = new HashMap<>();
+ private final Map envs = new HashMap<>();
/**
* The local EJB resource references for this web application, keyed by
* name.
*/
- private final HashMap localEjbs = new HashMap<>();
+ private final Map localEjbs = new HashMap<>();
/**
* The message destination references for this web application,
* keyed by name.
*/
- private final HashMap mdrs = new HashMap<>();
+ private final Map mdrs = new HashMap<>();
/**
diff --git a/src/main/java/org/apache/catalina/deploy/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/deploy/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/deploy/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/deploy/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java b/core/src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
similarity index 88%
rename from src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
rename to core/src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
index 930093c..c7469df 100644
--- a/src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/AddDefaultCharsetFilter.java
@@ -108,7 +108,7 @@ public ResponseWrapper(HttpServletResponse response, String encoding) {
public void setContentType(String ct) {
if (ct != null && ct.startsWith("text/")) {
- if (ct.indexOf("charset=") < 0) {
+ if (!ct.contains("charset=")) {
super.setContentType(ct + ";charset=" + encoding);
} else {
super.setContentType(ct);
@@ -120,6 +120,24 @@ public void setContentType(String ct) {
}
+ @Override
+ public void setHeader(String name, String value) {
+ if (name.trim().equalsIgnoreCase("content-type")) {
+ setContentType(value);
+ } else {
+ super.setHeader(name, value);
+ }
+ }
+
+ @Override
+ public void addHeader(String name, String value) {
+ if (name.trim().equalsIgnoreCase("content-type")) {
+ setContentType(value);
+ } else {
+ super.addHeader(name, value);
+ }
+ }
+
@Override
public void setCharacterEncoding(String charset) {
super.setCharacterEncoding(charset);
diff --git a/src/main/java/org/apache/catalina/filters/Constants.java b/core/src/main/java/org/apache/catalina/filters/Constants.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/Constants.java
rename to core/src/main/java/org/apache/catalina/filters/Constants.java
diff --git a/src/main/java/org/apache/catalina/filters/CorsFilter.java b/core/src/main/java/org/apache/catalina/filters/CorsFilter.java
similarity index 91%
rename from src/main/java/org/apache/catalina/filters/CorsFilter.java
rename to core/src/main/java/org/apache/catalina/filters/CorsFilter.java
index 0c1b2e9..9fa4c96 100644
--- a/src/main/java/org/apache/catalina/filters/CorsFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/CorsFilter.java
@@ -178,24 +178,40 @@ public void doFilter(final ServletRequest servletRequest,
@Override
public void init() throws ServletException {
- // Initialize defaults
- parseAndStore(DEFAULT_ALLOWED_ORIGINS, DEFAULT_ALLOWED_HTTP_METHODS,
- DEFAULT_ALLOWED_HTTP_HEADERS, DEFAULT_EXPOSED_HEADERS,
- DEFAULT_SUPPORTS_CREDENTIALS, DEFAULT_PREFLIGHT_MAXAGE,
- DEFAULT_DECORATE_REQUEST);
-
- String configAllowedOrigins = getInitParameter(PARAM_CORS_ALLOWED_ORIGINS);
- String configAllowedHttpMethods = getInitParameter(PARAM_CORS_ALLOWED_METHODS);
- String configAllowedHttpHeaders = getInitParameter(PARAM_CORS_ALLOWED_HEADERS);
- String configExposedHeaders = getInitParameter(PARAM_CORS_EXPOSED_HEADERS);
- String configSupportsCredentials = getInitParameter(PARAM_CORS_SUPPORT_CREDENTIALS);
- String configPreflightMaxAge = getInitParameter(PARAM_CORS_PREFLIGHT_MAXAGE);
- String configDecorateRequest = getInitParameter(PARAM_CORS_REQUEST_DECORATE);
-
- parseAndStore(configAllowedOrigins, configAllowedHttpMethods,
- configAllowedHttpHeaders, configExposedHeaders,
- configSupportsCredentials, configPreflightMaxAge,
- configDecorateRequest);
+ parseAndStore(
+ getInitParameter(PARAM_CORS_ALLOWED_ORIGINS, DEFAULT_ALLOWED_ORIGINS),
+ getInitParameter(PARAM_CORS_ALLOWED_METHODS, DEFAULT_ALLOWED_HTTP_METHODS),
+ getInitParameter(PARAM_CORS_ALLOWED_HEADERS, DEFAULT_ALLOWED_HTTP_HEADERS),
+ getInitParameter(PARAM_CORS_EXPOSED_HEADERS, DEFAULT_EXPOSED_HEADERS),
+ getInitParameter(PARAM_CORS_SUPPORT_CREDENTIALS, DEFAULT_SUPPORTS_CREDENTIALS),
+ getInitParameter(PARAM_CORS_PREFLIGHT_MAXAGE, DEFAULT_PREFLIGHT_MAXAGE),
+ getInitParameter(PARAM_CORS_REQUEST_DECORATE, DEFAULT_DECORATE_REQUEST)
+ );
+ }
+
+
+ /**
+ * This method returns the parameter's value if it exists, or defaultValue
+ * if not.
+ *
+ * @param filterConfig The configuration for the filter
+ *
+ * @param name The parameter's name
+ *
+ * @param defaultValue The default value to return if the parameter does
+ * not exist
+ *
+ * @return The parameter's value or the default value if the parameter does
+ * not exist
+ */
+ private String getInitParameter(String name, String defaultValue){
+
+ String value = getInitParameter(name);
+ if (value != null) {
+ return value;
+ }
+
+ return defaultValue;
}
@@ -277,6 +293,10 @@ protected void handleSimpleCORS(final HttpServletRequest request,
exposedHeadersString);
}
+ // Indicate the response depends on the origin
+ response.addHeader(CorsFilter.REQUEST_HEADER_VARY,
+ CorsFilter.REQUEST_HEADER_ORIGIN);
+
// Forward the request down the filter chain.
filterChain.doFilter(request, response);
}
@@ -714,66 +734,49 @@ private void parseAndStore(final String allowedOrigins,
final String exposedHeaders, final String supportsCredentials,
final String preflightMaxAge, final String decorateRequest)
throws ServletException {
- if (allowedOrigins != null) {
- if (allowedOrigins.trim().equals("*")) {
- this.anyOriginAllowed = true;
- } else {
- this.anyOriginAllowed = false;
- Set setAllowedOrigins =
- parseStringToSet(allowedOrigins);
- this.allowedOrigins.clear();
- this.allowedOrigins.addAll(setAllowedOrigins);
- }
- }
- if (allowedHttpMethods != null) {
- Set setAllowedHttpMethods =
- parseStringToSet(allowedHttpMethods);
- this.allowedHttpMethods.clear();
- this.allowedHttpMethods.addAll(setAllowedHttpMethods);
+ if (allowedOrigins.trim().equals("*")) {
+ this.anyOriginAllowed = true;
+ } else {
+ this.anyOriginAllowed = false;
+ Set setAllowedOrigins = parseStringToSet(allowedOrigins);
+ this.allowedOrigins.clear();
+ this.allowedOrigins.addAll(setAllowedOrigins);
}
- if (allowedHttpHeaders != null) {
- Set setAllowedHttpHeaders =
- parseStringToSet(allowedHttpHeaders);
- Set lowerCaseHeaders = new HashSet<>();
- for (String header : setAllowedHttpHeaders) {
- String lowerCase = header.toLowerCase(Locale.ENGLISH);
- lowerCaseHeaders.add(lowerCase);
- }
- this.allowedHttpHeaders.clear();
- this.allowedHttpHeaders.addAll(lowerCaseHeaders);
- }
+ Set setAllowedHttpMethods = parseStringToSet(allowedHttpMethods);
+ this.allowedHttpMethods.clear();
+ this.allowedHttpMethods.addAll(setAllowedHttpMethods);
- if (exposedHeaders != null) {
- Set setExposedHeaders = parseStringToSet(exposedHeaders);
- this.exposedHeaders.clear();
- this.exposedHeaders.addAll(setExposedHeaders);
+ Set setAllowedHttpHeaders = parseStringToSet(allowedHttpHeaders);
+ Set lowerCaseHeaders = new HashSet<>();
+ for (String header : setAllowedHttpHeaders) {
+ String lowerCase = header.toLowerCase(Locale.ENGLISH);
+ lowerCaseHeaders.add(lowerCase);
}
+ this.allowedHttpHeaders.clear();
+ this.allowedHttpHeaders.addAll(lowerCaseHeaders);
- if (supportsCredentials != null) {
- // For any value other then 'true' this will be false.
- this.supportsCredentials = Boolean
- .parseBoolean(supportsCredentials);
- }
+ Set setExposedHeaders = parseStringToSet(exposedHeaders);
+ this.exposedHeaders.clear();
+ this.exposedHeaders.addAll(setExposedHeaders);
- if (preflightMaxAge != null) {
- try {
- if (!preflightMaxAge.isEmpty()) {
- this.preflightMaxAge = Long.parseLong(preflightMaxAge);
- } else {
- this.preflightMaxAge = 0L;
- }
- } catch (NumberFormatException e) {
- throw new ServletException(
- sm.getString("corsFilter.invalidPreflightMaxAge"), e);
+ // For any value other then 'true' this will be false.
+ this.supportsCredentials = Boolean.parseBoolean(supportsCredentials);
+
+ try {
+ if (!preflightMaxAge.isEmpty()) {
+ this.preflightMaxAge = Long.parseLong(preflightMaxAge);
+ } else {
+ this.preflightMaxAge = 0L;
}
+ } catch (NumberFormatException e) {
+ throw new ServletException(
+ sm.getString("corsFilter.invalidPreflightMaxAge"), e);
}
- if (decorateRequest != null) {
- // For any value other then 'true' this will be false.
- this.decorateRequest = Boolean.parseBoolean(decorateRequest);
- }
+ // For any value other then 'true' this will be false.
+ this.decorateRequest = Boolean.parseBoolean(decorateRequest);
}
/**
@@ -966,6 +969,13 @@ public Collection getAllowedHttpHeaders() {
"Access-Control-Allow-Headers";
// -------------------------------------------------- CORS Request Headers
+
+ /**
+ * The Vary header indicates allows disabling proxy caching by indicating
+ * the the response depends on the origin.
+ */
+ public static final String REQUEST_HEADER_VARY = "Vary";
+
/**
* The Origin header indicates where the cross-origin request or preflight
* request originates from.
@@ -1022,7 +1032,7 @@ public Collection getAllowedHttpHeaders() {
* Enumerates varies types of CORS requests. Also, provides utility methods
* to determine the request type.
*/
- protected static enum CORSRequestType {
+ protected enum CORSRequestType {
/**
* A simple HTTP request, i.e. it shouldn't be pre-flighted.
*/
diff --git a/src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java b/core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java
similarity index 99%
rename from src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java
rename to core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java
index 434a110..ed6517c 100644
--- a/src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilter.java
@@ -178,7 +178,7 @@ public String encodeURL(String url) {
private String addNonce(String url) {
if ((url == null) || (nonce == null)) {
- return (url);
+ return url;
}
String path = url;
@@ -205,7 +205,7 @@ private String addNonce(String url) {
sb.append('=');
sb.append(nonce);
sb.append(anchor);
- return (sb.toString());
+ return sb.toString();
}
}
diff --git a/src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java b/core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
similarity index 96%
rename from src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
rename to core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
index ab642f4..53ac9d0 100644
--- a/src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
+++ b/core/src/main/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
@@ -78,8 +78,8 @@ public void init(FilterConfig filterConfig) throws ServletException {
try {
Class> clazz = Class.forName(randomClass);
- randomSource = (Random) clazz.newInstance();
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+ randomSource = (Random) clazz.getConstructor().newInstance();
+ } catch (ReflectiveOperationException e) {
ServletException se = new ServletException(sm.getString(
"csrfPrevention.invalidRandomClass", randomClass), e);
throw se;
diff --git a/src/main/java/org/apache/catalina/filters/ExpiresFilter.java b/core/src/main/java/org/apache/catalina/filters/ExpiresFilter.java
similarity index 99%
rename from src/main/java/org/apache/catalina/filters/ExpiresFilter.java
rename to core/src/main/java/org/apache/catalina/filters/ExpiresFilter.java
index f20649a..eb4f6b5 100644
--- a/src/main/java/org/apache/catalina/filters/ExpiresFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/ExpiresFilter.java
@@ -1104,7 +1104,7 @@ protected static boolean contains(String str, String searchStr) {
if (str == null || searchStr == null) {
return false;
}
- return str.indexOf(searchStr) >= 0;
+ return str.contains(searchStr);
}
/**
diff --git a/src/main/java/org/apache/catalina/filters/FailedRequestFilter.java b/core/src/main/java/org/apache/catalina/filters/FailedRequestFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/FailedRequestFilter.java
rename to core/src/main/java/org/apache/catalina/filters/FailedRequestFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/FilterBase.java b/core/src/main/java/org/apache/catalina/filters/FilterBase.java
similarity index 82%
rename from src/main/java/org/apache/catalina/filters/FilterBase.java
rename to core/src/main/java/org/apache/catalina/filters/FilterBase.java
index b7044e1..6513136 100644
--- a/src/main/java/org/apache/catalina/filters/FilterBase.java
+++ b/core/src/main/java/org/apache/catalina/filters/FilterBase.java
@@ -29,9 +29,6 @@
/**
* Base class for filters that provides generic initialisation and a simple
* no-op destruction.
- *
- * @author xxd
- *
*/
public abstract class FilterBase implements Filter {
@@ -39,6 +36,19 @@ public abstract class FilterBase implements Filter {
protected abstract Log getLogger();
+
+ /**
+ * Iterates over the configuration parameters and either logs a warning,
+ * or throws an exception for any parameter that does not have a matching
+ * setter in this filter.
+ *
+ * @param filterConfig The configuration information associated with the
+ * filter instance being initialised
+ *
+ * @throws ServletException if {@link #isConfigProblemFatal()} returns
+ * {@code true} and a configured parameter does not
+ * have a matching setter
+ */
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Enumeration paramNames = filterConfig.getInitParameterNames();
diff --git a/src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java b/core/src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java
similarity index 99%
rename from src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java
rename to core/src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java
index 48b7cf6..a6e6f0f 100644
--- a/src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/HttpHeaderSecurityFilter.java
@@ -247,7 +247,7 @@ public void setXssProtectionEnabled(boolean xssProtectionEnabled) {
}
- private static enum XFrameOption {
+ private enum XFrameOption {
DENY("DENY"),
SAME_ORIGIN("SAMEORIGIN"),
ALLOW_FROM("ALLOW-FROM");
diff --git a/src/main/java/org/apache/catalina/filters/LocalStrings.properties b/core/src/main/java/org/apache/catalina/filters/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/filters/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/filters/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/filters/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/filters/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/filters/LocalStrings_es.properties
index 44de8bb..80630b3 100644
--- a/src/main/java/org/apache/catalina/filters/LocalStrings_es.properties
+++ b/core/src/main/java/org/apache/catalina/filters/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
addDefaultCharset.unsupportedCharset = El conjunto especificado de caracteres [{0}] no se encuentra soportado
csrfPrevention.invalidRandomClass = No pude crear fuente al azar usando la clase [{0}]
filterbase.noSuchProperty = La propiedad [{0}] no est\u00E1 definida para los filtros del tipo [{1}]
diff --git a/src/main/java/org/apache/catalina/filters/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/filters/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/filters/LocalStrings_fr.properties
diff --git a/src/main/java/org/apache/catalina/filters/RemoteAddrFilter.java b/core/src/main/java/org/apache/catalina/filters/RemoteAddrFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/RemoteAddrFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RemoteAddrFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/RemoteHostFilter.java b/core/src/main/java/org/apache/catalina/filters/RemoteHostFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/RemoteHostFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RemoteHostFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/RemoteIpFilter.java b/core/src/main/java/org/apache/catalina/filters/RemoteIpFilter.java
similarity index 98%
rename from src/main/java/org/apache/catalina/filters/RemoteIpFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RemoteIpFilter.java
index 0e61673..ddcde7d 100644
--- a/src/main/java/org/apache/catalina/filters/RemoteIpFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/RemoteIpFilter.java
@@ -18,8 +18,8 @@
import java.io.IOException;
import java.text.DateFormat;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
@@ -35,6 +35,7 @@
import javax.servlet.GenericFilter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
@@ -43,7 +44,7 @@
import org.apache.catalina.AccessLog;
import org.apache.catalina.Globals;
-import org.apache.catalina.core.ApplicationPushBuilder;
+import org.apache.catalina.connector.RequestFacade;
import org.apache.catalina.util.RequestUtil;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -497,7 +498,7 @@ public long getDateHeader(String name) {
DateFormat dateFormat = dateFormats[i];
try {
date = dateFormat.parse(value);
- } catch (Exception ParseException) {
+ } catch (ParseException ex) {
// Ignore
}
}
@@ -586,7 +587,7 @@ public void removeHeader(String name) {
}
public void setHeader(String name, String value) {
- List values = Arrays.asList(value);
+ List values = Collections.singletonList(value);
Map.Entry> header = getHeaderEntry(name);
if (header == null) {
headers.put(name, values);
@@ -627,7 +628,15 @@ public StringBuffer getRequestURL() {
@Override
public PushBuilder newPushBuilder() {
- return new ApplicationPushBuilder(this);
+ ServletRequest current = getRequest();
+ while (current instanceof ServletRequestWrapper) {
+ current = ((ServletRequestWrapper) current).getRequest();
+ }
+ if (current instanceof RequestFacade) {
+ return ((RequestFacade) current).newPushBuilder(this);
+ } else {
+ return null;
+ }
}
}
diff --git a/src/main/java/org/apache/catalina/filters/RequestDumperFilter.java b/core/src/main/java/org/apache/catalina/filters/RequestDumperFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/RequestDumperFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RequestDumperFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/RequestFilter.java b/core/src/main/java/org/apache/catalina/filters/RequestFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/RequestFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RequestFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java b/core/src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java
similarity index 99%
rename from src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java
rename to core/src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java
index 3606989..649464b 100644
--- a/src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java
+++ b/core/src/main/java/org/apache/catalina/filters/RestCsrfPreventionFilter.java
@@ -76,7 +76,7 @@
*
*/
public class RestCsrfPreventionFilter extends CsrfPreventionFilterBase {
- private static enum MethodType {
+ private enum MethodType {
NON_MODIFYING_METHOD, MODIFYING_METHOD
}
diff --git a/core/src/main/java/org/apache/catalina/filters/SessionInitializerFilter.java b/core/src/main/java/org/apache/catalina/filters/SessionInitializerFilter.java
new file mode 100644
index 0000000..dafc288
--- /dev/null
+++ b/core/src/main/java/org/apache/catalina/filters/SessionInitializerFilter.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.catalina.filters;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * A {@link javax.servlet.Filter} that initializes the {@link HttpSession} for
+ * the {@link HttpServletRequest} by calling its getSession() method.
+ *
+ * This is required for some operations with WebSocket requests, where it is
+ * too late to initialize the HttpSession object, and the current Java WebSocket
+ * specification does not provide a way to do so.
+ */
+public class SessionInitializerFilter implements Filter {
+
+ /**
+ * Calls {@link HttpServletRequest}'s getSession() to initialize the
+ * HttpSession and continues processing the chain.
+ *
+ * @param request The request to process
+ * @param response The response associated with the request
+ * @param chain Provides access to the next filter in the chain for this
+ * filter to pass the request and response to for further
+ * processing
+ * @throws IOException if an I/O error occurs during this filter's
+ * processing of the request
+ * @throws ServletException if the processing fails for any other reason
+ */
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException {
+
+ ((HttpServletRequest)request).getSession();
+
+ chain.doFilter(request, response);
+ }
+
+}
diff --git a/src/main/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java b/core/src/main/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java
rename to core/src/main/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java
diff --git a/src/main/java/org/apache/catalina/filters/WebdavFixFilter.java b/core/src/main/java/org/apache/catalina/filters/WebdavFixFilter.java
similarity index 100%
rename from src/main/java/org/apache/catalina/filters/WebdavFixFilter.java
rename to core/src/main/java/org/apache/catalina/filters/WebdavFixFilter.java
diff --git a/src/main/java/org/apache/catalina/ha/CatalinaCluster.java b/core/src/main/java/org/apache/catalina/ha/CatalinaCluster.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/CatalinaCluster.java
rename to core/src/main/java/org/apache/catalina/ha/CatalinaCluster.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterDeployer.java b/core/src/main/java/org/apache/catalina/ha/ClusterDeployer.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterDeployer.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterDeployer.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterListener.java b/core/src/main/java/org/apache/catalina/ha/ClusterListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterListener.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterListener.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterManager.java b/core/src/main/java/org/apache/catalina/ha/ClusterManager.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterManager.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterManager.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterMessage.java b/core/src/main/java/org/apache/catalina/ha/ClusterMessage.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterMessage.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterMessage.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterMessageBase.java b/core/src/main/java/org/apache/catalina/ha/ClusterMessageBase.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterMessageBase.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterMessageBase.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterRuleSet.java b/core/src/main/java/org/apache/catalina/ha/ClusterRuleSet.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ha/ClusterRuleSet.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterRuleSet.java
index b35c26b..219bce2 100644
--- a/src/main/java/org/apache/catalina/ha/ClusterRuleSet.java
+++ b/core/src/main/java/org/apache/catalina/ha/ClusterRuleSet.java
@@ -14,14 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
package org.apache.catalina.ha;
-
import org.apache.tomcat.util.digester.Digester;
-import org.apache.tomcat.util.digester.RuleSetBase;
-
+import org.apache.tomcat.util.digester.RuleSet;
/**
*
RuleSet for processing the contents of a
@@ -29,7 +25,7 @@
*
* @author Peter Rossbach
*/
-public class ClusterRuleSet extends RuleSetBase {
+public class ClusterRuleSet implements RuleSet {
// ----------------------------------------------------- Instance Variables
@@ -49,9 +45,7 @@ public class ClusterRuleSet extends RuleSetBase {
* matching pattern prefix.
*/
public ClusterRuleSet() {
-
this("");
-
}
@@ -63,8 +57,6 @@ public ClusterRuleSet() {
* trailing slash character)
*/
public ClusterRuleSet(String prefix) {
- super();
- this.namespaceURI = null;
this.prefix = prefix;
}
diff --git a/src/main/java/org/apache/catalina/ha/ClusterSession.java b/core/src/main/java/org/apache/catalina/ha/ClusterSession.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterSession.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterSession.java
diff --git a/src/main/java/org/apache/catalina/ha/ClusterValve.java b/core/src/main/java/org/apache/catalina/ha/ClusterValve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/ClusterValve.java
rename to core/src/main/java/org/apache/catalina/ha/ClusterValve.java
diff --git a/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOn.java b/core/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOn.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOn.java
rename to core/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOn.java
diff --git a/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOnListener.java b/core/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOnListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOnListener.java
rename to core/src/main/java/org/apache/catalina/ha/authenticator/ClusterSingleSignOnListener.java
diff --git a/src/main/java/org/apache/catalina/ha/authenticator/LocalStrings.properties b/core/src/main/java/org/apache/catalina/ha/authenticator/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/authenticator/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/ha/authenticator/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java b/core/src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java
similarity index 91%
rename from src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java
rename to core/src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java
index c166ecf..6cb05c7 100644
--- a/src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java
+++ b/core/src/main/java/org/apache/catalina/ha/backend/CollectedInfo.java
@@ -20,7 +20,6 @@
/* for MBean to read ready and busy */
-import java.util.Iterator;
import java.util.Set;
import javax.management.MBeanServer;
@@ -58,9 +57,7 @@ public void init(String host, int port) throws Exception {
String onStr = "*:type=ThreadPool,*";
ObjectName objectName = new ObjectName(onStr);
Set set = mBeanServer.queryMBeans(objectName, null);
- Iterator iterator = set.iterator();
- while (iterator.hasNext()) {
- ObjectInstance oi = iterator.next();
+ for (ObjectInstance oi : set) {
objName = oi.getObjectName();
String name = objName.getKeyProperty("name");
@@ -83,7 +80,7 @@ public void init(String host, int port) throws Exception {
break; /* Done port and host are the expected ones */
}
if (objName == null)
- throw(new Exception("Can't find connector for " + host + ":" + port));
+ throw new Exception("Can't find connector for " + host + ":" + port);
this.port = iport;
this.host = shost;
@@ -91,7 +88,7 @@ public void init(String host, int port) throws Exception {
public void refresh() throws Exception {
if (mBeanServer == null || objName == null) {
- throw(new Exception("Not initialized!!!"));
+ throw new Exception("Not initialized!!!");
}
Integer imax = (Integer) mBeanServer.getAttribute(objName, "maxThreads");
diff --git a/src/main/java/org/apache/catalina/ha/backend/HeartbeatListener.java b/core/src/main/java/org/apache/catalina/ha/backend/HeartbeatListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/backend/HeartbeatListener.java
rename to core/src/main/java/org/apache/catalina/ha/backend/HeartbeatListener.java
diff --git a/src/main/java/org/apache/catalina/ha/backend/MultiCastSender.java b/core/src/main/java/org/apache/catalina/ha/backend/MultiCastSender.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/backend/MultiCastSender.java
rename to core/src/main/java/org/apache/catalina/ha/backend/MultiCastSender.java
diff --git a/src/main/java/org/apache/catalina/ha/backend/Proxy.java b/core/src/main/java/org/apache/catalina/ha/backend/Proxy.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/backend/Proxy.java
rename to core/src/main/java/org/apache/catalina/ha/backend/Proxy.java
diff --git a/src/main/java/org/apache/catalina/ha/backend/Sender.java b/core/src/main/java/org/apache/catalina/ha/backend/Sender.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/backend/Sender.java
rename to core/src/main/java/org/apache/catalina/ha/backend/Sender.java
diff --git a/src/main/java/org/apache/catalina/ha/backend/TcpSender.java b/core/src/main/java/org/apache/catalina/ha/backend/TcpSender.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/backend/TcpSender.java
rename to core/src/main/java/org/apache/catalina/ha/backend/TcpSender.java
diff --git a/src/main/java/org/apache/catalina/ha/context/LocalStrings.properties b/core/src/main/java/org/apache/catalina/ha/context/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/context/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/ha/context/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/ha/context/ReplicatedContext.java b/core/src/main/java/org/apache/catalina/ha/context/ReplicatedContext.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/context/ReplicatedContext.java
rename to core/src/main/java/org/apache/catalina/ha/context/ReplicatedContext.java
diff --git a/src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java b/core/src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java
similarity index 99%
rename from src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java
index ef87c92..a65adb6 100644
--- a/src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java
+++ b/core/src/main/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java
@@ -700,9 +700,7 @@ public void setWatchEnabled(boolean watchEnabled) {
* @return the frequency of watcher checks.
*/
public int getProcessDeployFrequency() {
-
- return (this.processDeployFrequency);
-
+ return this.processDeployFrequency;
}
/**
@@ -748,7 +746,7 @@ protected boolean copy(File from, File to) {
}
try (java.io.FileInputStream is = new java.io.FileInputStream(from);
- java.io.FileOutputStream os = new java.io.FileOutputStream(to, false);) {
+ java.io.FileOutputStream os = new java.io.FileOutputStream(to, false)) {
byte[] buf = new byte[4096];
while (true) {
int len = is.read(buf);
diff --git a/src/main/java/org/apache/catalina/ha/deploy/FileChangeListener.java b/core/src/main/java/org/apache/catalina/ha/deploy/FileChangeListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/deploy/FileChangeListener.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/FileChangeListener.java
diff --git a/src/main/java/org/apache/catalina/ha/deploy/FileMessage.java b/core/src/main/java/org/apache/catalina/ha/deploy/FileMessage.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/deploy/FileMessage.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/FileMessage.java
diff --git a/src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java b/core/src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java
index 5f999ec..6d79c26 100644
--- a/src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java
+++ b/core/src/main/java/org/apache/catalina/ha/deploy/FileMessageFactory.java
@@ -310,12 +310,12 @@ public void cleanup() {
if (in != null)
try {
in.close();
- } catch (Exception ignore) {
+ } catch (IOException ignore) {
}
if (out != null)
try {
out.close();
- } catch (Exception ignore) {
+ } catch (IOException ignore) {
}
in = null;
out = null;
@@ -396,7 +396,9 @@ public boolean isValid() {
int timeIdle = (int) ((timeNow - creationTime) / 1000L);
if (timeIdle > maxValidTime) {
cleanup();
- if (file.exists()) file.delete();
+ if (file.exists() && !file.delete()) {
+ log.warn(sm.getString("fileMessageFactory.deleteFail", file));
+ }
return false;
}
}
diff --git a/src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties b/core/src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties
similarity index 98%
rename from src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties
index c3da251..a6f1c36 100644
--- a/src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties
+++ b/core/src/main/java/org/apache/catalina/ha/deploy/LocalStrings.properties
@@ -46,6 +46,8 @@ farmWarDeployer.undeployEnd=Undeployment from [{0}] finished.
farmWarDeployer.undeployLocal=Undeploy local context [{0}]
farmWarDeployer.watchDir=Cluster deployment is watching [{0}] for changes.
+fileMessageFactory.deleteFail=Failed to delete [{0}]
+
warWatcher.checkingWars=Checking WARs in [{0}]
warWatcher.listedFileDoesNotExist=[{0}] was detected in [{1}] but does not exist. Check directory permissions on [{1}]?
warWatcher.checkingWar=Checking WAR file [{0}]
diff --git a/src/main/java/org/apache/catalina/ha/deploy/UndeployMessage.java b/core/src/main/java/org/apache/catalina/ha/deploy/UndeployMessage.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/deploy/UndeployMessage.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/UndeployMessage.java
diff --git a/src/main/java/org/apache/catalina/ha/deploy/WarWatcher.java b/core/src/main/java/org/apache/catalina/ha/deploy/WarWatcher.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/deploy/WarWatcher.java
rename to core/src/main/java/org/apache/catalina/ha/deploy/WarWatcher.java
diff --git a/src/main/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/ha/package.html b/core/src/main/java/org/apache/catalina/ha/package.html
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/package.html
rename to core/src/main/java/org/apache/catalina/ha/package.html
diff --git a/src/main/java/org/apache/catalina/ha/session/BackupManager.java b/core/src/main/java/org/apache/catalina/ha/session/BackupManager.java
similarity index 93%
rename from src/main/java/org/apache/catalina/ha/session/BackupManager.java
rename to core/src/main/java/org/apache/catalina/ha/session/BackupManager.java
index 0773017..4bdcf6d 100644
--- a/src/main/java/org/apache/catalina/ha/session/BackupManager.java
+++ b/core/src/main/java/org/apache/catalina/ha/session/BackupManager.java
@@ -17,7 +17,6 @@
package org.apache.catalina.ha.session;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
import org.apache.catalina.DistributedManager;
@@ -201,10 +200,26 @@ public void setMapSendOptions(int mapSendOptions) {
this.mapSendOptions = mapSendOptions;
}
+ public void setMapSendOptions(String mapSendOptions) {
+
+ int value = Channel.parseSendOptions(mapSendOptions);
+ if (value > 0) {
+ this.setMapSendOptions(value);
+ }
+ }
+
public int getMapSendOptions() {
return mapSendOptions;
}
+ /**
+ * returns the SendOptions as a comma separated list of names
+ * @return a comma separated list of the option names
+ */
+ public String getMapSendOptionsName(){
+ return Channel.getSendOptionsAsString(mapSendOptions);
+ }
+
public void setRpcTimeout(long rpcTimeout) {
this.rpcTimeout = rpcTimeout;
}
@@ -257,9 +272,8 @@ public Set getSessionIdsFull() {
Set sessionIds = new HashSet<>();
LazyReplicatedMap map =
(LazyReplicatedMap)sessions;
- Iterator keys = map.keySetFull().iterator();
- while (keys.hasNext()) {
- sessionIds.add(keys.next());
+ for (String id : map.keySetFull()) {
+ sessionIds.add(id);
}
return sessionIds;
}
diff --git a/src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java b/core/src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java
rename to core/src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java
index ede180a..751e58b 100644
--- a/src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java
+++ b/core/src/main/java/org/apache/catalina/ha/session/ClusterManagerBase.java
@@ -153,12 +153,12 @@ protected void clone(ClusterManagerBase copy) {
copy.setSecureRandomAlgorithm(getSecureRandomAlgorithm());
if (getSessionIdGenerator() != null) {
try {
- SessionIdGenerator copyIdGenerator = sessionIdGeneratorClass.newInstance();
+ SessionIdGenerator copyIdGenerator = sessionIdGeneratorClass.getConstructor().newInstance();
copyIdGenerator.setSessionIdLength(getSessionIdGenerator().getSessionIdLength());
copyIdGenerator.setJvmRoute(getSessionIdGenerator().getJvmRoute());
copy.setSessionIdGenerator(copyIdGenerator);
- } catch (InstantiationException | IllegalAccessException e) {
- // Ignore
+ } catch (ReflectiveOperationException e) {
+ // Ignore
}
}
copy.setRecordAllActions(isRecordAllActions());
diff --git a/src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java b/core/src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java
similarity index 98%
rename from src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java
rename to core/src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java
index e9f5d28..c2c36b4 100644
--- a/src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java
+++ b/core/src/main/java/org/apache/catalina/ha/session/ClusterSessionListener.java
@@ -91,7 +91,6 @@ public void messageReceived(ClusterMessage myobj) {
}
}
- return;
}
/**
@@ -105,7 +104,7 @@ public void messageReceived(ClusterMessage myobj) {
*/
@Override
public boolean accept(ClusterMessage msg) {
- return (msg instanceof SessionMessage);
+ return msg instanceof SessionMessage;
}
}
diff --git a/src/main/java/org/apache/catalina/ha/session/DeltaManager.java b/core/src/main/java/org/apache/catalina/ha/session/DeltaManager.java
similarity index 99%
rename from src/main/java/org/apache/catalina/ha/session/DeltaManager.java
rename to core/src/main/java/org/apache/catalina/ha/session/DeltaManager.java
index 7b7dd69..e7344e0 100644
--- a/src/main/java/org/apache/catalina/ha/session/DeltaManager.java
+++ b/core/src/main/java/org/apache/catalina/ha/session/DeltaManager.java
@@ -24,7 +24,6 @@
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
-import java.util.Iterator;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
@@ -426,7 +425,7 @@ public Session createSession(String sessionId, boolean distribute) {
if (log.isDebugEnabled())
log.debug(sm.getString("deltaManager.createSession.newSession",
session.getId(), Integer.valueOf(sessions.size())));
- return (session);
+ return session;
}
/**
@@ -756,19 +755,17 @@ public synchronized void getAllClusterSessions() {
waitForSendAllSessions(beforeSendTime);
} finally {
synchronized(receivedMessageQueue) {
- for (Iterator iter = receivedMessageQueue.iterator();
- iter.hasNext();) {
- SessionMessage smsg = iter.next();
+ for (SessionMessage smsg : receivedMessageQueue) {
if (!stateTimestampDrop) {
messageReceived(smsg,
- smsg.getAddress() != null ? (Member) smsg.getAddress() : null);
+ smsg.getAddress() != null ? smsg.getAddress() : null);
} else {
if (smsg.getEventType() != SessionMessage.EVT_GET_ALL_SESSIONS &&
smsg.getTimestamp() >= stateTransferCreateSendTime) {
// FIXME handle EVT_GET_ALL_SESSIONS later
messageReceived(smsg,
smsg.getAddress() != null ?
- (Member) smsg.getAddress() :
+ smsg.getAddress() :
null);
} else {
if (log.isWarnEnabled()) {
@@ -920,7 +917,7 @@ public void messageDataReceived(ClusterMessage cmsg) {
break;
} //switch
- messageReceived(msg, msg.getAddress() != null ? (Member) msg.getAddress() : null);
+ messageReceived(msg, msg.getAddress() != null ? msg.getAddress() : null);
}
}
diff --git a/src/main/java/org/apache/catalina/ha/session/DeltaRequest.java b/core/src/main/java/org/apache/catalina/ha/session/DeltaRequest.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/DeltaRequest.java
rename to core/src/main/java/org/apache/catalina/ha/session/DeltaRequest.java
diff --git a/src/main/java/org/apache/catalina/ha/session/DeltaSession.java b/core/src/main/java/org/apache/catalina/ha/session/DeltaSession.java
similarity index 99%
rename from src/main/java/org/apache/catalina/ha/session/DeltaSession.java
rename to core/src/main/java/org/apache/catalina/ha/session/DeltaSession.java
index 3e375f3..d61817e 100644
--- a/src/main/java/org/apache/catalina/ha/session/DeltaSession.java
+++ b/core/src/main/java/org/apache/catalina/ha/session/DeltaSession.java
@@ -28,6 +28,7 @@
import java.security.Principal;
import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
@@ -401,7 +402,8 @@ public boolean isValid() {
}
}
}
- return (this.isValid);
+
+ return this.isValid;
}
/**
@@ -498,7 +500,7 @@ public String toString() {
sb.append("DeltaSession[");
sb.append(id);
sb.append("]");
- return (sb.toString());
+ return sb.toString();
}
@Override
@@ -832,8 +834,8 @@ private void doWriteObject(ObjectOutput stream) throws IOException {
// Accumulate the names of serializable and non-serializable attributes
String keys[] = keys();
- ArrayList saveNames = new ArrayList<>();
- ArrayList saveValues = new ArrayList<>();
+ List saveNames = new ArrayList<>();
+ List saveValues = new ArrayList<>();
for (int i = 0; i < keys.length; i++) {
Object value = null;
value = attributes.get(keys[i]);
diff --git a/src/main/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java b/core/src/main/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java
rename to core/src/main/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java
diff --git a/src/main/java/org/apache/catalina/ha/session/LocalStrings.properties b/core/src/main/java/org/apache/catalina/ha/session/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/ha/session/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties
index f2586a6..5f96a65 100644
--- a/src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties
+++ b/core/src/main/java/org/apache/catalina/ha/session/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
deltaManager.createSession.newSession = Creada una DeltaSession con Id [{0}] Total contador=[{1}]
deltaManager.createMessage.access = Gestor [{0}]: creado mensaje de sesi\u00F3n [{1}] acceso.
deltaManager.createMessage.accessChangePrimary = Gestor [{0}]: creado mensaje de sesi\u00F3n [{1}] acceso para cambiar el primario.
diff --git a/src/main/java/org/apache/catalina/ha/session/ReplicatedSessionListener.java b/core/src/main/java/org/apache/catalina/ha/session/ReplicatedSessionListener.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/ReplicatedSessionListener.java
rename to core/src/main/java/org/apache/catalina/ha/session/ReplicatedSessionListener.java
diff --git a/src/main/java/org/apache/catalina/ha/session/SessionMessage.java b/core/src/main/java/org/apache/catalina/ha/session/SessionMessage.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/SessionMessage.java
rename to core/src/main/java/org/apache/catalina/ha/session/SessionMessage.java
diff --git a/src/main/java/org/apache/catalina/ha/session/SessionMessageImpl.java b/core/src/main/java/org/apache/catalina/ha/session/SessionMessageImpl.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/session/SessionMessageImpl.java
rename to core/src/main/java/org/apache/catalina/ha/session/SessionMessageImpl.java
diff --git a/src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
similarity index 99%
rename from src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
index 33bdba0..5ad0bce 100644
--- a/src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
+++ b/core/src/main/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
@@ -453,6 +453,11 @@
description="mapSendOptions"
type="int"
writeable="false"/>
+
sessions = crossContextSessions.get();
if(sessions != null && sessions.size() >0) {
- for(Iterator iter = sessions.iterator(); iter.hasNext() ;) {
- Session session = iter.next();
+ for (DeltaSession session : sessions) {
if(log.isDebugEnabled()) {
log.debug(sm.getString("ReplicationValve.crossContext.sendDelta",
session.getManager().getContext().getName() ));
diff --git a/src/main/java/org/apache/catalina/ha/tcp/SendMessageData.java b/core/src/main/java/org/apache/catalina/ha/tcp/SendMessageData.java
similarity index 100%
rename from src/main/java/org/apache/catalina/ha/tcp/SendMessageData.java
rename to core/src/main/java/org/apache/catalina/ha/tcp/SendMessageData.java
diff --git a/src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java b/core/src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
similarity index 97%
rename from src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
rename to core/src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
index 302bf8a..6d1db1e 100644
--- a/src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
+++ b/core/src/main/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
@@ -21,7 +21,6 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -224,7 +223,7 @@ public void setContainer(Container container) {
*/
@Override
public Container getContainer() {
- return (this.container);
+ return this.container;
}
/**
@@ -340,6 +339,14 @@ public void setChannelSendOptions(int channelSendOptions) {
this.channelSendOptions = channelSendOptions;
}
+ public void setChannelSendOptions(String channelSendOptions) {
+
+ int value = Channel.parseSendOptions(channelSendOptions);
+ if (value > 0) {
+ this.setChannelSendOptions(value);
+ }
+ }
+
/**
* has members
*/
@@ -392,6 +399,14 @@ public int getChannelSendOptions() {
return channelSendOptions;
}
+ /**
+ * returns the SendOptions as a comma separated list of names for use by JMX
+ * @return a comma separated list of the option names
+ */
+ public String getChannelSendOptionsName(){
+ return Channel.getSendOptionsAsString(channelSendOptions);
+ }
+
/**
* Create new Manager without add to cluster (comes with start the manager)
*
@@ -568,8 +583,8 @@ protected void checkDefaults() {
*/
protected void registerClusterValve() {
if(container != null ) {
- for (Iterator iter = valves.iterator(); iter.hasNext();) {
- ClusterValve valve = (ClusterValve) iter.next();
+ for (Valve v : valves) {
+ ClusterValve valve = (ClusterValve) v;
if (log.isDebugEnabled())
log.debug("Invoking addValve on " + getContainer()
+ " with class=" + valve.getClass().getName());
@@ -585,8 +600,8 @@ protected void registerClusterValve() {
* unregister all cluster valve to host or engine
*/
protected void unregisterClusterValve() {
- for (Iterator iter = valves.iterator(); iter.hasNext();) {
- ClusterValve valve = (ClusterValve) iter.next();
+ for (Valve v : valves) {
+ ClusterValve valve = (ClusterValve) v;
if (log.isDebugEnabled())
log.debug("Invoking removeValve on " + getContainer()
+ " with class=" + valve.getClass().getName());
@@ -768,9 +783,7 @@ public void messageReceived(ClusterMessage message) {
//invoke all the listeners
boolean accepted = false;
if (message != null) {
- for (Iterator iter = clusterListeners.iterator();
- iter.hasNext();) {
- ClusterListener listener = iter.next();
+ for (ClusterListener listener : clusterListeners) {
if (listener.accept(message)) {
accepted = true;
listener.messageReceived(message);
@@ -788,7 +801,6 @@ public void messageReceived(ClusterMessage message) {
}
}
}
- return;
}
public int getChannelStartOptions() {
diff --git a/src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
similarity index 96%
rename from src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
index 332652d..40a019c 100644
--- a/src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
+++ b/core/src/main/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
@@ -28,7 +28,12 @@
+ type="java.lang.String"/>
+
clearJdbcDriverRegistrations() throws SQLException {
* ensuring that both original drivers and any loaded as a result of the
* side-effects are all de-registered.
*/
- HashSet originalDrivers = new HashSet<>();
+ Set originalDrivers = new HashSet<>();
Enumeration drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
originalDrivers.add(drivers.nextElement());
diff --git a/src/main/java/org/apache/catalina/loader/LocalStrings.properties b/core/src/main/java/org/apache/catalina/loader/LocalStrings.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/LocalStrings.properties
rename to core/src/main/java/org/apache/catalina/loader/LocalStrings.properties
diff --git a/src/main/java/org/apache/catalina/loader/LocalStrings_es.properties b/core/src/main/java/org/apache/catalina/loader/LocalStrings_es.properties
similarity index 99%
rename from src/main/java/org/apache/catalina/loader/LocalStrings_es.properties
rename to core/src/main/java/org/apache/catalina/loader/LocalStrings_es.properties
index f22104e..55b7e1f 100644
--- a/src/main/java/org/apache/catalina/loader/LocalStrings_es.properties
+++ b/core/src/main/java/org/apache/catalina/loader/LocalStrings_es.properties
@@ -12,6 +12,7 @@
# 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.
+
webappClassLoader.illegalJarPath = Detectada entrada ilegal de JAR con nombre [{0}]
webappClassLoader.jdbcRemoveFailed = Ha fallado el desregistro del conductor JDBC para la aplicaci\u00F3n web [{0}]
webappClassLoader.stopped = Acceso ilegal: esta instancia de aplicaci\u00F3n web ya ha sido parada. Could not load [{0}]. La eventual traza de pila que sigue ha sido motivada por un error lanzado con motivos de depuraci\u00F3n as\u00ED como para intentar terminar el hilo que motiv\u00F3 el acceso ilegal y no tiene impacto funcional.
diff --git a/src/main/java/org/apache/catalina/loader/LocalStrings_fr.properties b/core/src/main/java/org/apache/catalina/loader/LocalStrings_fr.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/LocalStrings_fr.properties
rename to core/src/main/java/org/apache/catalina/loader/LocalStrings_fr.properties
diff --git a/src/main/java/org/apache/catalina/loader/LocalStrings_ja.properties b/core/src/main/java/org/apache/catalina/loader/LocalStrings_ja.properties
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/LocalStrings_ja.properties
rename to core/src/main/java/org/apache/catalina/loader/LocalStrings_ja.properties
diff --git a/src/main/java/org/apache/catalina/loader/ParallelWebappClassLoader.java b/core/src/main/java/org/apache/catalina/loader/ParallelWebappClassLoader.java
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/ParallelWebappClassLoader.java
rename to core/src/main/java/org/apache/catalina/loader/ParallelWebappClassLoader.java
diff --git a/src/main/java/org/apache/catalina/loader/ResourceEntry.java b/core/src/main/java/org/apache/catalina/loader/ResourceEntry.java
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/ResourceEntry.java
rename to core/src/main/java/org/apache/catalina/loader/ResourceEntry.java
diff --git a/src/main/java/org/apache/catalina/loader/WebappClassLoader.java b/core/src/main/java/org/apache/catalina/loader/WebappClassLoader.java
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/WebappClassLoader.java
rename to core/src/main/java/org/apache/catalina/loader/WebappClassLoader.java
diff --git a/src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java b/core/src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java
similarity index 97%
rename from src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java
rename to core/src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java
index 2d3d767..451b376 100644
--- a/src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java
+++ b/core/src/main/java/org/apache/catalina/loader/WebappClassLoaderBase.java
@@ -280,7 +280,7 @@ protected WebappClassLoaderBase(ClassLoader parent) {
protected boolean delegate = false;
- private final HashMap jarModificationTimes = new HashMap<>();
+ private final Map jarModificationTimes = new HashMap<>();
/**
@@ -426,9 +426,7 @@ public String getContextName() {
* the parent first. The default in Tomcat is false.
*/
public boolean getDelegate() {
-
- return (this.delegate);
-
+ return this.delegate;
}
@@ -522,7 +520,7 @@ public void setClearReferencesRmiTargets(boolean clearReferencesRmiTargets) {
* @return the clearReferencesStopThreads flag for this Context.
*/
public boolean getClearReferencesStopThreads() {
- return (this.clearReferencesStopThreads);
+ return this.clearReferencesStopThreads;
}
@@ -541,7 +539,7 @@ public void setClearReferencesStopThreads(
* @return the clearReferencesStopTimerThreads flag for this Context.
*/
public boolean getClearReferencesStopTimerThreads() {
- return (this.clearReferencesStopTimerThreads);
+ return this.clearReferencesStopTimerThreads;
}
@@ -560,7 +558,7 @@ public void setClearReferencesStopTimerThreads(
* @return the clearReferencesLogFactoryRelease flag for this Context.
*/
public boolean getClearReferencesLogFactoryRelease() {
- return (this.clearReferencesLogFactoryRelease);
+ return this.clearReferencesLogFactoryRelease;
}
@@ -581,7 +579,7 @@ public void setClearReferencesLogFactoryRelease(
* Context.
*/
public boolean getClearReferencesHttpClientKeepAliveThread() {
- return (this.clearReferencesHttpClientKeepAliveThread);
+ return this.clearReferencesHttpClientKeepAliveThread;
}
@@ -645,9 +643,7 @@ public void removeTransformer(ClassFileTransformer transformer) {
if (this.transformers.remove(transformer)) {
log.info(sm.getString("webappClassLoader.removeTransformer",
transformer, getContextName()));
- return;
}
-
}
protected void copyStateWithoutTransformers(WebappClassLoaderBase base) {
@@ -743,7 +739,7 @@ public String toString() {
sb.append(transformer).append("\r\n");
}
}
- return (sb.toString());
+ return sb.toString();
}
@@ -849,7 +845,7 @@ public Class> findClass(String name) throws ClassNotFoundException {
}
log.debug(" Loaded by " + cl.toString());
}
- return (clazz);
+ return clazz;
}
@@ -987,7 +983,7 @@ public URL getResource(String name) {
if (url != null) {
if (log.isDebugEnabled())
log.debug(" --> Returning '" + url.toString() + "'");
- return (url);
+ return url;
}
}
@@ -996,7 +992,7 @@ public URL getResource(String name) {
if (url != null) {
if (log.isDebugEnabled())
log.debug(" --> Returning '" + url.toString() + "'");
- return (url);
+ return url;
}
// (3) Delegate to parent unconditionally if not already attempted
@@ -1005,14 +1001,14 @@ public URL getResource(String name) {
if (url != null) {
if (log.isDebugEnabled())
log.debug(" --> Returning '" + url.toString() + "'");
- return (url);
+ return url;
}
}
// (4) Resource was not found
if (log.isDebugEnabled())
log.debug(" --> Resource not found, returning null");
- return (null);
+ return null;
}
@@ -1105,9 +1101,7 @@ public InputStream getResourceAsStream(String name) {
*/
@Override
public Class> loadClass(String name) throws ClassNotFoundException {
-
- return (loadClass(name, false));
-
+ return loadClass(name, false);
}
@@ -1154,7 +1148,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
log.debug(" Returning class from cache");
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
// (0.1) Check our previously loaded class cache
@@ -1164,7 +1158,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
log.debug(" Returning class from cache");
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
// (0.2) Try loading the class with the system class loader, to prevent
@@ -1181,8 +1175,14 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
// https://bz.apache.org/bugzilla/show_bug.cgi?id=58125 for
// details) when running under a security manager in rare cases
// this call may trigger a ClassCircularityError.
+ // See https://bz.apache.org/bugzilla/show_bug.cgi?id=61424 for
+ // details of how this may trigger a StackOverflowError
+ // Given these reported errors, catch Throwable to ensure any
+ // other edge cases are also caught
tryLoadingFromJavaseLoader = (javaseLoader.getResource(resourceName) != null);
- } catch (ClassCircularityError cce) {
+ } catch (Throwable t) {
+ // Swallow all exceptions apart from those that must be re-thrown
+ ExceptionUtils.handleThrowable(t);
// The getResource() trick won't work for this class. We have to
// try loading it directly and accept that we might get a
// ClassNotFoundException.
@@ -1195,7 +1195,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
if (clazz != null) {
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
} catch (ClassNotFoundException e) {
// Ignore
@@ -1230,7 +1230,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
log.debug(" Loading class from parent");
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
} catch (ClassNotFoundException e) {
// Ignore
@@ -1247,7 +1247,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
log.debug(" Loading class from local repository");
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
} catch (ClassNotFoundException e) {
// Ignore
@@ -1264,7 +1264,7 @@ public Class> loadClass(String name, boolean resolve) throws ClassNotFoundExce
log.debug(" Loading class from parent");
if (resolve)
resolveClass(clazz);
- return (clazz);
+ return clazz;
}
} catch (ClassNotFoundException e) {
// Ignore
@@ -1308,22 +1308,18 @@ protected void checkStateForResourceLoading(String resource) throws IllegalState
*/
@Override
protected PermissionCollection getPermissions(CodeSource codeSource) {
-
String codeUrl = codeSource.getLocation().toString();
PermissionCollection pc;
if ((pc = loaderPC.get(codeUrl)) == null) {
pc = super.getPermissions(codeSource);
if (pc != null) {
- Iterator perms = permissionList.iterator();
- while (perms.hasNext()) {
- Permission p = perms.next();
+ for (Permission p : permissionList) {
pc.add(p);
}
loaderPC.put(codeUrl,pc);
}
}
- return (pc);
-
+ return pc;
}
@@ -1580,7 +1576,7 @@ private final void clearReferencesJdbc() {
Class> lpClass =
defineClass("org.apache.catalina.loader.JdbcLeakPrevention",
classBytes, 0, offset, this.getClass().getProtectionDomain());
- Object obj = lpClass.newInstance();
+ Object obj = lpClass.getConstructor().newInstance();
@SuppressWarnings("unchecked")
List driverNames = (List) obj.getClass().getMethod(
"clearJdbcDriverRegistrations").invoke(obj);
@@ -2495,4 +2491,24 @@ public String getServiceName() {
}
return null;
}
+
+
+ @Override
+ public boolean hasLoggingConfig() {
+ if (Globals.IS_SECURITY_ENABLED) {
+ Boolean result = AccessController.doPrivileged(new PrivilegedHasLoggingConfig());
+ return result.booleanValue();
+ } else {
+ return findResource("logging.properties") != null;
+ }
+ }
+
+
+ private class PrivilegedHasLoggingConfig implements PrivilegedAction {
+
+ @Override
+ public Boolean run() {
+ return Boolean.valueOf(findResource("logging.properties") != null);
+ }
+ }
}
diff --git a/src/main/java/org/apache/catalina/loader/WebappLoader.java b/core/src/main/java/org/apache/catalina/loader/WebappLoader.java
similarity index 99%
rename from src/main/java/org/apache/catalina/loader/WebappLoader.java
rename to core/src/main/java/org/apache/catalina/loader/WebappLoader.java
index 91c6dc5..ad9bccd 100644
--- a/src/main/java/org/apache/catalina/loader/WebappLoader.java
+++ b/core/src/main/java/org/apache/catalina/loader/WebappLoader.java
@@ -33,7 +33,6 @@
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
-import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.Loader;
@@ -224,7 +223,7 @@ public void setDelegate(boolean delegate) {
* @return the ClassLoader class name.
*/
public String getLoaderClass() {
- return (this.loaderClass);
+ return this.loaderClass;
}
@@ -396,7 +395,7 @@ protected void startInternal() throws LifecycleException {
setPermissions();
- ((Lifecycle) classLoader).start();
+ classLoader.start();
String contextName = context.getName();
if (!contextName.startsWith("/")) {
diff --git a/src/main/java/org/apache/catalina/loader/mbeans-descriptors.xml b/core/src/main/java/org/apache/catalina/loader/mbeans-descriptors.xml
similarity index 100%
rename from src/main/java/org/apache/catalina/loader/mbeans-descriptors.xml
rename to core/src/main/java/org/apache/catalina/loader/mbeans-descriptors.xml
diff --git a/src/main/java/org/apache/catalina/manager/Constants.java b/core/src/main/java/org/apache/catalina/manager/Constants.java
similarity index 99%
rename from src/main/java/org/apache/catalina/manager/Constants.java
rename to core/src/main/java/org/apache/catalina/manager/Constants.java
index 921a7e5..204e439 100644
--- a/src/main/java/org/apache/catalina/manager/Constants.java
+++ b/core/src/main/java/org/apache/catalina/manager/Constants.java
@@ -201,7 +201,7 @@ public class Constants {
HTML_TAIL_SECTION =
" \n" +
"\n" +
- " Copyright © 1999-2017, Apache Software Foundation " +
+ " Copyright © 1999-2018, Apache Software Foundation " +
" \n" +
"\n" +
"