Merge remote-tracking branch 'jetty-9.4.x' into jetty-9.4.x-300-CompressionPool
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
commit
2cf0c8aeb8
|
@ -69,6 +69,18 @@ pipeline {
|
|||
}
|
||||
}
|
||||
|
||||
stage("Checkstyle ") {
|
||||
agent { node { label 'linux' } }
|
||||
options { timeout(time: 30, unit: 'MINUTES') }
|
||||
steps {
|
||||
mavenBuild("jdk11", "install checkstyle:checkstyle -DskipTests", "maven3", true)
|
||||
recordIssues(
|
||||
enabledForFailure: true, aggregatingResults: true,
|
||||
tools: [java(), checkStyle(pattern: '**/target/checkstyle-result.xml', reportEncoding: 'UTF-8')]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
stage("Build Compact3") {
|
||||
agent { node { label 'linux' } }
|
||||
options { timeout(time: 120, unit: 'MINUTES') }
|
||||
|
|
|
@ -54,16 +54,7 @@
|
|||
<classifier>sources</classifier>
|
||||
<includes>**/*</includes>
|
||||
<excludes>
|
||||
META-INF/**,
|
||||
**/Servlet3Continuation*,
|
||||
**/Jetty6Continuation*,
|
||||
**/AppContextLeakPreventer*.java,
|
||||
**/AWTLeakPreventer*.java,
|
||||
**/IntrospectorCleaner*.java,
|
||||
**/PostConstructAnnotationHandler*.java,
|
||||
**/PreDestroyAnnotationHandler*.java,
|
||||
**/ResourceAnnotationHandler*.java,
|
||||
**/ResourcesAnnotationHandler*.java
|
||||
META-INF/**, **/Servlet3Continuation*, **/Jetty6Continuation*, **/AppContextLeakPreventer*.java, **/AWTLeakPreventer*.java, **/IntrospectorCleaner*.java, **/PostConstructAnnotationHandler*.java, **/PreDestroyAnnotationHandler*.java, **/ResourceAnnotationHandler*.java, **/ResourcesAnnotationHandler*.java
|
||||
</excludes>
|
||||
<includeGroupIds>org.eclipse.jetty,org.eclipse.jetty.websocket</includeGroupIds>
|
||||
<excludeArtifactIds>javax,jetty-test-helper</excludeArtifactIds>
|
||||
|
@ -80,8 +71,7 @@
|
|||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
</manifest>
|
||||
<manifest></manifest>
|
||||
<manifestEntries>
|
||||
<mode>development</mode>
|
||||
<url>https://eclipse.org/jetty</url>
|
||||
|
|
|
@ -63,8 +63,7 @@
|
|||
</goals>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
</manifest>
|
||||
<manifest></manifest>
|
||||
<manifestEntries>
|
||||
<mode>development</mode>
|
||||
<url>http://eclipse.org/jetty</url>
|
||||
|
|
|
@ -19,17 +19,16 @@
|
|||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Jetty-specific ServletContainerInitializer for Jasper</Bundle-Description>
|
||||
<Export-Package>org.eclipse.jetty.apache.jsp.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}",
|
||||
org.eclipse.jetty.jsp.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"
|
||||
</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=javax.servlet.ServletContainerInitializer,osgi.serviceloader;osgi.serviceloader=org.apache.juli.logging.Log</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Jetty-specific ServletContainerInitializer for Jasper</Bundle-Description>
|
||||
<Export-Package>org.eclipse.jetty.apache.jsp.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}", org.eclipse.jetty.jsp.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"
|
||||
</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=javax.servlet.ServletContainerInitializer,osgi.serviceloader;osgi.serviceloader=org.apache.juli.logging.Log</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
@ -61,9 +60,9 @@
|
|||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Schemas -->
|
||||
|
@ -74,8 +73,8 @@
|
|||
|
||||
<!-- servlet api -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- JSP Impl -->
|
||||
|
@ -91,7 +90,6 @@
|
|||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- tests -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.net.URL;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.jasper.servlet.JasperInitializer;
|
||||
|
@ -37,7 +36,8 @@ import org.xml.sax.SAXException;
|
|||
*/
|
||||
public class JettyJasperInitializer extends JasperInitializer
|
||||
{
|
||||
private static final Log LOG = LogFactory.getLog(JasperInitializer.class);
|
||||
private static final Log LOG = LogFactory.getLog(JasperInitializer.class);
|
||||
|
||||
/**
|
||||
* NullTldScanner
|
||||
*
|
||||
|
@ -47,10 +47,7 @@ public class JettyJasperInitializer extends JasperInitializer
|
|||
private final class NullTldScanner extends TldScanner
|
||||
{
|
||||
/**
|
||||
* @param context
|
||||
* @param namespaceAware
|
||||
* @param validation
|
||||
* @param blockExternal
|
||||
*
|
||||
*/
|
||||
private NullTldScanner(ServletContext context, boolean namespaceAware, boolean validation, boolean blockExternal)
|
||||
{
|
||||
|
@ -81,7 +78,7 @@ public class JettyJasperInitializer extends JasperInitializer
|
|||
@Override
|
||||
public void scanJars()
|
||||
{
|
||||
return; //do nothing
|
||||
return; //do nothing
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,22 +88,25 @@ public class JettyJasperInitializer extends JasperInitializer
|
|||
*/
|
||||
@Override
|
||||
public TldScanner newTldScanner(ServletContext context, boolean namespaceAware, boolean validate, boolean blockExternal)
|
||||
{
|
||||
{
|
||||
String tmp = context.getInitParameter("org.eclipse.jetty.jsp.precompiled");
|
||||
if (tmp!=null && !tmp.equals("") && Boolean.valueOf(tmp))
|
||||
if (tmp != null && !tmp.equals("") && Boolean.valueOf(tmp))
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Jsp precompilation detected");
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Jsp precompilation detected");
|
||||
return new NullTldScanner(context, namespaceAware, validate, blockExternal);
|
||||
}
|
||||
|
||||
|
||||
Collection<URL> tldUrls = (Collection<URL>)context.getAttribute("org.eclipse.jetty.tlds");
|
||||
if (tldUrls != null)
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Tld pre-scan detected");
|
||||
return new JettyTldPreScanned(context,namespaceAware,validate,blockExternal,tldUrls);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Tld pre-scan detected");
|
||||
return new JettyTldPreScanned(context, namespaceAware, validate, blockExternal, tldUrls);
|
||||
}
|
||||
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Defaulting to jasper tld scanning");
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Defaulting to jasper tld scanning");
|
||||
return super.newTldScanner(context, namespaceAware, validate, blockExternal);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,12 +16,10 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
|
||||
package org.eclipse.jetty.apache.jsp;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.jasper.servlet.TldPreScanned;
|
||||
|
@ -33,25 +31,24 @@ import org.apache.tomcat.util.descriptor.tld.TldResourcePath;
|
|||
* Change to TldPreScanned to not require that the tlds have been
|
||||
* pre-scanned from a jar file, but rather may be files in the
|
||||
* file system.
|
||||
*
|
||||
*
|
||||
* This is important for running in the jetty maven plugin
|
||||
* environment in multi-module builds, where modules that contain tlds
|
||||
* may be in the reactor at the same time as a webapp being run with the
|
||||
* plugin. That means that the tlds will be used from their location in
|
||||
* the file system, rather than from their assembled jar.
|
||||
*
|
||||
*/
|
||||
public class JettyTldPreScanned extends TldPreScanned
|
||||
{
|
||||
private final Collection<URL> _jettyPreScannedURLs;
|
||||
|
||||
|
||||
public JettyTldPreScanned(ServletContext context, boolean namespaceAware, boolean validation, boolean blockExternal, Collection<URL> preScannedTlds)
|
||||
{
|
||||
super(context, namespaceAware, validation, blockExternal, preScannedTlds);
|
||||
_jettyPreScannedURLs = preScannedTlds;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* @see org.apache.jasper.servlet.TldPreScanned#scanJars()
|
||||
*/
|
||||
@Override
|
||||
|
@ -65,8 +62,8 @@ public class JettyTldPreScanned extends TldPreScanned
|
|||
int a = str.indexOf("jar:");
|
||||
int b = str.indexOf("META-INF");
|
||||
if (b < 0)
|
||||
throw new IllegalStateException("Bad tld url: "+str);
|
||||
|
||||
throw new IllegalStateException("Bad tld url: " + str);
|
||||
|
||||
String path = str.substring(b);
|
||||
if (a >= 0)
|
||||
{
|
||||
|
@ -95,5 +92,4 @@ public class JettyTldPreScanned extends TldPreScanned
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,28 +18,28 @@
|
|||
|
||||
package org.eclipse.jetty.apache.jsp;
|
||||
|
||||
public class JuliLog implements org.apache.juli.logging.Log
|
||||
public class JuliLog implements org.apache.juli.logging.Log
|
||||
{
|
||||
public static org.apache.juli.logging.Log getInstance(String name)
|
||||
{
|
||||
return new JuliLog(name);
|
||||
}
|
||||
|
||||
|
||||
private final org.eclipse.jetty.util.log.Logger _logger;
|
||||
private final org.eclipse.jetty.util.log.StdErrLog _stdErrLog;
|
||||
|
||||
public JuliLog()
|
||||
{
|
||||
_logger=org.eclipse.jetty.util.log.Log.getRootLogger();
|
||||
_stdErrLog=(_logger instanceof org.eclipse.jetty.util.log.StdErrLog) ? (org.eclipse.jetty.util.log.StdErrLog)_logger:null;
|
||||
{
|
||||
_logger = org.eclipse.jetty.util.log.Log.getRootLogger();
|
||||
_stdErrLog = (_logger instanceof org.eclipse.jetty.util.log.StdErrLog) ? (org.eclipse.jetty.util.log.StdErrLog)_logger : null;
|
||||
}
|
||||
|
||||
|
||||
public JuliLog(String name)
|
||||
{
|
||||
_logger=org.eclipse.jetty.util.log.Log.getLogger(name);
|
||||
_stdErrLog=(_logger instanceof org.eclipse.jetty.util.log.StdErrLog) ? (org.eclipse.jetty.util.log.StdErrLog)_logger:null;
|
||||
_logger = org.eclipse.jetty.util.log.Log.getLogger(name);
|
||||
_stdErrLog = (_logger instanceof org.eclipse.jetty.util.log.StdErrLog) ? (org.eclipse.jetty.util.log.StdErrLog)_logger : null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isDebugEnabled()
|
||||
{
|
||||
|
@ -49,31 +49,31 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
@Override
|
||||
public boolean isErrorEnabled()
|
||||
{
|
||||
return _stdErrLog==null?true:_stdErrLog.getLevel()<=org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
return _stdErrLog == null || _stdErrLog.getLevel() <= org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFatalEnabled()
|
||||
{
|
||||
return _stdErrLog==null?true:_stdErrLog.getLevel()<=org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
return _stdErrLog == null || _stdErrLog.getLevel() <= org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled()
|
||||
{
|
||||
return _stdErrLog==null?true:_stdErrLog.getLevel()<=org.eclipse.jetty.util.log.StdErrLog.LEVEL_INFO;
|
||||
return _stdErrLog == null || _stdErrLog.getLevel() <= org.eclipse.jetty.util.log.StdErrLog.LEVEL_INFO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTraceEnabled()
|
||||
{
|
||||
return _stdErrLog==null?true:_stdErrLog.getLevel()<=org.eclipse.jetty.util.log.StdErrLog.LEVEL_DEBUG;
|
||||
return _stdErrLog == null || _stdErrLog.getLevel() <= org.eclipse.jetty.util.log.StdErrLog.LEVEL_DEBUG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled()
|
||||
{
|
||||
return _stdErrLog==null?true:_stdErrLog.getLevel()<=org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
return _stdErrLog == null || _stdErrLog.getLevel() <= org.eclipse.jetty.util.log.StdErrLog.LEVEL_WARN;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -82,16 +82,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.debug((String)message);
|
||||
else
|
||||
_logger.debug("{}",message);
|
||||
_logger.debug("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trace(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.debug((String)message,t);
|
||||
_logger.debug((String)message, t);
|
||||
else
|
||||
_logger.debug("{}",message,t);
|
||||
_logger.debug("{}", message, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,16 +100,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.debug((String)message);
|
||||
else
|
||||
_logger.debug("{}",message);
|
||||
_logger.debug("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.debug((String)message,t);
|
||||
_logger.debug((String)message, t);
|
||||
else
|
||||
_logger.debug("{}",message,t);
|
||||
_logger.debug("{}", message, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -118,16 +118,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.info((String)message);
|
||||
else
|
||||
_logger.info("{}",message);
|
||||
_logger.info("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.info((String)message,t);
|
||||
_logger.info((String)message, t);
|
||||
else
|
||||
_logger.info("{}",message,t);
|
||||
_logger.info("{}", message, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -136,16 +136,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.warn((String)message);
|
||||
else
|
||||
_logger.warn("{}",message);
|
||||
_logger.warn("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.warn((String)message,t);
|
||||
_logger.warn((String)message, t);
|
||||
else
|
||||
_logger.warn("{}",message,t);
|
||||
_logger.warn("{}", message, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -154,16 +154,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.warn((String)message);
|
||||
else
|
||||
_logger.warn("{}",message);
|
||||
_logger.warn("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.warn((String)message,t);
|
||||
_logger.warn((String)message, t);
|
||||
else
|
||||
_logger.warn("{}",message,t);
|
||||
_logger.warn("{}", message, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -172,16 +172,16 @@ public class JuliLog implements org.apache.juli.logging.Log
|
|||
if (message instanceof String)
|
||||
_logger.warn((String)message);
|
||||
else
|
||||
_logger.warn("{}",message);
|
||||
_logger.warn("{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fatal(Object message, Throwable t)
|
||||
{
|
||||
if (message instanceof String)
|
||||
_logger.warn((String)message,t);
|
||||
_logger.warn((String)message, t);
|
||||
else
|
||||
_logger.warn("{}",message,t);
|
||||
_logger.warn("{}", message, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.io.IOException;
|
|||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -30,11 +29,10 @@ import javax.servlet.http.HttpServletResponse;
|
|||
|
||||
import org.apache.jasper.servlet.JspServlet;
|
||||
|
||||
|
||||
/**
|
||||
* JettyJspServlet
|
||||
*
|
||||
* Wrapper for the jsp servlet that handles receiving requests mapped from
|
||||
* Wrapper for the jsp servlet that handles receiving requests mapped from
|
||||
* jsp-property-groups. Mappings could be wildcard urls like "/*", which would
|
||||
* include welcome files, but we need those to be handled by the DefaultServlet.
|
||||
*/
|
||||
|
@ -42,33 +40,29 @@ public class JettyJspServlet extends JspServlet
|
|||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -5387857473125086791L;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
|
||||
{
|
||||
HttpServletRequest request = null;
|
||||
if (req instanceof HttpServletRequest)
|
||||
request = (HttpServletRequest)req;
|
||||
request = req;
|
||||
else
|
||||
throw new ServletException("Request not HttpServletRequest");
|
||||
|
||||
String servletPath=null;
|
||||
String pathInfo=null;
|
||||
if (request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI)!=null)
|
||||
String servletPath = null;
|
||||
String pathInfo = null;
|
||||
if (request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI) != null)
|
||||
{
|
||||
servletPath=(String)request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH);
|
||||
pathInfo=(String)request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO);
|
||||
if (servletPath==null)
|
||||
servletPath = (String)request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH);
|
||||
pathInfo = (String)request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO);
|
||||
if (servletPath == null)
|
||||
{
|
||||
servletPath=request.getServletPath();
|
||||
pathInfo=request.getPathInfo();
|
||||
servletPath = request.getServletPath();
|
||||
pathInfo = request.getPathInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -76,9 +70,9 @@ public class JettyJspServlet extends JspServlet
|
|||
servletPath = request.getServletPath();
|
||||
pathInfo = request.getPathInfo();
|
||||
}
|
||||
|
||||
String pathInContext = addPaths(servletPath,pathInfo);
|
||||
|
||||
|
||||
String pathInContext = addPaths(servletPath, pathInfo);
|
||||
|
||||
String jspFile = getInitParameter("jspFile");
|
||||
|
||||
//if this is a forced-path from a jsp-file, we want the jsp servlet to handle it,
|
||||
|
@ -92,7 +86,7 @@ public class JettyJspServlet extends JspServlet
|
|||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
//check if it resolves to a directory
|
||||
String realPath = getServletContext().getRealPath(pathInContext);
|
||||
if (realPath != null)
|
||||
|
@ -107,7 +101,7 @@ public class JettyJspServlet extends JspServlet
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//fall through to the normal jsp servlet handling
|
||||
super.service(req, resp);
|
||||
}
|
||||
|
@ -121,10 +115,10 @@ public class JettyJspServlet extends JspServlet
|
|||
{
|
||||
if (servletPath.isEmpty())
|
||||
return pathInfo;
|
||||
|
||||
if (pathInfo==null)
|
||||
|
||||
if (pathInfo == null)
|
||||
return servletPath;
|
||||
|
||||
return servletPath+pathInfo;
|
||||
|
||||
return servletPath + pathInfo;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,15 +18,10 @@
|
|||
|
||||
package org.eclipse.jetty.jsp;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -47,6 +42,10 @@ import org.junit.jupiter.api.BeforeEach;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
|
||||
@ExtendWith(WorkDirExtension.class)
|
||||
public class TestJettyJspServlet
|
||||
{
|
||||
|
@ -54,7 +53,7 @@ public class TestJettyJspServlet
|
|||
|
||||
private File _dir;
|
||||
private ServletTester _tester;
|
||||
|
||||
|
||||
public static class DfltServlet extends HttpServlet
|
||||
{
|
||||
|
||||
|
@ -62,8 +61,8 @@ public class TestJettyJspServlet
|
|||
{
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
|
||||
*/
|
||||
@Override
|
||||
|
@ -72,11 +71,10 @@ public class TestJettyJspServlet
|
|||
resp.setContentType("html/text");
|
||||
resp.getOutputStream().println("This.Is.The.Default.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void setUp () throws Exception
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
JspFactory.setDefaultFactory(new JspFactoryImpl());
|
||||
_dir = MavenTestingUtils.getTestResourceDir("base");
|
||||
|
@ -88,12 +86,12 @@ public class TestJettyJspServlet
|
|||
_tester.getContext().setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager());
|
||||
ServletHolder dfltHolder = new ServletHolder();
|
||||
dfltHolder.setName("default");
|
||||
dfltHolder.setHeldClass( DfltServlet.class);
|
||||
dfltHolder.setHeldClass(DfltServlet.class);
|
||||
_tester.getContext().addServlet(dfltHolder, "/");
|
||||
|
||||
_tester.start();
|
||||
}
|
||||
|
||||
|
||||
@AfterEach
|
||||
public void tearDown() throws Exception
|
||||
{
|
||||
|
@ -105,8 +103,8 @@ public class TestJettyJspServlet
|
|||
public void testWithJsp() throws Exception
|
||||
{
|
||||
//test that an ordinary jsp is served by jsp servlet
|
||||
String request = "" +
|
||||
"GET /context/foo.jsp HTTP/1.1\r\n" +
|
||||
String request =
|
||||
"GET /context/foo.jsp HTTP/1.1\r\n" +
|
||||
"Host: localhost\r\n" +
|
||||
"Connection: close\r\n" +
|
||||
"\r\n";
|
||||
|
@ -115,14 +113,13 @@ public class TestJettyJspServlet
|
|||
HttpTester.Response response = HttpTester.parseResponse(rawResponse);
|
||||
assertThat(response.toString(), response.getContent(), not(containsString("This.Is.The.Default.")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testWithDirectory() throws Exception
|
||||
{
|
||||
//test that a dir is served by the default servlet
|
||||
String request = "" +
|
||||
"GET /context/dir HTTP/1.1\r\n" +
|
||||
String request =
|
||||
"GET /context/dir HTTP/1.1\r\n" +
|
||||
"Host: localhost\r\n" +
|
||||
"Connection: close\r\n" +
|
||||
"\r\n";
|
||||
|
|
|
@ -16,11 +16,8 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
|
||||
package org.eclipse.jetty.jsp;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
@ -34,10 +31,12 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
|
|||
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
/**
|
||||
* TestJettyTldPreScanned
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class TestJettyTldPreScanned
|
||||
{
|
||||
|
@ -47,21 +46,21 @@ public class TestJettyTldPreScanned
|
|||
*/
|
||||
@Test
|
||||
public void testIt()
|
||||
throws Exception
|
||||
throws Exception
|
||||
{
|
||||
File jar = MavenTestingUtils.getTestResourceFile("taglib.jar");
|
||||
File tld = MavenTestingUtils.getTestResourceFile("META-INF/foo-taglib.tld");
|
||||
|
||||
|
||||
List<URL> list = new ArrayList<>();
|
||||
list.add(new URL("jar:"+jar.toURI().toURL().toString()+"!/META-INF/bar-taglib.tld"));
|
||||
list.add(new URL("jar:" + jar.toURI().toURL().toString() + "!/META-INF/bar-taglib.tld"));
|
||||
list.add(tld.toURI().toURL());
|
||||
|
||||
JettyTldPreScanned preScanned = new JettyTldPreScanned(new ServletContextHandler().getServletContext(),false,false,false,list);
|
||||
|
||||
JettyTldPreScanned preScanned = new JettyTldPreScanned(new ServletContextHandler().getServletContext(), false, false, false, list);
|
||||
preScanned.scanJars();
|
||||
Map<TldResourcePath, TaglibXml> map = preScanned.getTldResourcePathTaglibXmlMap();
|
||||
assertNotNull(map);
|
||||
assertEquals(2, map.size());
|
||||
for (TldResourcePath p: map.keySet())
|
||||
for (TldResourcePath p : map.keySet())
|
||||
{
|
||||
URL u = p.getUrl();
|
||||
TaglibXml tlx = map.get(p);
|
||||
|
@ -70,5 +69,4 @@ public class TestJettyTldPreScanned
|
|||
fail("unknown tag");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,12 +18,11 @@
|
|||
|
||||
package org.eclipse.jetty.jsp;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class TestJspFileNameToClass
|
||||
{
|
||||
|
||||
|
@ -33,18 +32,17 @@ public class TestJspFileNameToClass
|
|||
ServletHolder h = new ServletHolder();
|
||||
h.setName("test");
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp(null));
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp(null));
|
||||
assertEquals(null, h.getClassNameForJsp(""));
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp(""));
|
||||
assertEquals(null, h.getClassNameForJsp("/blah/"));
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp("/blah/"));
|
||||
assertEquals(null, h.getClassNameForJsp("//blah///"));
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp("//blah///"));
|
||||
assertEquals(null, h.getClassNameForJsp("/a/b/c/blah/"));
|
||||
|
||||
assertEquals(null, h.getClassNameForJsp("/a/b/c/blah/"));
|
||||
|
||||
assertEquals("org.apache.jsp.a.b.c.blah", h.getClassNameForJsp("/a/b/c/blah"));
|
||||
assertEquals("org.apache.jsp.a.b.c.blah", h.getClassNameForJsp("/a/b/c/blah"));
|
||||
|
||||
assertEquals("org.apache.jsp.blah_jsp", h.getClassNameForJsp("/blah.jsp"));
|
||||
|
||||
|
@ -56,5 +54,4 @@ public class TestJspFileNameToClass
|
|||
|
||||
assertEquals("org.apache.jsp.a.b.c.blah_jsp", h.getClassNameForJsp("a/b/c/blah.jsp"));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,17 +10,17 @@
|
|||
<url>http://tomcat.apache.org/taglibs/standard/</url>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.apache.jstl</bundle-symbolic-name>
|
||||
<bundle-symbolic-name>${project.groupId}.apache.jstl</bundle-symbolic-name>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<useSystemClassLoader>false</useSystemClassLoader>
|
||||
</configuration>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<useSystemClassLoader>false</useSystemClassLoader>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
|
@ -35,36 +35,36 @@
|
|||
<dependencies>
|
||||
<!-- JSTL Api -->
|
||||
<dependency>
|
||||
<groupId>org.apache.taglibs</groupId>
|
||||
<artifactId>taglibs-standard-spec</artifactId>
|
||||
<groupId>org.apache.taglibs</groupId>
|
||||
<artifactId>taglibs-standard-spec</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- JSTL Impl -->
|
||||
<dependency>
|
||||
<groupId>org.apache.taglibs</groupId>
|
||||
<artifactId>taglibs-standard-impl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>apache-jsp</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
<groupId>org.apache.taglibs</groupId>
|
||||
<artifactId>taglibs-standard-impl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-annotations</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>apache-jsp</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-annotations</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-webapp</artifactId>
|
||||
|
|
|
@ -33,7 +33,7 @@ public class JspConfig
|
|||
{
|
||||
context.setAttribute("javax.servlet.context.tempdir", scratchDir);
|
||||
context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$|.*javax.servlet.jsp.jstl-[^/]*\\.jar|.*taglibs-standard-impl-.*\\.jar");
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$|.*javax.servlet.jsp.jstl-[^/]*\\.jar|.*taglibs-standard-impl-.*\\.jar");
|
||||
context.setWar(baseUri.toASCIIString());
|
||||
context.setResourceBase(baseUri.toASCIIString());
|
||||
}
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
|
||||
package org.eclipse.jetty.jstl;
|
||||
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
@ -42,11 +38,15 @@ import org.junit.jupiter.api.AfterAll;
|
|||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
public class JspIncludeTest
|
||||
{
|
||||
private static Server server;
|
||||
private static URI baseUri;
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void startServer() throws Exception
|
||||
{
|
||||
|
@ -55,37 +55,37 @@ public class JspIncludeTest
|
|||
ServerConnector connector = new ServerConnector(server);
|
||||
connector.setPort(0);
|
||||
server.addConnector(connector);
|
||||
|
||||
|
||||
// Setup WebAppContext
|
||||
File testWebAppDir = MavenTestingUtils.getProjectDir("src/test/webapp");
|
||||
|
||||
|
||||
// Prepare WebApp libs
|
||||
File libDir = new File(testWebAppDir, "WEB-INF/lib");
|
||||
FS.ensureDirExists(libDir);
|
||||
File testTagLibDir = MavenTestingUtils.getProjectDir("src/test/taglibjar");
|
||||
JAR.create(testTagLibDir, new File(libDir, "testtaglib.jar"));
|
||||
|
||||
|
||||
// Configure WebAppContext
|
||||
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault(server);
|
||||
.setServerDefault(server);
|
||||
|
||||
classlist.addBefore(
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
WebAppContext context = new WebAppContext();
|
||||
context.setContextPath("/");
|
||||
|
||||
|
||||
File scratchDir = MavenTestingUtils.getTargetFile("tests/" + JspIncludeTest.class.getSimpleName() + "-scratch");
|
||||
FS.ensureEmpty(scratchDir);
|
||||
JspConfig.init(context, testWebAppDir.toURI(), scratchDir);
|
||||
|
||||
|
||||
server.setHandler(context);
|
||||
|
||||
|
||||
// Start Server
|
||||
server.start();
|
||||
|
||||
|
||||
// Figure out Base URI
|
||||
String host = connector.getHost();
|
||||
if (host == null)
|
||||
|
@ -95,13 +95,13 @@ public class JspIncludeTest
|
|||
int port = connector.getLocalPort();
|
||||
baseUri = new URI(String.format("http://%s:%d/", host, port));
|
||||
}
|
||||
|
||||
|
||||
@AfterAll
|
||||
public static void stopServer() throws Exception
|
||||
{
|
||||
server.stop();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testTopWithIncluded() throws IOException
|
||||
{
|
||||
|
@ -114,13 +114,13 @@ public class JspIncludeTest
|
|||
|
||||
try
|
||||
{
|
||||
connection = (HttpURLConnection) uri.toURL().openConnection();
|
||||
connection = (HttpURLConnection)uri.toURL().openConnection();
|
||||
connection.connect();
|
||||
if (HttpURLConnection.HTTP_OK != connection.getResponseCode())
|
||||
{
|
||||
String body = getPotentialBody(connection);
|
||||
String err = String.format("GET request failed (%d %s) %s%n%s", connection.getResponseCode(), connection.getResponseMessage(),
|
||||
uri.toASCIIString(), body);
|
||||
uri.toASCIIString(), body);
|
||||
throw new IOException(err);
|
||||
}
|
||||
in = connection.getInputStream();
|
||||
|
|
|
@ -18,18 +18,12 @@
|
|||
|
||||
package org.eclipse.jetty.jstl;
|
||||
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import javax.servlet.jsp.JspException;
|
||||
|
||||
import org.eclipse.jetty.server.Server;
|
||||
|
@ -44,11 +38,16 @@ import org.junit.jupiter.api.AfterAll;
|
|||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
|
||||
public class JstlTest
|
||||
{
|
||||
private static Server server;
|
||||
private static URI baseUri;
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void startServer() throws Exception
|
||||
{
|
||||
|
@ -57,37 +56,37 @@ public class JstlTest
|
|||
ServerConnector connector = new ServerConnector(server);
|
||||
connector.setPort(0);
|
||||
server.addConnector(connector);
|
||||
|
||||
|
||||
// Setup WebAppContext
|
||||
File testWebAppDir = MavenTestingUtils.getProjectDir("src/test/webapp");
|
||||
|
||||
|
||||
// Prepare WebApp libs
|
||||
File libDir = new File(testWebAppDir, "WEB-INF/lib");
|
||||
FS.ensureDirExists(libDir);
|
||||
File testTagLibDir = MavenTestingUtils.getProjectDir("src/test/taglibjar");
|
||||
JAR.create(testTagLibDir,new File(libDir, "testtaglib.jar"));
|
||||
|
||||
JAR.create(testTagLibDir, new File(libDir, "testtaglib.jar"));
|
||||
|
||||
// Configure WebAppContext
|
||||
|
||||
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault(server);
|
||||
.setServerDefault(server);
|
||||
|
||||
classlist.addBefore(
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
WebAppContext context = new WebAppContext();
|
||||
context.setContextPath("/");
|
||||
|
||||
|
||||
File scratchDir = MavenTestingUtils.getTargetFile("tests/" + JstlTest.class.getSimpleName() + "-scratch");
|
||||
FS.ensureEmpty(scratchDir);
|
||||
JspConfig.init(context,testWebAppDir.toURI(),scratchDir);
|
||||
|
||||
JspConfig.init(context, testWebAppDir.toURI(), scratchDir);
|
||||
|
||||
server.setHandler(context);
|
||||
|
||||
|
||||
// Start Server
|
||||
server.start();
|
||||
|
||||
|
||||
// Figure out Base URI
|
||||
String host = connector.getHost();
|
||||
if (host == null)
|
||||
|
@ -95,22 +94,22 @@ public class JstlTest
|
|||
host = "localhost";
|
||||
}
|
||||
int port = connector.getLocalPort();
|
||||
baseUri = new URI(String.format("http://%s:%d/",host,port));
|
||||
baseUri = new URI(String.format("http://%s:%d/", host, port));
|
||||
}
|
||||
|
||||
|
||||
@AfterAll
|
||||
public static void stopServer() throws Exception
|
||||
{
|
||||
if (server != null)
|
||||
server.stop();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUrlsBasic() throws IOException
|
||||
{
|
||||
HttpURLConnection http = (HttpURLConnection) baseUri.resolve("/urls.jsp").toURL().openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)baseUri.resolve("/urls.jsp").toURL().openConnection();
|
||||
assertThat("http response", http.getResponseCode(), is(200));
|
||||
try(InputStream input = http.getInputStream())
|
||||
try (InputStream input = http.getInputStream())
|
||||
{
|
||||
String resp = IO.toString(input, StandardCharsets.UTF_8);
|
||||
assertThat("Response should be JSP processed", resp, not(containsString("<c:url")));
|
||||
|
@ -118,13 +117,13 @@ public class JstlTest
|
|||
assertThat("Response", resp, containsString("[c:url param] = ref.jsp;key=value;jsessionid="));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testCatchBasic() throws IOException
|
||||
{
|
||||
HttpURLConnection http = (HttpURLConnection) baseUri.resolve("/catch-basic.jsp").toURL().openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)baseUri.resolve("/catch-basic.jsp").toURL().openConnection();
|
||||
assertThat("http response", http.getResponseCode(), is(200));
|
||||
try(InputStream input = http.getInputStream())
|
||||
try (InputStream input = http.getInputStream())
|
||||
{
|
||||
String resp = IO.toString(input, StandardCharsets.UTF_8);
|
||||
assertThat("Response should be JSP processed", resp, not(containsString("<c:catch")));
|
||||
|
@ -132,13 +131,13 @@ public class JstlTest
|
|||
assertThat("Response", resp, containsString("[c:catch] exception.message : In <parseNumber>"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testCatchTaglib() throws IOException
|
||||
{
|
||||
HttpURLConnection http = (HttpURLConnection) baseUri.resolve("/catch-taglib.jsp").toURL().openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)baseUri.resolve("/catch-taglib.jsp").toURL().openConnection();
|
||||
assertThat("http response", http.getResponseCode(), is(200));
|
||||
try(InputStream input = http.getInputStream())
|
||||
try (InputStream input = http.getInputStream())
|
||||
{
|
||||
String resp = IO.toString(input, StandardCharsets.UTF_8);
|
||||
assertThat("Response should be JSP processed", resp, not(containsString("<c:catch>")));
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
||||
version="3.1">
|
||||
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
|
||||
<description>Test webapp for JSTL</description>
|
||||
</web-app>
|
|
@ -0,0 +1,348 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="16">
|
||||
<profile kind="CodeFormatterProfile" name="Jetty" version="16">
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="128"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="512"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
</profile>
|
||||
</profiles>
|
|
@ -0,0 +1,533 @@
|
|||
<code_scheme name="Jetty" version="173">
|
||||
<option name="AUTODETECT_INDENTS" value="false" />
|
||||
<option name="LINE_SEPARATOR" value="
" />
|
||||
<option name="RIGHT_MARGIN" value="128" />
|
||||
<AndroidXmlCodeStyleSettings>
|
||||
<option name="USE_CUSTOM_SETTINGS" value="true" />
|
||||
</AndroidXmlCodeStyleSettings>
|
||||
<HTMLCodeStyleSettings>
|
||||
<option name="HTML_ATTRIBUTE_WRAP" value="0" />
|
||||
</HTMLCodeStyleSettings>
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="USE_EXTERNAL_ANNOTATIONS" value="true" />
|
||||
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
|
||||
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
|
||||
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
|
||||
<value />
|
||||
</option>
|
||||
<option name="IMPORT_LAYOUT_TABLE">
|
||||
<value>
|
||||
<package name="java" withSubpackages="true" static="false" />
|
||||
<package name="javax" withSubpackages="true" static="false" />
|
||||
<emptyLine />
|
||||
<package name="" withSubpackages="true" static="false" />
|
||||
<emptyLine />
|
||||
<package name="" withSubpackages="true" static="true" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="JD_ALIGN_PARAM_COMMENTS" value="false" />
|
||||
<option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" />
|
||||
<option name="JD_P_AT_EMPTY_LINES" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_PARAMETER" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_EXCEPTION" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_RETURN" value="false" />
|
||||
<option name="JD_PRESERVE_LINE_FEEDS" value="true" />
|
||||
</JavaCodeStyleSettings>
|
||||
<MarkdownNavigatorCodeStyleSettings>
|
||||
<option name="RIGHT_MARGIN" value="72" />
|
||||
</MarkdownNavigatorCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_ATTRIBUTE_WRAP" value="0" />
|
||||
<option name="XML_TEXT_WRAP" value="0" />
|
||||
<option name="XML_KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="XML_KEEP_LINE_BREAKS_IN_TEXT" value="false" />
|
||||
<option name="XML_KEEP_BLANK_LINES" value="1" />
|
||||
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
|
||||
<option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="Groovy">
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JAVA">
|
||||
<option name="RIGHT_MARGIN" value="128" />
|
||||
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" />
|
||||
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
|
||||
<option name="BRACE_STYLE" value="2" />
|
||||
<option name="CLASS_BRACE_STYLE" value="2" />
|
||||
<option name="METHOD_BRACE_STYLE" value="2" />
|
||||
<option name="LAMBDA_BRACE_STYLE" value="2" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
||||
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
|
||||
<option name="RESOURCE_LIST_WRAP" value="2" />
|
||||
<option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="false" />
|
||||
<option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="true" />
|
||||
<option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||
</indentOptions>
|
||||
<arrangement>
|
||||
<rules>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<ENUM>true</ENUM>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PUBLIC>true</PUBLIC>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PROTECTED>true</PROTECTED>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PACKAGE_PRIVATE>true</PACKAGE_PRIVATE>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PRIVATE>true</PRIVATE>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PUBLIC>true</PUBLIC>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PROTECTED>true</PROTECTED>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PACKAGE_PRIVATE>true</PACKAGE_PRIVATE>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PRIVATE>true</PRIVATE>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<INITIALIZER_BLOCK>true</INITIALIZER_BLOCK>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PUBLIC>true</PUBLIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PROTECTED>true</PROTECTED>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PACKAGE_PRIVATE>true</PACKAGE_PRIVATE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<FINAL>true</FINAL>
|
||||
<PRIVATE>true</PRIVATE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PUBLIC>true</PUBLIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PROTECTED>true</PROTECTED>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PACKAGE_PRIVATE>true</PACKAGE_PRIVATE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<FIELD>true</FIELD>
|
||||
<PRIVATE>true</PRIVATE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<FIELD>true</FIELD>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<INITIALIZER_BLOCK>true</INITIALIZER_BLOCK>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<CONSTRUCTOR>true</CONSTRUCTOR>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<METHOD>true</METHOD>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<METHOD>true</METHOD>
|
||||
<PUBLIC>true</PUBLIC>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<METHOD>true</METHOD>
|
||||
<PROTECTED>true</PROTECTED>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<METHOD>true</METHOD>
|
||||
<PRIVATE>true</PRIVATE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<INTERFACE>true</INTERFACE>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<CLASS>true</CLASS>
|
||||
<STATIC>true</STATIC>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<CLASS>true</CLASS>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
</rules>
|
||||
</arrangement>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="XML">
|
||||
<option name="RIGHT_MARGIN" value="256" />
|
||||
<option name="FORCE_REARRANGE_MODE" value="1" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
<arrangement>
|
||||
<rules>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:android</NAME>
|
||||
<XML_NAMESPACE>Namespace:</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:.*</NAME>
|
||||
<XML_NAMESPACE>Namespace:</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:id</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:name</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>name</NAME>
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>style</NAME>
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_width</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_height</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_.*</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:width</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:height</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
</rules>
|
||||
</arrangement>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
|
@ -0,0 +1,22 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>build-resources</artifactId>
|
||||
<version>9.4.20-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Jetty :: Build Resources</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
<configuration>
|
||||
<!-- never deploy to a repository, only use in reactor -->
|
||||
<skip>true</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,287 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
|
||||
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
|
||||
<!--
|
||||
Checkstyle configuration that checks the Jetty coding conventions.
|
||||
-->
|
||||
|
||||
<module name = "Checker">
|
||||
<property name="charset" value="UTF-8"/>
|
||||
|
||||
<property name="severity" value="warning"/>
|
||||
|
||||
<property name="fileExtensions" value="java"/>
|
||||
|
||||
<!-- Excludes all 'module-info.java' files -->
|
||||
<!-- See https://checkstyle.org/config_filefilters.html -->
|
||||
<module name="BeforeExecutionExclusionFileFilter">
|
||||
<property name="fileNamePattern" value="module\-info\.java$"/>
|
||||
</module>
|
||||
|
||||
<!-- Checks for whitespace -->
|
||||
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
||||
<module name="FileTabCharacter">
|
||||
<property name="eachLine" value="true"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<module name="SuppressionCommentFilter">
|
||||
<property name="offCommentFormat" value="@checkstyle-disable-check : ([\w\|]+)"/>
|
||||
<property name="onCommentFormat" value="@checkstyle-enable-check : ([\w\|]+)"/>
|
||||
<property name="checkFormat" value="$1"/>
|
||||
</module>
|
||||
|
||||
<!--
|
||||
Eclipse Jetty Specific.
|
||||
===========================================================================================
|
||||
-->
|
||||
|
||||
<!-- Check abbreviations(consecutive capital letters) length in identifier name -->
|
||||
<module name="AbbreviationAsWordInName">
|
||||
<property name="ignoreFinal" value="true"/>
|
||||
<property name="allowedAbbreviations" value="RFC, XML, JSON,
|
||||
HTTP, HTTPS, ALPN,
|
||||
CRLDP, OCSP, SPNEGO, LDAP, PKIX,
|
||||
URL, URI, FCGI, IP, ID, ISO8859, UTF8, ASCII,
|
||||
JDBC, JAAS, JMX, RMI, JMXRMI, JNDI, JSTL, JPMS,
|
||||
NCSA, GZIP,
|
||||
CRLF, AWT"/>
|
||||
</module>
|
||||
|
||||
<!-- Location of Annotations -->
|
||||
<module name="AnnotationLocation">
|
||||
<property name="allowSamelineSingleParameterlessAnnotation" value="false"/>
|
||||
</module>
|
||||
|
||||
<!-- Catch Parameter Name Format -->
|
||||
<module name="CatchParameterName">
|
||||
<property name="format" value="^(e|t|x|ex|th|e2|[a-z][a-z][a-zA-Z0-9]+)$"/>
|
||||
</module>
|
||||
|
||||
<!-- Class Type Parameter Name Format -->
|
||||
<module name="ClassTypeParameterName">
|
||||
<property name="format" value="^[A-Z][A-Z0-9]*$"/>
|
||||
</module>
|
||||
|
||||
<!-- Import Line Ordering -->
|
||||
<module name="CustomImportOrder">
|
||||
<property name="sortImportsInGroupAlphabetically" value="true"/>
|
||||
<property name="separateLineBetweenGroups" value="true"/>
|
||||
<property name="customImportOrderRules" value="STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE###STATIC"/>
|
||||
</module>
|
||||
|
||||
<!-- do not allow empty blocks in: try, finally, if, else, or switch -->
|
||||
<module name="EmptyBlock">
|
||||
<property name="option" value="TEXT"/>
|
||||
<property name="tokens"
|
||||
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
|
||||
</module>
|
||||
|
||||
<!-- enforce empty line after specified tokens -->
|
||||
<module name="EmptyLineSeparator">
|
||||
<property name="allowNoEmptyLineBetweenFields" value="true"/>
|
||||
<property name="allowMultipleEmptyLines" value="false"/>
|
||||
<property name="tokens"
|
||||
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
|
||||
STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
|
||||
</module>
|
||||
|
||||
<!-- Indentation Rules -->
|
||||
<module name="Indentation">
|
||||
<property name="arrayInitIndent" value="8"/>
|
||||
</module>
|
||||
|
||||
<!-- Interface Type Parameter Name -->
|
||||
<module name="InterfaceTypeParameterName">
|
||||
<property name="format" value="^[A-Z][A-Z0-9]*$"/>
|
||||
</module>
|
||||
|
||||
<!-- left curly brace must be on new line -->
|
||||
<module name="LeftCurly">
|
||||
<property name="option" value="nl"/>
|
||||
</module>
|
||||
|
||||
<!-- Method Type Parameter Name -->
|
||||
<module name="MethodTypeParameterName">
|
||||
<property name="format" value="^[A-Z][A-Z0-9]*$"/>
|
||||
</module>
|
||||
|
||||
<!-- Member Name Format -->
|
||||
<module name="MemberName">
|
||||
<property name="format" value="^[_a-z][a-zA-Z0-9]*$"/>
|
||||
</module>
|
||||
|
||||
<!-- require braces is disabled - we don't enforce that in Jetty
|
||||
<module name="NeedBraces">
|
||||
<property name="allowSingleLineStatement" value="true"/>
|
||||
</module>
|
||||
-->
|
||||
|
||||
<!-- No Whitespace After specific tokens -->
|
||||
<module name="NoWhitespaceAfter">
|
||||
<property name="tokens" value="ARRAY_INIT, AT, INC, DEC, UNARY_MINUS, UNARY_PLUS, BNOT, LNOT, DOT, ARRAY_DECLARATOR, INDEX_OP, TYPECAST"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
</module>
|
||||
|
||||
<!-- No Whitespace Before specific tokens -->
|
||||
<module name="NoWhitespaceBefore">
|
||||
<property name="tokens"
|
||||
value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
</module>
|
||||
|
||||
<!-- allowed wrapping for operators -->
|
||||
<module name="OperatorWrap">
|
||||
<property name="id" value="OperatorWrapNextLine"/>
|
||||
<property name="tokens" value="QUESTION, COLON"/>
|
||||
<property name="option" value="nl"/>
|
||||
</module>
|
||||
<module name="OperatorWrap">
|
||||
<property name="id" value="OperatorWrapSameLine"/>
|
||||
<property name="tokens" value="EQUAL, NOT_EQUAL, DIV, PLUS, MINUS, STAR, MOD, SR, BSR, GE, GT, SL, LE, LT, BXOR, BOR, LOR, BAND, LAND, TYPE_EXTENSION_AND, LITERAL_INSTANCEOF"/>
|
||||
<property name="option" value="eol"/>
|
||||
</module>
|
||||
|
||||
<!-- ensure we don't have legacy comments that confuse javadoc tooling -->
|
||||
<module name="Regexp">
|
||||
<property name="id" value="LegacyMethodSeparators"/>
|
||||
<property name="format" value="/\*\s*[=*-]*\s*\*/"/>
|
||||
<property name="illegalPattern" value="true"/>
|
||||
<property name="ignoreComments" value="false"/>
|
||||
<property name="message" value="Legacy Method Separators"/>
|
||||
</module>
|
||||
|
||||
<!-- right curly brace must be on new line -->
|
||||
<module name="RightCurly">
|
||||
<property name="option" value="alone_or_singleline"/>
|
||||
</module>
|
||||
|
||||
<!-- Various Wrapping of ".", ",", "...", "[]", and method ref New Lines -->
|
||||
<module name="SeparatorWrap">
|
||||
<property name="id" value="SeparatorWrapNextLine"/>
|
||||
<property name="tokens" value="DOT"/>
|
||||
<property name="option" value="nl"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="id" value="SeparatorWrapSameLine"/>
|
||||
<property name="tokens" value="COMMA, ELLIPSIS, ARRAY_DECLARATOR, METHOD_REF"/>
|
||||
<property name="option" value="eol"/>
|
||||
</module>
|
||||
|
||||
<!-- checks that a token is followed by whitespace -->
|
||||
<module name="WhitespaceAround">
|
||||
<property name="allowEmptyConstructors" value="true"/>
|
||||
<property name="allowEmptyLambdas" value="true"/>
|
||||
<property name="allowEmptyMethods" value="true"/>
|
||||
<property name="allowEmptyTypes" value="true"/>
|
||||
<property name="allowEmptyLoops" value="true"/>
|
||||
</module>
|
||||
|
||||
<!--
|
||||
Checks based on common Open Source specific recommendations.
|
||||
===========================================================================================
|
||||
-->
|
||||
|
||||
<!-- limit use of unicode escape sequences (eg "\u20ac") in mainline code. -->
|
||||
<module name="AvoidEscapedUnicodeCharacters">
|
||||
<!-- allow control characters to use unicode escape sequences -->
|
||||
<property name="allowEscapesForControlCharacters" value="true"/>
|
||||
<!-- allow unicode escape sequences if also followed by tail comments -->
|
||||
<property name="allowByTailComment" value="true"/>
|
||||
<!-- allow use of non-printable escape sequences -->
|
||||
<property name="allowNonPrintableEscapes" value="true"/>
|
||||
</module>
|
||||
|
||||
<!-- not allowing star import lines -->
|
||||
<module name="AvoidStarImport"/>
|
||||
|
||||
<!-- if you have an empty catch block, name the caught exception "ignored" -->
|
||||
<module name="EmptyCatchBlock">
|
||||
<property name="exceptionVariableName" value="ignored"/>
|
||||
</module>
|
||||
|
||||
<!-- if a switch statement contains java code, but lacks fall through comment its an error -->
|
||||
<module name="FallThrough"/>
|
||||
|
||||
<!-- reject unicode or octal values in mainline code -->
|
||||
<module name="IllegalTokenText">
|
||||
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
|
||||
<property name="format"
|
||||
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
|
||||
<property name="message"
|
||||
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
|
||||
</module>
|
||||
|
||||
<!-- all switch statements should have "default" label declared -->
|
||||
<!-- Disabled: Is super noisy
|
||||
<module name="MissingSwitchDefault"/>
|
||||
-->
|
||||
|
||||
<!-- prevent line wrapping of import / package statements -->
|
||||
<module name="NoLineWrap"/>
|
||||
|
||||
<!-- only 1 top level class defined per java file -->
|
||||
<module name="OneTopLevelClass"/>
|
||||
|
||||
<!-- Filename and Classname match -->
|
||||
<module name="OuterTypeFilename"/>
|
||||
|
||||
<!--
|
||||
Checks based on the Java Language Specification recommendations.
|
||||
https://docs.oracle.com/javase/specs/jls/se8/html/index.html
|
||||
===========================================================================================
|
||||
-->
|
||||
|
||||
<!-- array type style -->
|
||||
<!-- int[] foo; // OK
|
||||
int foo[]; // BAD -->
|
||||
<module name="ArrayTypeStyle" />
|
||||
|
||||
<!-- Whitespace around Generics (angle brackets) follow convention -->
|
||||
<module name="GenericWhitespace" />
|
||||
|
||||
<!-- Lambda Parameter Name Format -->
|
||||
<module name="LambdaParameterName" />
|
||||
|
||||
<!-- Local Parameter Name Format -->
|
||||
<module name="LocalVariableName" />
|
||||
|
||||
<!-- Method Name Format -->
|
||||
<module name="MethodName" />
|
||||
|
||||
<!-- Checks the padding between the identifier of a method definition, constructor definition,
|
||||
method call, or constructor invocation: nospace -->
|
||||
<module name="MethodParamPad"/>
|
||||
|
||||
<!-- ensure that modifiers follow suggested order -->
|
||||
<module name="ModifierOrder"/>
|
||||
|
||||
<!-- only 1 variable declaration per line -->
|
||||
<module name="MultipleVariableDeclarations"/>
|
||||
|
||||
<!-- No Object.finalize() use -->
|
||||
<module name="NoFinalizer"/>
|
||||
|
||||
<!-- checks that there is only one statement per line -->
|
||||
<module name="OneStatementPerLine"/>
|
||||
|
||||
<!-- package name JLS rules -->
|
||||
<module name="PackageName" />
|
||||
|
||||
<!-- Parameter Name Format -->
|
||||
<module name="ParameterName" />
|
||||
|
||||
<!-- the policy on the padding of parentheses: nospace -->
|
||||
<module name="ParenPad"/>
|
||||
|
||||
<!-- Type Name format -->
|
||||
<module name="TypeName" />
|
||||
|
||||
<!-- checks that long constants are defined with an upper ell. That is 'L' and not 'l' -->
|
||||
<module name="UpperEll"/>
|
||||
<!-- TODO: look for float / double version of above -->
|
||||
|
||||
</module>
|
||||
</module>
|
|
@ -1,5 +1,4 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>example-async-rest</artifactId>
|
||||
|
|
|
@ -42,18 +42,17 @@ import javax.servlet.http.HttpServletResponse;
|
|||
*/
|
||||
public class AbstractRestServlet extends HttpServlet
|
||||
{
|
||||
protected final static String __DEFAULT_APPID = "Webtide81-adf4-4f0a-ad58-d91e41bbe85";
|
||||
protected final static String STYLE =
|
||||
"<style type='text/css'>"+
|
||||
" img.thumb:hover {height:50px}"+
|
||||
" img.thumb {vertical-align:text-top}"+
|
||||
" span.red {color: #ff0000}"+
|
||||
" span.green {color: #00ff00}"+
|
||||
" iframe {border: 0px}"+
|
||||
protected static final String __DEFAULT_APPID = "Webtide81-adf4-4f0a-ad58-d91e41bbe85";
|
||||
protected static final String STYLE = "<style type='text/css'>" +
|
||||
" img.thumb:hover {height:50px}" +
|
||||
" img.thumb {vertical-align:text-top}" +
|
||||
" span.red {color: #ff0000}" +
|
||||
" span.green {color: #00ff00}" +
|
||||
" iframe {border: 0px}" +
|
||||
"</style>";
|
||||
|
||||
protected final static String ITEMS_PARAM = "items";
|
||||
protected final static String APPID_PARAM = "appid";
|
||||
protected static final String ITEMS_PARAM = "items";
|
||||
protected static final String APPID_PARAM = "appid";
|
||||
|
||||
protected String _appid;
|
||||
|
||||
|
@ -86,34 +85,34 @@ public class AbstractRestServlet extends HttpServlet
|
|||
}
|
||||
return String.valueOf(chars);
|
||||
}
|
||||
|
||||
protected String restURL(String item)
|
||||
|
||||
protected String restURL(String item)
|
||||
{
|
||||
try
|
||||
{
|
||||
return ("http://open.api.ebay.com/shopping?MaxEntries=3&appid=" + _appid +
|
||||
"&version=573&siteid=0&callname=FindItems&responseencoding=JSON&QueryKeywords=" +
|
||||
URLEncoder.encode(item,"UTF-8"));
|
||||
return ("http://open.api.ebay.com/shopping?MaxEntries=3&appid=" + _appid +
|
||||
"&version=573&siteid=0&callname=FindItems&responseencoding=JSON&QueryKeywords=" +
|
||||
URLEncoder.encode(item, "UTF-8"));
|
||||
}
|
||||
catch(Exception e)
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected String generateThumbs(Queue<Map<String,String>> results)
|
||||
|
||||
protected String generateThumbs(Queue<Map<String, String>> results)
|
||||
{
|
||||
StringBuilder thumbs = new StringBuilder();
|
||||
for (Map<String, String> m : results)
|
||||
{
|
||||
if (!m.containsKey("GalleryURL"))
|
||||
continue;
|
||||
|
||||
thumbs.append("<a href=\""+m.get("ViewItemURLForNaturalSearch")+"\">");
|
||||
thumbs.append("<img class='thumb' border='1px' height='25px'"+
|
||||
" src='"+m.get("GalleryURL")+"'"+
|
||||
" title='"+m.get("Title")+"'"+
|
||||
"/>");
|
||||
|
||||
thumbs.append("<a href=\"" + m.get("ViewItemURLForNaturalSearch") + "\">");
|
||||
thumbs.append("<img class='thumb' border='1px' height='25px'" +
|
||||
" src='" + m.get("GalleryURL") + "'" +
|
||||
" title='" + m.get("Title") + "'" +
|
||||
"/>");
|
||||
thumbs.append("</a> ");
|
||||
}
|
||||
return thumbs.toString();
|
||||
|
@ -122,21 +121,20 @@ public class AbstractRestServlet extends HttpServlet
|
|||
protected String ms(long nano)
|
||||
{
|
||||
BigDecimal dec = new BigDecimal(nano);
|
||||
return dec.divide(new BigDecimal(1000000L)).setScale(1,RoundingMode.UP).toString();
|
||||
return dec.divide(new BigDecimal(1000000L)).setScale(1, RoundingMode.UP).toString();
|
||||
}
|
||||
|
||||
|
||||
protected int width(long nano)
|
||||
{
|
||||
int w=(int)((nano+999999L)/5000000L);
|
||||
if (w==0)
|
||||
w=2;
|
||||
int w = (int)((nano + 999999L) / 5000000L);
|
||||
if (w == 0)
|
||||
w = 2;
|
||||
return w;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
doGet(request, response);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@ import java.util.Map;
|
|||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
|
@ -52,9 +51,9 @@ import org.eclipse.jetty.util.ajax.JSON;
|
|||
*/
|
||||
public class AsyncRestServlet extends AbstractRestServlet
|
||||
{
|
||||
final static String RESULTS_ATTR = "org.eclipse.jetty.demo.client";
|
||||
final static String DURATION_ATTR = "org.eclipse.jetty.demo.duration";
|
||||
final static String START_ATTR = "org.eclispe.jetty.demo.start";
|
||||
static final String RESULTS_ATTR = "org.eclipse.jetty.demo.client";
|
||||
static final String DURATION_ATTR = "org.eclipse.jetty.demo.duration";
|
||||
static final String START_ATTR = "org.eclispe.jetty.demo.start";
|
||||
|
||||
HttpClient _client;
|
||||
|
||||
|
@ -78,17 +77,17 @@ public class AsyncRestServlet extends AbstractRestServlet
|
|||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
Long start=System.nanoTime();
|
||||
Long start = System.nanoTime();
|
||||
|
||||
// Do we have results yet?
|
||||
Queue<Map<String, String>> results = (Queue<Map<String, String>>) request.getAttribute(RESULTS_ATTR);
|
||||
Queue<Map<String, String>> results = (Queue<Map<String, String>>)request.getAttribute(RESULTS_ATTR);
|
||||
|
||||
// If no results, this must be the first dispatch, so send the REST request(s)
|
||||
if (results==null)
|
||||
if (results == null)
|
||||
{
|
||||
// define results data structures
|
||||
final Queue<Map<String, String>> resultsQueue = new ConcurrentLinkedQueue<>();
|
||||
request.setAttribute(RESULTS_ATTR, results=resultsQueue);
|
||||
request.setAttribute(RESULTS_ATTR, results = resultsQueue);
|
||||
|
||||
// suspend the request
|
||||
// This is done before scheduling async handling to avoid race of
|
||||
|
@ -97,24 +96,25 @@ public class AsyncRestServlet extends AbstractRestServlet
|
|||
async.setTimeout(30000);
|
||||
|
||||
// extract keywords to search for
|
||||
String[] keywords=sanitize(request.getParameter(ITEMS_PARAM)).split(",");
|
||||
final AtomicInteger outstanding=new AtomicInteger(keywords.length);
|
||||
String[] keywords = sanitize(request.getParameter(ITEMS_PARAM)).split(",");
|
||||
final AtomicInteger outstanding = new AtomicInteger(keywords.length);
|
||||
|
||||
// Send request each keyword
|
||||
for (final String item:keywords)
|
||||
for (final String item : keywords)
|
||||
{
|
||||
_client.newRequest(restURL(item)).method(HttpMethod.GET).send(
|
||||
new AsyncRestRequest()
|
||||
{
|
||||
@Override
|
||||
void onAuctionFound(Map<String,String> auction)
|
||||
void onAuctionFound(Map<String, String> auction)
|
||||
{
|
||||
resultsQueue.add(auction);
|
||||
}
|
||||
|
||||
@Override
|
||||
void onComplete()
|
||||
{
|
||||
if (outstanding.decrementAndGet()<=0)
|
||||
if (outstanding.decrementAndGet() <= 0)
|
||||
async.dispatch();
|
||||
}
|
||||
});
|
||||
|
@ -138,23 +138,23 @@ public class AsyncRestServlet extends AbstractRestServlet
|
|||
out.println(STYLE);
|
||||
out.println("</head><body><small>");
|
||||
|
||||
long initial = (Long) request.getAttribute(DURATION_ATTR);
|
||||
long start0 = (Long) request.getAttribute(START_ATTR);
|
||||
long initial = (Long)request.getAttribute(DURATION_ATTR);
|
||||
long start0 = (Long)request.getAttribute(START_ATTR);
|
||||
|
||||
long now = System.nanoTime();
|
||||
long total=now-start0;
|
||||
long generate=now-start;
|
||||
long thread=initial+generate;
|
||||
long total = now - start0;
|
||||
long generate = now - start;
|
||||
long thread = initial + generate;
|
||||
|
||||
out.print("<b>Asynchronous: "+sanitize(request.getParameter(ITEMS_PARAM))+"</b><br/>");
|
||||
out.print("Total Time: "+ms(total)+"ms<br/>");
|
||||
out.print("<b>Asynchronous: " + sanitize(request.getParameter(ITEMS_PARAM)) + "</b><br/>");
|
||||
out.print("Total Time: " + ms(total) + "ms<br/>");
|
||||
|
||||
out.print("Thread held (<span class='red'>red</span>): "+ms(thread)+"ms (" + ms(initial) + " initial + " + ms(generate) + " generate )<br/>");
|
||||
out.print("Async wait (<span class='green'>green</span>): "+ms(total-thread)+"ms<br/>");
|
||||
out.print("Thread held (<span class='red'>red</span>): " + ms(thread) + "ms (" + ms(initial) + " initial + " + ms(generate) + " generate )<br/>");
|
||||
out.print("Async wait (<span class='green'>green</span>): " + ms(total - thread) + "ms<br/>");
|
||||
|
||||
out.println("<img border='0px' src='asyncrest/red.png' height='20px' width='"+width(initial)+"px'>"+
|
||||
"<img border='0px' src='asyncrest/green.png' height='20px' width='"+width(total-thread)+"px'>"+
|
||||
"<img border='0px' src='asyncrest/red.png' height='20px' width='"+width(generate)+"px'>");
|
||||
out.println("<img border='0px' src='asyncrest/red.png' height='20px' width='" + width(initial) + "px'>" +
|
||||
"<img border='0px' src='asyncrest/green.png' height='20px' width='" + width(total - thread) + "px'>" +
|
||||
"<img border='0px' src='asyncrest/red.png' height='20px' width='" + width(generate) + "px'>");
|
||||
|
||||
out.println("<hr />");
|
||||
out.println(thumbs);
|
||||
|
@ -162,7 +162,7 @@ public class AsyncRestServlet extends AbstractRestServlet
|
|||
out.println("</body></html>");
|
||||
out.close();
|
||||
}
|
||||
|
||||
|
||||
private abstract class AsyncRestRequest extends Response.Listener.Adapter
|
||||
{
|
||||
final Utf8StringBuilder _content = new Utf8StringBuilder();
|
||||
|
@ -175,27 +175,28 @@ public class AsyncRestServlet extends AbstractRestServlet
|
|||
public void onContent(Response response, ByteBuffer content)
|
||||
{
|
||||
byte[] bytes = BufferUtil.toArray(content);
|
||||
_content.append(bytes,0,bytes.length);
|
||||
_content.append(bytes, 0, bytes.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete(Result result)
|
||||
{
|
||||
// extract auctions from the results
|
||||
Map<String,?> query = (Map<String,?>) JSON.parse(_content.toString());
|
||||
Object[] auctions = (Object[]) query.get("Item");
|
||||
Map<String, ?> query = (Map<String, ?>)JSON.parse(_content.toString());
|
||||
Object[] auctions = (Object[])query.get("Item");
|
||||
if (auctions != null)
|
||||
{
|
||||
for (Object o : auctions)
|
||||
onAuctionFound((Map<String,String>)o);
|
||||
{
|
||||
onAuctionFound((Map<String, String>)o);
|
||||
}
|
||||
}
|
||||
onComplete();
|
||||
|
||||
}
|
||||
|
||||
abstract void onAuctionFound(Map<String,String> details);
|
||||
abstract void onComplete();
|
||||
abstract void onAuctionFound(Map<String, String> details);
|
||||
|
||||
abstract void onComplete();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,7 +27,6 @@ import java.net.URL;
|
|||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -39,37 +38,37 @@ import org.eclipse.jetty.util.ajax.JSON;
|
|||
* Servlet implementation class SerialRestServlet
|
||||
*/
|
||||
public class SerialRestServlet extends AbstractRestServlet
|
||||
{
|
||||
{
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
long start = System.nanoTime();
|
||||
|
||||
|
||||
String[] keywords=sanitize(request.getParameter(ITEMS_PARAM)).split(",");
|
||||
Queue<Map<String,String>> results = new LinkedList<Map<String,String>>();
|
||||
|
||||
String[] keywords = sanitize(request.getParameter(ITEMS_PARAM)).split(",");
|
||||
Queue<Map<String, String>> results = new LinkedList<Map<String, String>>();
|
||||
|
||||
// make all requests serially
|
||||
for (String itemName : keywords)
|
||||
{
|
||||
URL url = new URL(restURL(itemName));
|
||||
|
||||
|
||||
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
|
||||
connection.setRequestMethod("GET");
|
||||
|
||||
|
||||
Map query = (Map)JSON.parse(new BufferedReader(new InputStreamReader(connection.getInputStream())));
|
||||
Object[] auctions = (Object[]) query.get("Item");
|
||||
Object[] auctions = (Object[])query.get("Item");
|
||||
if (auctions != null)
|
||||
{
|
||||
for (Object o : auctions)
|
||||
results.add((Map) o);
|
||||
{
|
||||
results.add((Map)o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Generate the response
|
||||
String thumbs=generateThumbs(results);
|
||||
|
||||
String thumbs = generateThumbs(results);
|
||||
|
||||
response.setContentType("text/html");
|
||||
PrintWriter out = response.getWriter();
|
||||
out.println("<html><head>");
|
||||
|
@ -77,32 +76,28 @@ public class SerialRestServlet extends AbstractRestServlet
|
|||
out.println("</head><body><small>");
|
||||
|
||||
long now = System.nanoTime();
|
||||
long total=now-start;
|
||||
long total = now - start;
|
||||
|
||||
out.print("<b>Blocking: " + sanitize(request.getParameter(ITEMS_PARAM)) + "</b><br/>");
|
||||
out.print("Total Time: " + ms(total) + "ms<br/>");
|
||||
out.print("Thread held (<span class='red'>red</span>): " + ms(total) + "ms<br/>");
|
||||
|
||||
out.println("<img border='0px' src='asyncrest/red.png' height='20px' width='" + width(total) + "px'>");
|
||||
|
||||
out.print("<b>Blocking: "+sanitize(request.getParameter(ITEMS_PARAM))+"</b><br/>");
|
||||
out.print("Total Time: "+ms(total)+"ms<br/>");
|
||||
out.print("Thread held (<span class='red'>red</span>): "+ms(total)+"ms<br/>");
|
||||
|
||||
out.println("<img border='0px' src='asyncrest/red.png' height='20px' width='"+width(total)+"px'>");
|
||||
|
||||
out.println("<hr />");
|
||||
out.println(thumbs);
|
||||
out.println("</small>");
|
||||
out.println("</body></html>");
|
||||
out.close();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
* response)
|
||||
*/
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
doGet(request, response);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>example-async-rest</artifactId>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
|
||||
<!--
|
||||
This is the jetty specific web application configuration file. When starting
|
||||
|
|
|
@ -26,17 +26,17 @@ public class DemoServer
|
|||
public static void main(String[] args)
|
||||
throws Exception
|
||||
{
|
||||
String jetty_home = System.getProperty("jetty.home",".");
|
||||
String jetty_home = System.getProperty("jetty.home", ".");
|
||||
|
||||
Server server = new Server(Integer.getInteger("jetty.http.port", 8080).intValue());
|
||||
|
||||
Server server = new Server(Integer.getInteger("jetty.http.port",8080).intValue());
|
||||
|
||||
WebAppContext webapp = new WebAppContext();
|
||||
webapp.setContextPath("/");
|
||||
webapp.setWar(jetty_home+"/target/async-rest/");
|
||||
webapp.setWar(jetty_home + "/target/async-rest/");
|
||||
webapp.setParentLoaderPriority(true);
|
||||
webapp.setServerClasses(new String[]{});
|
||||
server.setHandler(webapp);
|
||||
|
||||
|
||||
server.start();
|
||||
server.join();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty.examples</groupId>
|
||||
<artifactId>examples-parent</artifactId>
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.embedded;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletException;
|
||||
|
@ -31,7 +30,6 @@ import javax.servlet.http.HttpServlet;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
||||
public class AsyncEchoServlet extends HttpServlet
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -60,7 +58,7 @@ public class AsyncEchoServlet extends HttpServlet
|
|||
this.input = asyncContext.getRequest().getInputStream();
|
||||
this.output = asyncContext.getResponse().getOutputStream();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDataAvailable() throws IOException
|
||||
{
|
||||
|
@ -78,7 +76,7 @@ public class AsyncEchoServlet extends HttpServlet
|
|||
{
|
||||
handleAsyncIO();
|
||||
}
|
||||
|
||||
|
||||
private void handleAsyncIO() throws IOException
|
||||
{
|
||||
// This method is called:
|
||||
|
@ -86,7 +84,7 @@ public class AsyncEchoServlet extends HttpServlet
|
|||
// 2) after first registering a ReadListener iff write is ready
|
||||
// 3) when a previous write completes after an output.isReady() returns false
|
||||
// 4) from an input callback
|
||||
|
||||
|
||||
// We should try to read, only if we are able to write!
|
||||
while (true)
|
||||
{
|
||||
|
@ -98,15 +96,15 @@ public class AsyncEchoServlet extends HttpServlet
|
|||
if (!input.isReady())
|
||||
// Nothing available to read, so wait for another call to onDataAvailable
|
||||
break;
|
||||
|
||||
|
||||
int read = input.read(buffer);
|
||||
if (read<0)
|
||||
if (read < 0)
|
||||
{
|
||||
if (complete.compareAndSet(false,true))
|
||||
if (complete.compareAndSet(false, true))
|
||||
asyncContext.complete();
|
||||
break;
|
||||
}
|
||||
else if (read>0)
|
||||
else if (read > 0)
|
||||
{
|
||||
output.write(buffer, 0, read);
|
||||
}
|
||||
|
@ -116,7 +114,7 @@ public class AsyncEchoServlet extends HttpServlet
|
|||
@Override
|
||||
public void onError(Throwable failure)
|
||||
{
|
||||
new Throwable("onError",failure).printStackTrace();
|
||||
new Throwable("onError", failure).printStackTrace();
|
||||
asyncContext.complete();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,6 @@ package org.eclipse.jetty.embedded;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -30,9 +28,8 @@ import javax.servlet.http.HttpServletResponse;
|
|||
public class DumpServlet extends HttpServlet
|
||||
{
|
||||
@Override
|
||||
protected void doGet( HttpServletRequest request,
|
||||
HttpServletResponse response ) throws ServletException,
|
||||
IOException
|
||||
protected void doGet(HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException
|
||||
{
|
||||
response.setContentType("text/html");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
|
@ -51,8 +48,7 @@ public class DumpServlet extends HttpServlet
|
|||
String r = request.getParameter("resource");
|
||||
if (r != null)
|
||||
{
|
||||
out.println("resource(" + r + ")="
|
||||
+ getServletContext().getResource(r));
|
||||
out.println("resource(" + r + ")=" + getServletContext().getResource(r));
|
||||
}
|
||||
|
||||
out.println("</pre>");
|
||||
|
|
|
@ -28,13 +28,13 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
|
|||
|
||||
public class ExampleServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server();
|
||||
|
||||
ServerConnector connector = new ServerConnector(server);
|
||||
connector.setPort(8080);
|
||||
server.setConnectors(new Connector[] { connector });
|
||||
server.setConnectors(new Connector[]{connector});
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler();
|
||||
context.setContextPath("/");
|
||||
|
@ -42,7 +42,7 @@ public class ExampleServer
|
|||
context.addServlet(AsyncEchoServlet.class, "/echo/*");
|
||||
|
||||
HandlerCollection handlers = new HandlerCollection();
|
||||
handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
|
||||
handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
|
||||
server.setHandler(handlers);
|
||||
|
||||
server.start();
|
||||
|
|
|
@ -29,7 +29,7 @@ import org.eclipse.jetty.xml.XmlConfiguration;
|
|||
*/
|
||||
public class ExampleServerXml
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Find Jetty XML (in classpath) that configures and starts Server.
|
||||
Resource serverXml = Resource.newSystemResource("exampleserver.xml");
|
||||
|
|
|
@ -58,14 +58,15 @@ import org.eclipse.jetty.util.resource.Resource;
|
|||
*/
|
||||
public class FastFileServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
HandlerList handlers = new HandlerList();
|
||||
handlers.setHandlers(new Handler[] {
|
||||
new FastFileHandler(new File(System.getProperty("user.dir"))),
|
||||
new DefaultHandler() });
|
||||
handlers.setHandlers(new Handler[]{
|
||||
new FastFileHandler(new File(System.getProperty("user.dir"))),
|
||||
new DefaultHandler()
|
||||
});
|
||||
server.setHandler(handlers);
|
||||
|
||||
server.start();
|
||||
|
@ -77,17 +78,17 @@ public class FastFileServer
|
|||
private final MimeTypes mimeTypes = new MimeTypes();
|
||||
private final File dir;
|
||||
|
||||
private FastFileHandler( File dir )
|
||||
private FastFileHandler(File dir)
|
||||
{
|
||||
this.dir = dir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle( String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response ) throws IOException,
|
||||
ServletException
|
||||
public void handle(String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException,
|
||||
ServletException
|
||||
{
|
||||
// define small medium and large.
|
||||
// This should be turned for your content, JVM and OS, but we will
|
||||
|
@ -110,20 +111,20 @@ public class FastFileServer
|
|||
{
|
||||
if (!request.getPathInfo().endsWith(URIUtil.SLASH))
|
||||
{
|
||||
response.sendRedirect(response.encodeRedirectURL(request.getRequestURI()+URIUtil.SLASH));
|
||||
response.sendRedirect(response.encodeRedirectURL(request.getRequestURI() + URIUtil.SLASH));
|
||||
return;
|
||||
}
|
||||
String listing = Resource.newResource(file).getListHTML(
|
||||
request.getRequestURI(),
|
||||
request.getPathInfo().lastIndexOf("/") > 0,
|
||||
request.getQueryString());
|
||||
request.getRequestURI(),
|
||||
request.getPathInfo().lastIndexOf("/") > 0,
|
||||
request.getQueryString());
|
||||
response.setContentType("text/html; charset=utf-8");
|
||||
response.getWriter().println(listing);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set some content headers.
|
||||
|
||||
|
||||
// Jetty DefaultServlet will cache formatted date strings, but we
|
||||
// will reformat for each request here
|
||||
response.setDateHeader("Last-Modified", file.lastModified());
|
||||
|
@ -134,9 +135,9 @@ public class FastFileServer
|
|||
if (file.length() < SMALL)
|
||||
{
|
||||
// need to caste to Jetty output stream for best API
|
||||
((HttpOutput) response.getOutputStream())
|
||||
.sendContent(FileChannel.open(file.toPath(),
|
||||
StandardOpenOption.READ));
|
||||
((HttpOutput)response.getOutputStream())
|
||||
.sendContent(FileChannel.open(file.toPath(),
|
||||
StandardOpenOption.READ));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -153,7 +154,7 @@ public class FastFileServer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void failed( Throwable x )
|
||||
public void failed(Throwable x)
|
||||
{
|
||||
// log error and complete async response;
|
||||
x.printStackTrace();
|
||||
|
@ -165,9 +166,9 @@ public class FastFileServer
|
|||
if (file.length() < MEDIUM)
|
||||
{
|
||||
// the file channel is closed by the async send
|
||||
((HttpOutput) response.getOutputStream())
|
||||
.sendContent(FileChannel.open(file.toPath(),
|
||||
StandardOpenOption.READ), completionCB);
|
||||
((HttpOutput)response.getOutputStream())
|
||||
.sendContent(FileChannel.open(file.toPath(),
|
||||
StandardOpenOption.READ), completionCB);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -176,10 +177,10 @@ public class FastFileServer
|
|||
// can be hard to GC on some JVMs. But for this example we will
|
||||
// create a new buffer per file
|
||||
ByteBuffer buffer;
|
||||
try ( RandomAccessFile raf = new RandomAccessFile(file, "r"); )
|
||||
try (RandomAccessFile raf = new RandomAccessFile(file, "r"))
|
||||
{
|
||||
buffer = raf.getChannel().map(MapMode.READ_ONLY, 0,
|
||||
raf.length());
|
||||
raf.length());
|
||||
}
|
||||
|
||||
// Assuming the file buffer might be shared cached version, so lets
|
||||
|
@ -188,8 +189,8 @@ public class FastFileServer
|
|||
|
||||
// send the content as a buffer with a callback to complete the
|
||||
// async request need to caste to Jetty output stream for best API
|
||||
((HttpOutput) response.getOutputStream()).sendContent(buffer,
|
||||
completionCB);
|
||||
((HttpOutput)response.getOutputStream()).sendContent(buffer,
|
||||
completionCB);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.eclipse.jetty.server.handler.DefaultHandler;
|
|||
import org.eclipse.jetty.server.handler.HandlerList;
|
||||
import org.eclipse.jetty.server.handler.ResourceHandler;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Simple Jetty FileServer.
|
||||
* This is a simple example of Jetty configured as a FileServer.
|
||||
*/
|
||||
|
@ -39,17 +39,17 @@ public class FileServer
|
|||
|
||||
// Create the ResourceHandler. It is the object that will actually handle the request for a given file. It is
|
||||
// a Jetty Handler object so it is suitable for chaining with other handlers as you will see in other examples.
|
||||
ResourceHandler resource_handler = new ResourceHandler();
|
||||
|
||||
ResourceHandler resourceHandler = new ResourceHandler();
|
||||
|
||||
// Configure the ResourceHandler. Setting the resource base indicates where the files should be served out of.
|
||||
// In this example it is the current directory but it can be configured to anything that the jvm has access to.
|
||||
resource_handler.setDirectoriesListed(true);
|
||||
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
|
||||
resource_handler.setResourceBase(".");
|
||||
resourceHandler.setDirectoriesListed(true);
|
||||
resourceHandler.setWelcomeFiles(new String[]{"index.html"});
|
||||
resourceHandler.setResourceBase(".");
|
||||
|
||||
// Add the ResourceHandler to the server.
|
||||
HandlerList handlers = new HandlerList();
|
||||
handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
|
||||
handlers.setHandlers(new Handler[]{resourceHandler, new DefaultHandler()});
|
||||
server.setHandler(handlers);
|
||||
|
||||
// Start things up! By using the server.join() the server thread will join with the current thread.
|
||||
|
|
|
@ -34,11 +34,11 @@ import org.eclipse.jetty.xml.XmlConfiguration;
|
|||
*/
|
||||
public class FileServerXml
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Resource fileServerXml = Resource.newSystemResource("fileserver.xml");
|
||||
XmlConfiguration configuration = new XmlConfiguration(fileServerXml);
|
||||
Server server = (Server) configuration.configure();
|
||||
Server server = (Server)configuration.configure();
|
||||
server.start();
|
||||
server.join();
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.embedded;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -38,23 +37,23 @@ public class HelloHandler extends AbstractHandler
|
|||
this("Hello World");
|
||||
}
|
||||
|
||||
public HelloHandler( String greeting )
|
||||
public HelloHandler(String greeting)
|
||||
{
|
||||
this(greeting, null);
|
||||
}
|
||||
|
||||
public HelloHandler( String greeting, String body )
|
||||
public HelloHandler(String greeting, String body)
|
||||
{
|
||||
this.greeting = greeting;
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle( String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response ) throws IOException,
|
||||
ServletException
|
||||
public void handle(String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException,
|
||||
ServletException
|
||||
{
|
||||
response.setContentType("text/html; charset=utf-8");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -35,19 +34,19 @@ public class HelloServlet extends HttpServlet
|
|||
this("Hello");
|
||||
}
|
||||
|
||||
public HelloServlet( String greeting )
|
||||
public HelloServlet(String greeting)
|
||||
{
|
||||
this.greeting = greeting;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doGet( HttpServletRequest request,
|
||||
HttpServletResponse response ) throws ServletException,
|
||||
IOException
|
||||
protected void doGet(HttpServletRequest request,
|
||||
HttpServletResponse response) throws ServletException,
|
||||
IOException
|
||||
{
|
||||
response.setContentType("text/html");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
response.getWriter().println(
|
||||
"<h1>" + greeting + " from HelloServlet</h1>");
|
||||
"<h1>" + greeting + " from HelloServlet</h1>");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.embedded;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -30,21 +29,23 @@ import javax.servlet.http.HttpSession;
|
|||
@SuppressWarnings("serial")
|
||||
public class HelloSessionServlet extends HttpServlet
|
||||
{
|
||||
public HelloSessionServlet() {}
|
||||
public HelloSessionServlet()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doGet( HttpServletRequest request,
|
||||
HttpServletResponse response ) throws ServletException,
|
||||
IOException
|
||||
protected void doGet(HttpServletRequest request,
|
||||
HttpServletResponse response) throws ServletException,
|
||||
IOException
|
||||
{
|
||||
response.setContentType("text/html");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
response.addHeader("Cache-Control","no-cache");
|
||||
|
||||
response.addHeader("Cache-Control", "no-cache");
|
||||
|
||||
HttpSession session = request.getSession();
|
||||
String message;
|
||||
String link;
|
||||
|
||||
|
||||
String greeting = request.getParameter("greeting");
|
||||
if (greeting != null)
|
||||
{
|
||||
|
@ -56,7 +57,7 @@ public class HelloSessionServlet extends HttpServlet
|
|||
{
|
||||
greeting = (String)session.getAttribute("greeting");
|
||||
|
||||
if (greeting != null)
|
||||
if (greeting != null)
|
||||
{
|
||||
message = "Greeting '" + greeting + "' set from session.";
|
||||
}
|
||||
|
@ -68,17 +69,15 @@ public class HelloSessionServlet extends HttpServlet
|
|||
|
||||
link = "Click <a href=\"/?greeting=Hola\">here</a> to set a new greeting.";
|
||||
}
|
||||
|
||||
|
||||
PrintWriter out = response.getWriter();
|
||||
out.println("<h1>" + greeting + " from HelloSessionServlet</h1>");
|
||||
out.println("<p>" + message + "</p>");
|
||||
out.println("<pre>");
|
||||
out.println("session.getId() = " +session.getId());
|
||||
out.println("session.isNew() = " +session.isNew());
|
||||
out.println("session.getId() = " + session.getId());
|
||||
out.println("session.isNew() = " + session.isNew());
|
||||
out.println("</pre>");
|
||||
out.println("<p>" + link + "</p>");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -31,11 +30,11 @@ import org.eclipse.jetty.server.handler.AbstractHandler;
|
|||
public class HelloWorld extends AbstractHandler
|
||||
{
|
||||
@Override
|
||||
public void handle( String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response ) throws IOException,
|
||||
ServletException
|
||||
public void handle(String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException,
|
||||
ServletException
|
||||
{
|
||||
// Declare response encoding and types
|
||||
response.setContentType("text/html; charset=utf-8");
|
||||
|
@ -50,7 +49,7 @@ public class HelloWorld extends AbstractHandler
|
|||
baseRequest.setHandled(true);
|
||||
}
|
||||
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
server.setHandler(new HelloWorld());
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
|
||||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -57,75 +56,74 @@ import org.eclipse.jetty.servlet.ServletHolder;
|
|||
import org.eclipse.jetty.servlets.PushCacheFilter;
|
||||
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class Http2Server
|
||||
{
|
||||
public static void main(String... args) throws Exception
|
||||
{
|
||||
{
|
||||
Server server = new Server();
|
||||
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
server.addBean(mbContainer);
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(server, "/",ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
|
||||
String docroot = "src/main/resources/docroot";
|
||||
if (!new File(docroot).exists())
|
||||
docroot = "examples/embedded/src/main/resources/docroot";
|
||||
context.setResourceBase(docroot);
|
||||
context.addFilter(PushCacheFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addFilter(PushCacheFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
// context.addFilter(PushSessionCacheFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addFilter(PushedTilesFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addFilter(PushedTilesFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addServlet(new ServletHolder(servlet), "/test/*");
|
||||
context.addServlet(DefaultServlet.class, "/").setInitParameter("maxCacheSize","81920");
|
||||
context.addServlet(DefaultServlet.class, "/").setInitParameter("maxCacheSize", "81920");
|
||||
server.setHandler(context);
|
||||
|
||||
// HTTP Configuration
|
||||
HttpConfiguration http_config = new HttpConfiguration();
|
||||
http_config.setSecureScheme("https");
|
||||
http_config.setSecurePort(8443);
|
||||
http_config.setSendXPoweredBy(true);
|
||||
http_config.setSendServerVersion(true);
|
||||
HttpConfiguration httpConfig = new HttpConfiguration();
|
||||
httpConfig.setSecureScheme("https");
|
||||
httpConfig.setSecurePort(8443);
|
||||
httpConfig.setSendXPoweredBy(true);
|
||||
httpConfig.setSendServerVersion(true);
|
||||
|
||||
// HTTP Connector
|
||||
ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config), new HTTP2CServerConnectionFactory(http_config));
|
||||
ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(httpConfig), new HTTP2CServerConnectionFactory(httpConfig));
|
||||
http.setPort(8080);
|
||||
server.addConnector(http);
|
||||
|
||||
// SSL Context Factory for HTTPS and HTTP/2
|
||||
String jetty_distro = System.getProperty("jetty.distro","../../jetty-distribution/target/distribution");
|
||||
if (!new File(jetty_distro).exists())
|
||||
jetty_distro = "jetty-distribution/target/distribution";
|
||||
String jettyDistro = System.getProperty("jetty.distro", "../../jetty-distribution/target/distribution");
|
||||
if (!new File(jettyDistro).exists())
|
||||
jettyDistro = "jetty-distribution/target/distribution";
|
||||
SslContextFactory sslContextFactory = new SslContextFactory.Server();
|
||||
sslContextFactory.setKeyStorePath(jetty_distro + "/demo-base/etc/keystore");
|
||||
sslContextFactory.setKeyStorePath(jettyDistro + "/demo-base/etc/keystore");
|
||||
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
|
||||
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
|
||||
sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);
|
||||
// sslContextFactory.setProvider("Conscrypt");
|
||||
|
||||
// HTTPS Configuration
|
||||
HttpConfiguration https_config = new HttpConfiguration(http_config);
|
||||
https_config.addCustomizer(new SecureRequestCustomizer());
|
||||
HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
|
||||
httpsConfig.addCustomizer(new SecureRequestCustomizer());
|
||||
|
||||
// HTTP/2 Connection Factory
|
||||
HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(https_config);
|
||||
HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpsConfig);
|
||||
|
||||
ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
|
||||
alpn.setDefaultProtocol(http.getDefaultProtocol());
|
||||
|
||||
// SSL Connection Factory
|
||||
SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory,alpn.getProtocol());
|
||||
SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());
|
||||
|
||||
// HTTP/2 Connector
|
||||
ServerConnector http2Connector =
|
||||
new ServerConnector(server,ssl,alpn,h2,new HttpConnectionFactory(https_config));
|
||||
new ServerConnector(server, ssl, alpn, h2, new HttpConnectionFactory(httpsConfig));
|
||||
http2Connector.setPort(8443);
|
||||
server.addConnector(http2Connector);
|
||||
|
||||
ALPN.debug=false;
|
||||
ALPN.debug = false;
|
||||
|
||||
server.start();
|
||||
server.join();
|
||||
|
@ -143,14 +141,14 @@ public class Http2Server
|
|||
{
|
||||
Request baseRequest = Request.getBaseRequest(request);
|
||||
|
||||
if (baseRequest.isPush() && baseRequest.getRequestURI().contains("tiles") )
|
||||
if (baseRequest.isPush() && baseRequest.getRequestURI().contains("tiles"))
|
||||
{
|
||||
String uri = baseRequest.getRequestURI().replace("tiles","pushed").substring(baseRequest.getContextPath().length());
|
||||
request.getRequestDispatcher(uri).forward(request,response);
|
||||
String uri = baseRequest.getRequestURI().replace("tiles", "pushed").substring(baseRequest.getContextPath().length());
|
||||
request.getRequestDispatcher(uri).forward(request, response);
|
||||
return;
|
||||
}
|
||||
|
||||
chain.doFilter(request,response);
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -166,25 +164,27 @@ public class Http2Server
|
|||
@Override
|
||||
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
String code=request.getParameter("code");
|
||||
if (code!=null)
|
||||
String code = request.getParameter("code");
|
||||
if (code != null)
|
||||
response.setStatus(Integer.parseInt(code));
|
||||
|
||||
HttpSession session = request.getSession(true);
|
||||
if (session.isNew())
|
||||
response.addCookie(new Cookie("bigcookie",
|
||||
"This is a test cookies that was created on "+new Date()+" and is used by the jetty http/2 test servlet."));
|
||||
response.setHeader("Custom","Value");
|
||||
"This is a test cookies that was created on " + new Date() + " and is used by the jetty http/2 test servlet."));
|
||||
response.setHeader("Custom", "Value");
|
||||
response.setContentType("text/plain");
|
||||
String content = "Hello from Jetty using "+request.getProtocol() +"\n";
|
||||
content+="uri="+request.getRequestURI()+"\n";
|
||||
content+="session="+session.getId()+(session.isNew()?"(New)\n":"\n");
|
||||
content+="date="+new Date()+"\n";
|
||||
String content = "Hello from Jetty using " + request.getProtocol() + "\n";
|
||||
content += "uri=" + request.getRequestURI() + "\n";
|
||||
content += "session=" + session.getId() + (session.isNew() ? "(New)\n" : "\n");
|
||||
content += "date=" + new Date() + "\n";
|
||||
|
||||
Cookie[] cookies = request.getCookies();
|
||||
if (cookies!=null && cookies.length>0)
|
||||
if (cookies != null && cookies.length > 0)
|
||||
for (Cookie c : cookies)
|
||||
content+="cookie "+c.getName()+"="+c.getValue()+"\n";
|
||||
{
|
||||
content += "cookie " + c.getName() + "=" + c.getValue() + "\n";
|
||||
}
|
||||
|
||||
response.setContentLength(content.length());
|
||||
response.getOutputStream().print(content);
|
||||
|
|
|
@ -27,7 +27,8 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
|
|||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.util.resource.Resource;
|
||||
|
||||
/**
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class JarServer
|
||||
{
|
||||
|
@ -40,9 +41,9 @@ public class JarServer
|
|||
Resource base = Resource.newResource("jar:file:src/main/resources/content.jar!/");
|
||||
context.setBaseResource(base);
|
||||
context.addServlet(new ServletHolder(new DefaultServlet()), "/");
|
||||
|
||||
|
||||
HandlerList handlers = new HandlerList();
|
||||
handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
|
||||
handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
|
||||
server.setHandler(handlers);
|
||||
|
||||
server.start();
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.eclipse.jetty.util.StringUtil;
|
||||
import org.eclipse.jetty.util.log.Log;
|
||||
import org.eclipse.jetty.util.log.Logger;
|
||||
|
||||
/**
|
||||
* A utility test class to locate a Jetty Distribution for testing purposes by searching:
|
||||
* <ul>
|
||||
* <li>The <code>jetty.home</code> system property</li>
|
||||
* <li>The <code>JETTY_HOME</code> environment variable</li>
|
||||
* <li>The working directory hierarchy with subdirectory <code>jetty-distribution/target/home</code></li>
|
||||
* </ul>
|
||||
*/
|
||||
public class JettyDistribution
|
||||
{
|
||||
private static final Logger LOG = Log.getLogger(JettyDistribution.class);
|
||||
public static final Path DISTRIBUTION;
|
||||
|
||||
static
|
||||
{
|
||||
Path distro = asJettyDistribution(System.getProperty("jetty.home"));
|
||||
if (distro == null)
|
||||
distro = asJettyDistribution(System.getenv().get("JETTY_HOME"));
|
||||
|
||||
if (distro == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Path working = new File(".").getAbsoluteFile().getCanonicalFile().toPath();
|
||||
while (distro == null && working != null)
|
||||
{
|
||||
distro = asJettyDistribution(working.resolve("jetty-distribution/target/distribution").toString());
|
||||
working = working.getParent();
|
||||
}
|
||||
}
|
||||
catch (Throwable cause)
|
||||
{
|
||||
LOG.warn(cause);
|
||||
}
|
||||
}
|
||||
DISTRIBUTION = distro;
|
||||
}
|
||||
|
||||
private static Path asJettyDistribution(String test)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (StringUtil.isBlank(test))
|
||||
{
|
||||
LOG.info("asJettyDistribution {} is blank", test);
|
||||
return null;
|
||||
}
|
||||
|
||||
File dir = new File(test);
|
||||
if (!dir.exists() || !dir.isDirectory())
|
||||
{
|
||||
LOG.info("asJettyDistribution {} is not a directory", test);
|
||||
return null;
|
||||
}
|
||||
|
||||
File demoBase = new File(dir, "demo-base");
|
||||
if (!demoBase.exists() || !demoBase.isDirectory())
|
||||
{
|
||||
LOG.info("asJettyDistribution {} has no demo-base", test);
|
||||
return null;
|
||||
}
|
||||
|
||||
LOG.info("asJettyDistribution {}", dir);
|
||||
return dir.getAbsoluteFile().getCanonicalFile().toPath();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOG.ignore(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Path resolve(String path)
|
||||
{
|
||||
return DISTRIBUTION.resolve(path);
|
||||
}
|
||||
|
||||
public static void main(String... arg)
|
||||
{
|
||||
System.err.println("Jetty Distribution is " + DISTRIBUTION);
|
||||
}
|
||||
}
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
import org.eclipse.jetty.deploy.DeploymentManager;
|
||||
|
@ -28,7 +27,9 @@ import org.eclipse.jetty.deploy.bindings.DebugListenerBinding;
|
|||
import org.eclipse.jetty.deploy.providers.WebAppProvider;
|
||||
import org.eclipse.jetty.http.HttpVersion;
|
||||
import org.eclipse.jetty.jmx.MBeanContainer;
|
||||
import org.eclipse.jetty.rewrite.handler.MsieSslRule;
|
||||
import org.eclipse.jetty.rewrite.handler.RewriteHandler;
|
||||
import org.eclipse.jetty.rewrite.handler.ValidUrlRule;
|
||||
import org.eclipse.jetty.security.HashLoginService;
|
||||
import org.eclipse.jetty.server.AsyncRequestLogWriter;
|
||||
import org.eclipse.jetty.server.CustomRequestLog;
|
||||
|
@ -57,37 +58,23 @@ import org.eclipse.jetty.webapp.Configuration;
|
|||
*/
|
||||
public class LikeJettyXml
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Path to as-built jetty-distribution directory
|
||||
String jettyHomeBuild = "jetty-distribution/target/distribution";
|
||||
|
||||
String jettyHomeBuild = JettyDistribution.DISTRIBUTION.toString();
|
||||
|
||||
// Find jetty home and base directories
|
||||
String homePath = System.getProperty("jetty.home", jettyHomeBuild);
|
||||
File start_jar = new File(homePath,"start.jar");
|
||||
if (!start_jar.exists())
|
||||
{
|
||||
homePath = jettyHomeBuild = "jetty-distribution/target/distribution";
|
||||
start_jar = new File(homePath,"start.jar");
|
||||
if (!start_jar.exists())
|
||||
throw new FileNotFoundException(start_jar.toString());
|
||||
}
|
||||
|
||||
File homeDir = new File(homePath);
|
||||
|
||||
String basePath = System.getProperty("jetty.base", homeDir + "/demo-base");
|
||||
File baseDir = new File(basePath);
|
||||
if(!baseDir.exists())
|
||||
{
|
||||
throw new FileNotFoundException(baseDir.getAbsolutePath());
|
||||
}
|
||||
|
||||
// Configure jetty.home and jetty.base system properties
|
||||
String jetty_home = homeDir.getAbsolutePath();
|
||||
String jetty_base = baseDir.getAbsolutePath();
|
||||
System.setProperty("jetty.home", jetty_home);
|
||||
System.setProperty("jetty.base", jetty_base);
|
||||
|
||||
// Configure jetty.home and jetty.base system properties
|
||||
String jettyHome = homeDir.getAbsolutePath();
|
||||
String jettyBase = baseDir.getAbsolutePath();
|
||||
System.setProperty("jetty.home", jettyHome);
|
||||
System.setProperty("jetty.base", jettyBase);
|
||||
|
||||
// === jetty.xml ===
|
||||
// Setup Threadpool
|
||||
|
@ -98,101 +85,98 @@ public class LikeJettyXml
|
|||
Server server = new Server(threadPool);
|
||||
|
||||
// Scheduler
|
||||
server.addBean(new ScheduledExecutorScheduler(null,false));
|
||||
server.addBean(new ScheduledExecutorScheduler(null, false));
|
||||
|
||||
// HTTP Configuration
|
||||
HttpConfiguration http_config = new HttpConfiguration();
|
||||
http_config.setSecureScheme("https");
|
||||
http_config.setSecurePort(8443);
|
||||
http_config.setOutputBufferSize(32768);
|
||||
http_config.setRequestHeaderSize(8192);
|
||||
http_config.setResponseHeaderSize(8192);
|
||||
http_config.setSendServerVersion(true);
|
||||
http_config.setSendDateHeader(false);
|
||||
HttpConfiguration httpConfig = new HttpConfiguration();
|
||||
httpConfig.setSecureScheme("https");
|
||||
httpConfig.setSecurePort(8443);
|
||||
httpConfig.setOutputBufferSize(32768);
|
||||
httpConfig.setRequestHeaderSize(8192);
|
||||
httpConfig.setResponseHeaderSize(8192);
|
||||
httpConfig.setSendServerVersion(true);
|
||||
httpConfig.setSendDateHeader(false);
|
||||
// httpConfig.addCustomizer(new ForwardedRequestCustomizer());
|
||||
|
||||
// Handler Structure
|
||||
HandlerCollection handlers = new HandlerCollection();
|
||||
ContextHandlerCollection contexts = new ContextHandlerCollection();
|
||||
handlers.setHandlers(new Handler[] { contexts, new DefaultHandler() });
|
||||
handlers.setHandlers(new Handler[]{contexts, new DefaultHandler()});
|
||||
server.setHandler(handlers);
|
||||
|
||||
// Extra options
|
||||
server.setDumpAfterStart(false);
|
||||
server.setDumpAfterStart(true);
|
||||
server.setDumpBeforeStop(false);
|
||||
server.setStopAtShutdown(true);
|
||||
|
||||
// === jetty-jmx.xml ===
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
server.addBean(mbContainer);
|
||||
|
||||
|
||||
// === jetty-http.xml ===
|
||||
ServerConnector http = new ServerConnector(server,
|
||||
new HttpConnectionFactory(http_config));
|
||||
new HttpConnectionFactory(httpConfig));
|
||||
http.setPort(8080);
|
||||
http.setIdleTimeout(30000);
|
||||
server.addConnector(http);
|
||||
|
||||
|
||||
// === jetty-https.xml ===
|
||||
// SSL Context Factory
|
||||
SslContextFactory sslContextFactory = new SslContextFactory.Server();
|
||||
sslContextFactory.setKeyStorePath(jetty_home + "/../../../jetty-server/src/test/config/etc/keystore");
|
||||
sslContextFactory.setKeyStorePath(jettyHome + "/../../../jetty-server/src/test/config/etc/keystore");
|
||||
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
|
||||
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
|
||||
sslContextFactory.setTrustStorePath(jetty_home + "/../../../jetty-server/src/test/config/etc/keystore");
|
||||
sslContextFactory.setTrustStorePath(jettyHome + "/../../../jetty-server/src/test/config/etc/keystore");
|
||||
sslContextFactory.setTrustStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
|
||||
sslContextFactory.setExcludeCipherSuites("SSL_RSA_WITH_DES_CBC_SHA",
|
||||
"SSL_DHE_RSA_WITH_DES_CBC_SHA", "SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||||
"SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||||
"SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||||
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||||
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");
|
||||
"SSL_DHE_RSA_WITH_DES_CBC_SHA", "SSL_DHE_DSS_WITH_DES_CBC_SHA",
|
||||
"SSL_RSA_EXPORT_WITH_RC4_40_MD5",
|
||||
"SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||||
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
|
||||
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");
|
||||
|
||||
// SSL HTTP Configuration
|
||||
HttpConfiguration https_config = new HttpConfiguration(http_config);
|
||||
https_config.addCustomizer(new SecureRequestCustomizer());
|
||||
HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
|
||||
httpsConfig.addCustomizer(new SecureRequestCustomizer());
|
||||
|
||||
// SSL Connector
|
||||
ServerConnector sslConnector = new ServerConnector(server,
|
||||
new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
|
||||
new HttpConnectionFactory(https_config));
|
||||
new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
|
||||
new HttpConnectionFactory(httpsConfig));
|
||||
sslConnector.setPort(8443);
|
||||
server.addConnector(sslConnector);
|
||||
|
||||
|
||||
// === jetty-deploy.xml ===
|
||||
DeploymentManager deployer = new DeploymentManager();
|
||||
DebugListener debug = new DebugListener(System.err,true,true,true);
|
||||
server.addBean(debug);
|
||||
DebugListener debug = new DebugListener(System.err, true, true, true);
|
||||
server.addBean(debug);
|
||||
deployer.addLifeCycleBinding(new DebugListenerBinding(debug));
|
||||
deployer.setContexts(contexts);
|
||||
deployer.setContextAttribute(
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");
|
||||
|
||||
WebAppProvider webapp_provider = new WebAppProvider();
|
||||
webapp_provider.setMonitoredDirName(jetty_base + "/webapps");
|
||||
webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml");
|
||||
webapp_provider.setScanInterval(1);
|
||||
webapp_provider.setExtractWars(true);
|
||||
webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());
|
||||
WebAppProvider webAppProvider = new WebAppProvider();
|
||||
webAppProvider.setMonitoredDirName(jettyBase + "/webapps");
|
||||
webAppProvider.setDefaultsDescriptor(jettyHome + "/etc/webdefault.xml");
|
||||
webAppProvider.setScanInterval(1);
|
||||
webAppProvider.setExtractWars(true);
|
||||
webAppProvider.setConfigurationManager(new PropertiesConfigurationManager());
|
||||
|
||||
deployer.addAppProvider(webapp_provider);
|
||||
deployer.addAppProvider(webAppProvider);
|
||||
server.addBean(deployer);
|
||||
|
||||
|
||||
// === setup jetty plus ==
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault( server );
|
||||
.setServerDefault(server);
|
||||
classlist.addAfter(
|
||||
"org.eclipse.jetty.webapp.FragmentConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
|
||||
"org.eclipse.jetty.webapp.FragmentConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
|
||||
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
// === jetty-stats.xml ===
|
||||
StatisticsHandler stats = new StatisticsHandler();
|
||||
|
@ -204,34 +188,33 @@ public class LikeJettyXml
|
|||
RewriteHandler rewrite = new RewriteHandler();
|
||||
rewrite.setHandler(server.getHandler());
|
||||
server.setHandler(rewrite);
|
||||
rewrite.addRule(new MsieSslRule());
|
||||
rewrite.addRule(new ValidUrlRule());
|
||||
|
||||
// === jetty-requestlog.xml ===
|
||||
AsyncRequestLogWriter logWriter = new AsyncRequestLogWriter(jetty_home + "/logs/yyyy_mm_dd.request.log");
|
||||
AsyncRequestLogWriter logWriter = new AsyncRequestLogWriter(jettyHome + "/logs/yyyy_mm_dd.request.log");
|
||||
CustomRequestLog requestLog = new CustomRequestLog(logWriter, CustomRequestLog.EXTENDED_NCSA_FORMAT + " \"%C\"");
|
||||
logWriter.setFilenameDateFormat("yyyy_MM_dd");
|
||||
logWriter.setRetainDays(90);
|
||||
logWriter.setTimeZone("GMT");
|
||||
server.setRequestLog(requestLog);
|
||||
|
||||
|
||||
// === jetty-lowresources.xml ===
|
||||
LowResourceMonitor lowResourcesMonitor=new LowResourceMonitor(server);
|
||||
LowResourceMonitor lowResourcesMonitor = new LowResourceMonitor(server);
|
||||
lowResourcesMonitor.setPeriod(1000);
|
||||
lowResourcesMonitor.setLowResourcesIdleTimeout(200);
|
||||
lowResourcesMonitor.setMonitorThreads(true);
|
||||
lowResourcesMonitor.setMaxConnections(0);
|
||||
lowResourcesMonitor.setMaxMemory(0);
|
||||
lowResourcesMonitor.setMaxLowResourcesTime(5000);
|
||||
server.addBean(lowResourcesMonitor);
|
||||
|
||||
|
||||
// === test-realm.xml ===
|
||||
HashLoginService login = new HashLoginService();
|
||||
login.setName("Test Realm");
|
||||
login.setConfig(jetty_base + "/etc/realm.properties");
|
||||
login.setConfig(jettyBase + "/etc/realm.properties");
|
||||
login.setHotReload(false);
|
||||
server.addBean(login);
|
||||
|
||||
|
||||
// Start the server
|
||||
server.start();
|
||||
server.join();
|
||||
|
|
|
@ -36,8 +36,8 @@ import org.eclipse.jetty.util.ssl.SslContextFactory;
|
|||
*/
|
||||
public class ManyConnectors
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
{
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Since this example shows off SSL configuration, we need a keystore
|
||||
// with the appropriate key. These lookup of jetty.home is purely a hack
|
||||
// to get access to a keystore that we use in many unit tests and should
|
||||
|
@ -65,10 +65,10 @@ public class ManyConnectors
|
|||
// <code>http</code> of course, as the default for secured http is
|
||||
// <code>https</code> but we show setting the scheme to show it can be
|
||||
// done. The port for secured communication is also set here.
|
||||
HttpConfiguration http_config = new HttpConfiguration();
|
||||
http_config.setSecureScheme("https");
|
||||
http_config.setSecurePort(8443);
|
||||
http_config.setOutputBufferSize(32768);
|
||||
HttpConfiguration httpConfig = new HttpConfiguration();
|
||||
httpConfig.setSecureScheme("https");
|
||||
httpConfig.setSecurePort(8443);
|
||||
httpConfig.setOutputBufferSize(32768);
|
||||
|
||||
// HTTP connector
|
||||
// The first server connector we create is the one for http, passing in
|
||||
|
@ -76,7 +76,7 @@ public class ManyConnectors
|
|||
// the output buffer size, etc. We also set the port (8080) and
|
||||
// configure an idle timeout.
|
||||
ServerConnector http = new ServerConnector(server,
|
||||
new HttpConnectionFactory(http_config));
|
||||
new HttpConnectionFactory(httpConfig));
|
||||
http.setPort(8080);
|
||||
http.setIdleTimeout(30000);
|
||||
|
||||
|
@ -86,7 +86,7 @@ public class ManyConnectors
|
|||
// to know about. Much more configuration is available the ssl context,
|
||||
// including things like choosing the particular certificate out of a
|
||||
// keystore to be used.
|
||||
|
||||
|
||||
SslContextFactory sslContextFactory = new SslContextFactory.Server();
|
||||
sslContextFactory.setKeyStorePath(keystoreFile.getAbsolutePath());
|
||||
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
|
||||
|
@ -105,19 +105,19 @@ public class ManyConnectors
|
|||
// SecureRequestCustomizer which is how a new connector is able to
|
||||
// resolve the https connection before handing control over to the Jetty
|
||||
// Server.
|
||||
HttpConfiguration https_config = new HttpConfiguration(http_config);
|
||||
HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
|
||||
SecureRequestCustomizer src = new SecureRequestCustomizer();
|
||||
src.setStsMaxAge(2000);
|
||||
src.setStsIncludeSubDomains(true);
|
||||
https_config.addCustomizer(src);
|
||||
httpsConfig.addCustomizer(src);
|
||||
|
||||
// HTTPS connector
|
||||
// We create a second ServerConnector, passing in the http configuration
|
||||
// we just made along with the previously created ssl context factory.
|
||||
// Next we set the port and a longer idle timeout.
|
||||
ServerConnector https = new ServerConnector(server,
|
||||
new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
|
||||
new HttpConnectionFactory(https_config));
|
||||
new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
|
||||
new HttpConnectionFactory(httpsConfig));
|
||||
https.setPort(8443);
|
||||
https.setIdleTimeout(500000);
|
||||
|
||||
|
@ -128,7 +128,7 @@ public class ManyConnectors
|
|||
// has something to pass requests off to.
|
||||
|
||||
// Set the connectors
|
||||
server.setConnectors(new Connector[] { http, https });
|
||||
server.setConnectors(new Connector[]{http, https});
|
||||
|
||||
// Set a handler
|
||||
server.setHandler(new HelloHandler());
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
|||
|
||||
public class ManyContexts
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
|
@ -40,12 +40,14 @@ public class ManyContexts
|
|||
contextIT.setHandler(new HelloHandler("Bongiorno"));
|
||||
|
||||
ContextHandler contextV = new ContextHandler("/");
|
||||
contextV.setVirtualHosts(new String[] { "127.0.0.2" });
|
||||
contextV.setVirtualHosts(new String[]{"127.0.0.2"});
|
||||
contextV.setHandler(new HelloHandler("Virtual Hello"));
|
||||
|
||||
ContextHandlerCollection contexts = new ContextHandlerCollection();
|
||||
contexts.setHandlers(new Handler[] { context, contextFR, contextIT,
|
||||
contextV });
|
||||
contexts.setHandlers(new Handler[]{
|
||||
context, contextFR, contextIT,
|
||||
contextV
|
||||
});
|
||||
|
||||
server.setHandler(contexts);
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ package org.eclipse.jetty.embedded;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -72,11 +71,11 @@ public class ManyHandlers
|
|||
public static class ParamHandler extends AbstractHandler
|
||||
{
|
||||
@Override
|
||||
public void handle( String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response ) throws IOException,
|
||||
ServletException
|
||||
public void handle(String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException,
|
||||
ServletException
|
||||
{
|
||||
Map<String, String[]> params = request.getParameterMap();
|
||||
if (!params.isEmpty())
|
||||
|
@ -94,18 +93,18 @@ public class ManyHandlers
|
|||
public static class WelcomeWrapHandler extends HandlerWrapper
|
||||
{
|
||||
@Override
|
||||
public void handle( String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response ) throws IOException,
|
||||
ServletException
|
||||
public void handle(String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws IOException,
|
||||
ServletException
|
||||
{
|
||||
request.setAttribute("welcome", "Hello");
|
||||
super.handle(target, baseRequest, request, response);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
|
@ -126,8 +125,8 @@ public class ManyHandlers
|
|||
|
||||
// link them all together
|
||||
wrapper.setHandler(hello);
|
||||
list.setHandlers(new Handler[] { param, new GzipHandler() });
|
||||
handlers.setHandlers(new Handler[] { list, dft });
|
||||
list.setHandlers(new Handler[]{param, new GzipHandler()});
|
||||
handlers.setHandlers(new Handler[]{list, dft});
|
||||
|
||||
server.setHandler(handlers);
|
||||
|
||||
|
|
|
@ -29,13 +29,13 @@ import org.eclipse.jetty.servlet.ServletHolder;
|
|||
|
||||
public class ManyServletContexts
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
// Setup JMX
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
server.addBean(mbContainer, true);
|
||||
|
||||
// Declare server handler collection
|
||||
|
@ -44,7 +44,7 @@ public class ManyServletContexts
|
|||
|
||||
// Configure context "/" (root) for servlets
|
||||
ServletContextHandler root = new ServletContextHandler(contexts, "/",
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
// Add servlets to root context
|
||||
root.addServlet(new ServletHolder(new HelloServlet("Hello")), "/");
|
||||
root.addServlet(new ServletHolder(new HelloServlet("Ciao")), "/it/*");
|
||||
|
@ -52,7 +52,7 @@ public class ManyServletContexts
|
|||
|
||||
// Configure context "/other" for servlets
|
||||
ServletContextHandler other = new ServletContextHandler(contexts,
|
||||
"/other", ServletContextHandler.SESSIONS);
|
||||
"/other", ServletContextHandler.SESSIONS);
|
||||
// Add servlets to /other context
|
||||
other.addServlet(DefaultServlet.class.getCanonicalName(), "/");
|
||||
other.addServlet(new ServletHolder(new HelloServlet("YO!")), "*.yo");
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -30,7 +29,7 @@ import org.eclipse.jetty.servlet.ServletHandler;
|
|||
|
||||
public class MinimalServlets
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Create a basic jetty server object that will listen on port 8080.
|
||||
// Note that if you set this to port 0 then a randomly available port
|
||||
|
@ -66,9 +65,9 @@ public class MinimalServlets
|
|||
public static class HelloServlet extends HttpServlet
|
||||
{
|
||||
@Override
|
||||
protected void doGet( HttpServletRequest request,
|
||||
HttpServletResponse response ) throws ServletException,
|
||||
IOException
|
||||
protected void doGet(HttpServletRequest request,
|
||||
HttpServletResponse response) throws ServletException,
|
||||
IOException
|
||||
{
|
||||
response.setContentType("text/html");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.eclipse.jetty.server.ServerConnector;
|
|||
*/
|
||||
public class OneConnector
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// The Server
|
||||
Server server = new Server();
|
||||
|
|
|
@ -23,18 +23,18 @@ import org.eclipse.jetty.server.handler.ContextHandler;
|
|||
|
||||
public class OneContext
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server( 8080 );
|
||||
Server server = new Server(8080);
|
||||
|
||||
// Add a single handler on context "/hello"
|
||||
ContextHandler context = new ContextHandler();
|
||||
context.setContextPath( "/hello" );
|
||||
context.setHandler( new HelloHandler() );
|
||||
context.setContextPath("/hello");
|
||||
context.setHandler(new HelloHandler());
|
||||
|
||||
// Can be accessed using http://localhost:8080/hello
|
||||
|
||||
server.setHandler( context );
|
||||
server.setHandler(context);
|
||||
|
||||
// Start the server
|
||||
server.start();
|
||||
|
|
|
@ -22,7 +22,7 @@ import org.eclipse.jetty.server.Server;
|
|||
|
||||
public class OneHandler
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
server.setHandler(new HelloHandler());
|
||||
|
|
|
@ -18,11 +18,8 @@
|
|||
|
||||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.servlet.DefaultServlet;
|
||||
import org.eclipse.jetty.servlet.ListenerHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.EnumSet;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
|
@ -34,17 +31,20 @@ import javax.servlet.ServletRequest;
|
|||
import javax.servlet.ServletRequestEvent;
|
||||
import javax.servlet.ServletRequestListener;
|
||||
import javax.servlet.ServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.servlet.DefaultServlet;
|
||||
import org.eclipse.jetty.servlet.ListenerHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
|
||||
public class OneServletContext
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
context.setResourceBase(System.getProperty("java.io.tmpdir"));
|
||||
server.setHandler(context);
|
||||
|
@ -56,9 +56,9 @@ public class OneServletContext
|
|||
context.addServlet(HelloServlet.class, "/hello/*");
|
||||
context.addServlet(DefaultServlet.class, "/");
|
||||
|
||||
context.addFilter(TestFilter.class,"/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addFilter(TestFilter.class,"/test", EnumSet.of(DispatcherType.REQUEST,DispatcherType.ASYNC));
|
||||
context.addFilter(TestFilter.class,"*.test", EnumSet.of(DispatcherType.REQUEST,DispatcherType.INCLUDE,DispatcherType.FORWARD));
|
||||
context.addFilter(TestFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
context.addFilter(TestFilter.class, "/test", EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC));
|
||||
context.addFilter(TestFilter.class, "*.test", EnumSet.of(DispatcherType.REQUEST, DispatcherType.INCLUDE, DispatcherType.FORWARD));
|
||||
|
||||
context.getServletHandler().addListener(new ListenerHolder(InitListener.class));
|
||||
context.getServletHandler().addListener(new ListenerHolder(RequestListener.class));
|
||||
|
@ -68,7 +68,6 @@ public class OneServletContext
|
|||
server.join();
|
||||
}
|
||||
|
||||
|
||||
public static class TestFilter implements Filter
|
||||
{
|
||||
@Override
|
||||
|
@ -103,7 +102,6 @@ public class OneServletContext
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public static class RequestListener implements ServletRequestListener
|
||||
{
|
||||
@Override
|
||||
|
|
|
@ -28,15 +28,15 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
|
|||
|
||||
public class OneServletContextJmxStats
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
// Add JMX tracking to Server
|
||||
server.addBean(new MBeanContainer(ManagementFactory
|
||||
.getPlatformMBeanServer()));
|
||||
.getPlatformMBeanServer()));
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
server.setHandler(context);
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.eclipse.jetty.server.session.SessionCache;
|
|||
import org.eclipse.jetty.server.session.SessionHandler;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
|
||||
|
||||
public class OneServletContextWithSession
|
||||
{
|
||||
public static void main(String[] args) throws Exception
|
||||
|
@ -34,14 +33,14 @@ public class OneServletContextWithSession
|
|||
|
||||
// Create a ServletContext, with a session handler enabled.
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
context.setResourceBase(System.getProperty("java.io.tmpdir"));
|
||||
server.setHandler(context);
|
||||
|
||||
// Access the SessionHandler from the context.
|
||||
SessionHandler sessions = context.getSessionHandler();
|
||||
|
||||
|
||||
// Explicitly set Session Cache and null Datastore.
|
||||
// This is normally done by default,
|
||||
// but is done explicitly here for demonstration.
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||
|
||||
public class OneWebApp
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Create a basic jetty server object that will listen on port 8080.
|
||||
// Note that if you set this to port 0 then a randomly available port
|
||||
|
@ -37,7 +37,7 @@ public class OneWebApp
|
|||
|
||||
// Setup JMX
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
server.addBean(mbContainer);
|
||||
|
||||
// The WebAppContext is the entity that controls the environment in
|
||||
|
@ -49,8 +49,7 @@ public class OneWebApp
|
|||
// PlusConfiguration) to choosing where the webapp will unpack itself.
|
||||
WebAppContext webapp = new WebAppContext();
|
||||
webapp.setContextPath("/");
|
||||
File warFile = new File(
|
||||
"../../tests/test-jmx/jmx-webapp/target/jmx-webapp");
|
||||
File warFile = JettyDistribution.resolve("demo-base/webapps/async-rest.war").toFile();
|
||||
webapp.setWar(warFile.getAbsolutePath());
|
||||
|
||||
// A WebAppContext is a ContextHandler as well so it needs to be set to
|
||||
|
|
|
@ -29,19 +29,19 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||
|
||||
public class OneWebAppWithJsp
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Create a basic jetty server object that will listen on port 8080.
|
||||
// Note that if you set this to port 0 then
|
||||
// a randomly available port will be assigned that you can either look
|
||||
// in the logs for the port,
|
||||
// or programmatically obtain it for use in test cases.
|
||||
Server server = new Server( 8080 );
|
||||
Server server = new Server(8080);
|
||||
|
||||
// Setup JMX
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer() );
|
||||
server.addBean( mbContainer );
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
server.addBean(mbContainer);
|
||||
|
||||
// The WebAppContext is the entity that controls the environment in
|
||||
// which a web application lives and
|
||||
|
@ -53,38 +53,37 @@ public class OneWebAppWithJsp
|
|||
// the webapp (through
|
||||
// PlusConfiguration) to choosing where the webapp will unpack itself.
|
||||
WebAppContext webapp = new WebAppContext();
|
||||
webapp.setContextPath( "/" );
|
||||
webapp.setContextPath("/");
|
||||
File warFile = new File(
|
||||
"jetty-distribution/target/distribution/demo-base/webapps/test.war" );
|
||||
"jetty-distribution/target/distribution/demo-base/webapps/test.war");
|
||||
if (!warFile.exists())
|
||||
{
|
||||
throw new RuntimeException( "Unable to find WAR File: "
|
||||
+ warFile.getAbsolutePath() );
|
||||
throw new RuntimeException("Unable to find WAR File: " + warFile.getAbsolutePath());
|
||||
}
|
||||
webapp.setWar( warFile.getAbsolutePath() );
|
||||
webapp.setWar(warFile.getAbsolutePath());
|
||||
webapp.setExtractWAR(true);
|
||||
|
||||
// This webapp will use jsps and jstl. We need to enable the
|
||||
// AnnotationConfiguration in order to correctly
|
||||
// set up the jsp container
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault( server );
|
||||
.setServerDefault(server);
|
||||
classlist.addBefore(
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration" );
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
// Set the ContainerIncludeJarPattern so that jetty examines these
|
||||
// container-path jars for tlds, web-fragments etc.
|
||||
// If you omit the jar that contains the jstl .tlds, the jsp engine will
|
||||
// scan for them instead.
|
||||
webapp.setAttribute(
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$" );
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");
|
||||
|
||||
// A WebAppContext is a ContextHandler as well so it needs to be set to
|
||||
// the server so it is aware of where to
|
||||
// send the appropriate requests.
|
||||
server.setHandler( webapp );
|
||||
server.setHandler(webapp);
|
||||
|
||||
// Configure a LoginService.
|
||||
// Since this example is for our test webapp, we need to setup a
|
||||
|
@ -95,13 +94,13 @@ public class OneWebAppWithJsp
|
|||
// can be started and stopped according to the lifecycle of the server
|
||||
// itself.
|
||||
HashLoginService loginService = new HashLoginService();
|
||||
loginService.setName( "Test Realm" );
|
||||
loginService.setConfig( "examples/embedded/src/test/resources/realm.properties" );
|
||||
server.addBean( loginService );
|
||||
loginService.setName("Test Realm");
|
||||
loginService.setConfig("examples/embedded/src/test/resources/realm.properties");
|
||||
server.addBean(loginService);
|
||||
|
||||
// Start things up!
|
||||
server.start();
|
||||
|
||||
|
||||
server.dumpStdErr();
|
||||
|
||||
// The use of server.join() the will make the current thread join and
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.eclipse.jetty.servlet.ServletHolder;
|
|||
|
||||
public class ProxyServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server();
|
||||
ServerConnector connector = new ServerConnector(server);
|
||||
|
@ -40,12 +40,11 @@ public class ProxyServer
|
|||
|
||||
// Setup proxy servlet
|
||||
ServletContextHandler context = new ServletContextHandler(proxy, "/",
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletHolder proxyServlet = new ServletHolder(ProxyServlet.class);
|
||||
proxyServlet.setInitParameter("blackList", "www.eclipse.org");
|
||||
context.addServlet(proxyServlet, "/*");
|
||||
|
||||
server.start();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,19 +28,19 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
|
|||
|
||||
public class RewriteServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
HttpConfiguration config=server.getConnectors()[0].getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration();
|
||||
|
||||
HttpConfiguration config = server.getConnectors()[0].getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration();
|
||||
|
||||
RewriteCustomizer rewrite = new RewriteCustomizer();
|
||||
config.addCustomizer(rewrite);
|
||||
rewrite.addRule(new CompactPathRule());
|
||||
rewrite.addRule(new RewriteRegexRule("(.*)foo(.*)","$1FOO$2"));
|
||||
|
||||
rewrite.addRule(new RewriteRegexRule("(.*)foo(.*)", "$1FOO$2"));
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
server.setHandler(context);
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.eclipse.jetty.util.security.Constraint;
|
|||
|
||||
public class SecuredHelloHandler
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Create a basic jetty server object that will listen on port 8080.
|
||||
// Note that if you set this to port 0 then a randomly available port
|
||||
|
@ -47,7 +47,7 @@ public class SecuredHelloHandler
|
|||
// In this example the name can be whatever you like since we are not
|
||||
// dealing with webapp realms.
|
||||
LoginService loginService = new HashLoginService("MyRealm",
|
||||
"src/test/resources/realm.properties");
|
||||
"src/test/resources/realm.properties");
|
||||
server.addBean(loginService);
|
||||
|
||||
// A security handler is a jetty handler that secures content behind a
|
||||
|
@ -65,7 +65,7 @@ public class SecuredHelloHandler
|
|||
Constraint constraint = new Constraint();
|
||||
constraint.setName("auth");
|
||||
constraint.setAuthenticate(true);
|
||||
constraint.setRoles(new String[] { "user", "admin" });
|
||||
constraint.setRoles(new String[]{"user", "admin"});
|
||||
|
||||
// Binds a url pattern with the previously created constraint. The roles
|
||||
// for this constraing mapping are mined from the Constraint itself
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.embedded;
|
|||
import java.io.File;
|
||||
|
||||
import org.eclipse.jetty.plus.jndi.EnvEntry;
|
||||
import org.eclipse.jetty.plus.jndi.NamingDump;
|
||||
import org.eclipse.jetty.plus.jndi.Resource;
|
||||
import org.eclipse.jetty.plus.jndi.Transaction;
|
||||
import org.eclipse.jetty.security.HashLoginService;
|
||||
|
@ -33,30 +34,28 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||
*/
|
||||
public class ServerWithAnnotations
|
||||
{
|
||||
public static final void main( String args[] ) throws Exception
|
||||
public static final void main(String[] args) throws Exception
|
||||
{
|
||||
// Create the server
|
||||
Server server = new Server(8080);
|
||||
|
||||
// Enable parsing of jndi-related parts of web.xml and jetty-env.xml
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault(server);
|
||||
.setServerDefault(server);
|
||||
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
classlist.addBefore(
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
|
||||
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
|
||||
"org.eclipse.jetty.annotations.AnnotationConfiguration");
|
||||
// Create a WebApp
|
||||
WebAppContext webapp = new WebAppContext();
|
||||
webapp.setContextPath("/");
|
||||
File warFile = new File(
|
||||
"jetty-distribution/target/distribution/demo-base/webapps/test.war");
|
||||
File warFile = JettyDistribution.resolve("demo-base/webapps/test-spec.war").toFile();
|
||||
webapp.setWar(warFile.getAbsolutePath());
|
||||
webapp.setAttribute(
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$");
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$");
|
||||
server.setHandler(webapp);
|
||||
|
||||
// Register new transaction manager in JNDI
|
||||
|
@ -64,10 +63,14 @@ public class ServerWithAnnotations
|
|||
new Transaction(new com.acme.MockUserTransaction());
|
||||
|
||||
// Define an env entry with webapp scope.
|
||||
new EnvEntry(webapp, "maxAmount", new Double(100), true);
|
||||
// THIS ENTRY IS OVERRIDEN BY THE ENTRY IN jetty-env.xml
|
||||
new EnvEntry(webapp, "maxAmount", 100d, true);
|
||||
|
||||
// Register a mock DataSource scoped to the webapp
|
||||
new Resource(webapp, "jdbc/mydatasource", new com.acme.MockDataSource());
|
||||
new Resource(server, "jdbc/mydatasource", new com.acme.MockDataSource());
|
||||
|
||||
// Add JNDI context to server for dump
|
||||
server.addBean(new NamingDump());
|
||||
|
||||
// Configure a LoginService
|
||||
HashLoginService loginService = new HashLoginService();
|
||||
|
@ -79,5 +82,4 @@ public class ServerWithAnnotations
|
|||
server.dumpStdErr();
|
||||
server.join();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.embedded;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
import javax.management.remote.JMXServiceURL;
|
||||
|
||||
import org.eclipse.jetty.jmx.ConnectorServer;
|
||||
|
@ -31,24 +30,24 @@ import org.eclipse.jetty.server.Server;
|
|||
*/
|
||||
public class ServerWithJMX
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// === jetty-jmx.xml ===
|
||||
MBeanContainer mbContainer = new MBeanContainer(
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
|
||||
ManagementFactory.getPlatformMBeanServer());
|
||||
|
||||
Server server = new Server(8080);
|
||||
server.addBean(mbContainer);
|
||||
|
||||
|
||||
ConnectorServer jmx = new ConnectorServer(
|
||||
new JMXServiceURL(
|
||||
"rmi",
|
||||
null,
|
||||
1999,
|
||||
"/jndi/rmi://localhost:1999/jmxrmi"),
|
||||
"org.eclipse.jetty.jmx:name=rmiconnectorserver");
|
||||
new JMXServiceURL(
|
||||
"rmi",
|
||||
null,
|
||||
1999,
|
||||
"/jndi/rmi://localhost:1999/jmxrmi"),
|
||||
"org.eclipse.jetty.jmx:name=rmiconnectorserver");
|
||||
server.addBean(jmx);
|
||||
|
||||
|
||||
server.start();
|
||||
server.dumpStdErr();
|
||||
server.join();
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||
*/
|
||||
public class ServerWithJNDI
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
|
||||
// Create the server
|
||||
|
@ -38,23 +38,23 @@ public class ServerWithJNDI
|
|||
|
||||
// Enable parsing of jndi-related parts of web.xml and jetty-env.xml
|
||||
Configuration.ClassList classlist = Configuration.ClassList
|
||||
.setServerDefault(server);
|
||||
.setServerDefault(server);
|
||||
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
|
||||
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
|
||||
|
||||
// Create a WebApp
|
||||
WebAppContext webapp = new WebAppContext();
|
||||
webapp.setContextPath("/");
|
||||
File warFile = new File(
|
||||
"../../jetty-distribution/target/distribution/demo-base/webapps/test-jndi.war");
|
||||
"../../jetty-distribution/target/distribution/demo-base/webapps/test-jndi.war");
|
||||
webapp.setWar(warFile.getAbsolutePath());
|
||||
server.setHandler(webapp);
|
||||
|
||||
// Register new transaction manager in JNDI
|
||||
// At runtime, the webapp accesses this as java:comp/UserTransaction
|
||||
new org.eclipse.jetty.plus.jndi.Transaction(
|
||||
new com.acme.MockUserTransaction());
|
||||
new com.acme.MockUserTransaction());
|
||||
|
||||
// Define an env entry with Server scope.
|
||||
// At runtime, the webapp accesses this as java:comp/env/woggle
|
||||
|
@ -108,7 +108,7 @@ public class ServerWithJNDI
|
|||
// At runtime the webapp accesses this as
|
||||
// java:comp/env/jdbc/mydatasource
|
||||
new org.eclipse.jetty.plus.jndi.Resource(
|
||||
webapp, "jdbc/mydatasource", new com.acme.MockDataSource());
|
||||
webapp, "jdbc/mydatasource", new com.acme.MockDataSource());
|
||||
|
||||
server.start();
|
||||
server.join();
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.eclipse.jetty.server.Server;
|
|||
*/
|
||||
public class SimplestServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
server.start();
|
||||
|
|
|
@ -37,7 +37,7 @@ import org.eclipse.jetty.util.resource.Resource;
|
|||
*/
|
||||
public class SplitFileServer
|
||||
{
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
// Create the Server object and a corresponding ServerConnector and then
|
||||
// set the port for the connector. In this example the server will
|
||||
|
@ -47,7 +47,7 @@ public class SplitFileServer
|
|||
Server server = new Server();
|
||||
ServerConnector connector = new ServerConnector(server);
|
||||
connector.setPort(8090);
|
||||
server.setConnectors(new Connector[] { connector });
|
||||
server.setConnectors(new Connector[]{connector});
|
||||
|
||||
// Create a Context Handler and ResourceHandler. The ContextHandler is
|
||||
// getting set to "/" path but this could be anything you like for
|
||||
|
@ -77,13 +77,13 @@ public class SplitFileServer
|
|||
// This will let jetty process urls against the declared contexts in
|
||||
// order to match up content.
|
||||
ContextHandlerCollection contexts = new ContextHandlerCollection();
|
||||
contexts.setHandlers(new Handler[] { context0, context1 });
|
||||
contexts.setHandlers(new Handler[]{context0, context1});
|
||||
|
||||
server.setHandler(contexts);
|
||||
|
||||
// Start things up!
|
||||
server.start();
|
||||
|
||||
|
||||
// Dump the server state
|
||||
System.out.println(server.dump());
|
||||
|
||||
|
|
|
@ -41,26 +41,26 @@ public class WebSocketJsrServer
|
|||
public static class EchoJsrSocket
|
||||
{
|
||||
@OnMessage
|
||||
public void onMessage( Session session, String message )
|
||||
public void onMessage(Session session, String message)
|
||||
{
|
||||
session.getAsyncRemote().sendText(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
HandlerList handlers = new HandlerList();
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
handlers.addHandler(context);
|
||||
|
||||
// Enable javax.websocket configuration for the context
|
||||
ServerContainer wsContainer = WebSocketServerContainerInitializer
|
||||
.configureContext(context);
|
||||
.configureContext(context);
|
||||
|
||||
// Add your websockets to the container
|
||||
wsContainer.addEndpoint(EchoJsrSocket.class);
|
||||
|
|
|
@ -41,7 +41,7 @@ public class WebSocketServer
|
|||
public static class EchoSocket
|
||||
{
|
||||
@OnWebSocketMessage
|
||||
public void onMessage( Session session, String message )
|
||||
public void onMessage(Session session, String message)
|
||||
{
|
||||
session.getRemote().sendStringByFuture(message);
|
||||
}
|
||||
|
@ -54,19 +54,19 @@ public class WebSocketServer
|
|||
public static class EchoServlet extends WebSocketServlet
|
||||
{
|
||||
@Override
|
||||
public void configure( WebSocketServletFactory factory )
|
||||
public void configure(WebSocketServletFactory factory)
|
||||
{
|
||||
// Register the echo websocket with the basic WebSocketCreator
|
||||
factory.register(EchoSocket.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main( String[] args ) throws Exception
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
Server server = new Server(8080);
|
||||
|
||||
ServletContextHandler context = new ServletContextHandler(
|
||||
ServletContextHandler.SESSIONS);
|
||||
ServletContextHandler.SESSIONS);
|
||||
context.setContextPath("/");
|
||||
server.setHandler(context);
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
|
||||
<Configure id="ExampleServer" class="org.eclipse.jetty.server.Server">
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
|
||||
<Configure id="OtherServer" class="org.eclipse.jetty.server.Server">
|
||||
<Set name="handler">
|
||||
|
|
|
@ -24,8 +24,8 @@ public class TestXml
|
|||
{
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
System.setProperty("jetty.home","../jetty-distribution/target/distribution");
|
||||
System.setProperty("jetty.home", "../jetty-distribution/target/distribution");
|
||||
XmlConfiguration.main("../jetty-jmx/src/main/config/etc/jetty-jmx.xml",
|
||||
"../jetty-server/src/main/config/etc/jetty.xml");
|
||||
"../jetty-server/src/main/config/etc/jetty.xml");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-project</artifactId>
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
</goals>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Import-Package>org.eclipse.jetty.alpn;resolution:=optional,*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client)";resolution:=optional;cardinality:=multiple</Require-Capability>
|
||||
<Import-Package>org.eclipse.jetty.alpn;resolution:=optional,*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client)";resolution:=optional;cardinality:=multiple</Require-Capability>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
@ -33,8 +33,8 @@
|
|||
<!-- always include the sources to be able to prepare the eclipse-jetty-SDK feature
|
||||
with a snapshot. -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
|
|
|
@ -21,7 +21,6 @@ package org.eclipse.jetty.alpn.client;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.eclipse.jetty.io.ClientConnectionFactory;
|
||||
|
@ -49,7 +48,7 @@ public class ALPNClientConnection extends NegotiatingClientConnection
|
|||
|
||||
public void selected(String protocol)
|
||||
{
|
||||
if (protocol==null || !protocols.contains(protocol))
|
||||
if (protocol == null || !protocols.contains(protocol))
|
||||
close();
|
||||
else
|
||||
super.completed();
|
||||
|
|
|
@ -24,7 +24,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.eclipse.jetty.io.ClientConnectionFactory;
|
||||
|
@ -55,14 +54,14 @@ public class ALPNClientConnectionFactory extends NegotiatingClientConnectionFact
|
|||
IllegalStateException failure = new IllegalStateException("No Client ALPNProcessors!");
|
||||
|
||||
// Use a for loop on iterator so load exceptions can be caught and ignored
|
||||
for (Iterator<Client> i = ServiceLoader.load(Client.class).iterator(); i.hasNext();)
|
||||
for (Iterator<Client> i = ServiceLoader.load(Client.class).iterator(); i.hasNext(); )
|
||||
{
|
||||
Client processor;
|
||||
try
|
||||
{
|
||||
processor = i.next();
|
||||
}
|
||||
catch(Throwable x)
|
||||
catch (Throwable x)
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug(x);
|
||||
|
@ -104,7 +103,7 @@ public class ALPNClientConnectionFactory extends NegotiatingClientConnectionFact
|
|||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("{} for {} on {}", processor, engine, endPoint);
|
||||
ALPNClientConnection connection = new ALPNClientConnection(endPoint, executor, getClientConnectionFactory(),
|
||||
engine, context, protocols);
|
||||
engine, context, protocols);
|
||||
processor.configure(engine, connection);
|
||||
return customize(connection, context);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
|
@ -35,23 +33,23 @@
|
|||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Conscrypt Client ALPN</Bundle-Description>
|
||||
<Import-Package>org.conscrypt;version="${conscrypt.version}",*</Import-Package>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Conscrypt Client ALPN</Bundle-Description>
|
||||
<Import-Package>org.conscrypt;version="${conscrypt.version}",*</Import-Package>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.alpn.conscrypt.client;
|
||||
|
||||
import java.security.Security;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.conscrypt.Conscrypt;
|
||||
|
@ -62,7 +61,7 @@ public class ConscryptClientALPNProcessor implements ALPNProcessor.Client
|
|||
String[] protocols = alpn.getProtocols().toArray(new String[0]);
|
||||
Conscrypt.setApplicationProtocols(sslEngine, protocols);
|
||||
((SslConnection.DecryptedEndPoint)connection.getEndPoint()).getSslConnection()
|
||||
.addHandshakeListener(new ALPNListener(alpn));
|
||||
.addHandshakeListener(new ALPNListener(alpn));
|
||||
}
|
||||
catch (RuntimeException x)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
|
@ -66,20 +65,20 @@
|
|||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Conscrypt ALPN</Bundle-Description>
|
||||
<Import-Package>org.conscrypt;version="${conscrypt.version}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>Conscrypt ALPN</Bundle-Description>
|
||||
<Import-Package>org.conscrypt;version="${conscrypt.version}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.alpn.conscrypt.server;
|
|||
|
||||
import java.security.Security;
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
import javax.net.ssl.SSLSocket;
|
||||
|
||||
|
@ -77,7 +76,6 @@ public class ConscryptServerALPNProcessor implements ALPNProcessor.Server
|
|||
{
|
||||
private final ALPNServerConnection alpnConnection;
|
||||
|
||||
|
||||
private ALPNCallback(ALPNServerConnection connection)
|
||||
{
|
||||
alpnConnection = connection;
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.io.File;
|
|||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.security.Security;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
|
|
@ -1,61 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
<version>9.4.20-SNAPSHOT</version>
|
||||
</parent>
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
<version>9.4.20-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jetty-alpn-java-client</artifactId>
|
||||
<name>Jetty :: ALPN :: JDK9 Client Implementation</name>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jetty-alpn-java-client</artifactId>
|
||||
<name>Jetty :: ALPN :: JDK9 Client Implementation</name>
|
||||
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.alpn.java.client</bundle-symbolic-name>
|
||||
</properties>
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.alpn.java.client</bundle-symbolic-name>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.9</source>
|
||||
<target>1.9</target>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>JDK9 Client ALPN</Bundle-Description>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.9</source>
|
||||
<target>1.9</target>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>JDK9 Client ALPN</Bundle-Description>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-client</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.http2</groupId>
|
||||
<artifactId>http2-client</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-client</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.http2</groupId>
|
||||
<artifactId>http2-client</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.alpn.java.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
import javax.net.ssl.SSLParameters;
|
||||
|
||||
|
@ -39,15 +38,15 @@ public class JDK9ClientALPNProcessor implements ALPNProcessor.Client
|
|||
@Override
|
||||
public void init()
|
||||
{
|
||||
if (JavaVersion.VERSION.getPlatform()<9)
|
||||
throw new IllegalStateException(this + " not applicable for java "+JavaVersion.VERSION);
|
||||
if (JavaVersion.VERSION.getPlatform() < 9)
|
||||
throw new IllegalStateException(this + " not applicable for java " + JavaVersion.VERSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean appliesTo(SSLEngine sslEngine)
|
||||
{
|
||||
Module module = sslEngine.getClass().getModule();
|
||||
return module!=null && "java.base".equals(module.getName());
|
||||
return module != null && "java.base".equals(module.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -59,7 +58,7 @@ public class JDK9ClientALPNProcessor implements ALPNProcessor.Client
|
|||
sslParameters.setApplicationProtocols(protocols.toArray(new String[protocols.size()]));
|
||||
sslEngine.setSSLParameters(sslParameters);
|
||||
((DecryptedEndPoint)connection.getEndPoint()).getSslConnection()
|
||||
.addHandshakeListener(new ALPNListener(alpn));
|
||||
.addHandshakeListener(new ALPNListener(alpn));
|
||||
}
|
||||
|
||||
private final class ALPNListener implements SslHandshakeListener
|
||||
|
|
|
@ -1,74 +1,72 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
<version>9.4.20-SNAPSHOT</version>
|
||||
</parent>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
<version>9.4.20-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jetty-alpn-java-server</artifactId>
|
||||
<name>Jetty :: ALPN :: JDK9 Server Implementation</name>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jetty-alpn-java-server</artifactId>
|
||||
<name>Jetty :: ALPN :: JDK9 Server Implementation</name>
|
||||
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.alpn.java.server</bundle-symbolic-name>
|
||||
</properties>
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.alpn.java.server</bundle-symbolic-name>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.9</source>
|
||||
<target>1.9</target>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>JDK9 Server ALPN</Bundle-Description>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.9</source>
|
||||
<target>1.9</target>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>JDK9 Server ALPN</Bundle-Description>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-io</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.alpn</groupId>
|
||||
<artifactId>alpn-api</artifactId>
|
||||
<version>${alpn.api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.http2</groupId>
|
||||
<artifactId>http2-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-io</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.alpn</groupId>
|
||||
<artifactId>alpn-api</artifactId>
|
||||
<version>${alpn.api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.http2</groupId>
|
||||
<artifactId>http2-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.alpn.java.server;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.eclipse.jetty.alpn.server.ALPNServerConnection;
|
||||
|
@ -39,15 +38,15 @@ public class JDK9ServerALPNProcessor implements ALPNProcessor.Server, SslHandsha
|
|||
@Override
|
||||
public void init()
|
||||
{
|
||||
if (JavaVersion.VERSION.getPlatform()<9)
|
||||
throw new IllegalStateException(this + " not applicable for java "+JavaVersion.VERSION);
|
||||
if (JavaVersion.VERSION.getPlatform() < 9)
|
||||
throw new IllegalStateException(this + " not applicable for java " + JavaVersion.VERSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean appliesTo(SSLEngine sslEngine)
|
||||
{
|
||||
Module module = sslEngine.getClass().getModule();
|
||||
return module!=null && "java.base".equals(module.getName());
|
||||
return module != null && "java.base".equals(module.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -56,7 +55,7 @@ public class JDK9ServerALPNProcessor implements ALPNProcessor.Server, SslHandsha
|
|||
sslEngine.setHandshakeApplicationProtocolSelector(new ALPNCallback((ALPNServerConnection)connection));
|
||||
}
|
||||
|
||||
private final class ALPNCallback implements BiFunction<SSLEngine,List<String>,String>, SslHandshakeListener
|
||||
private final class ALPNCallback implements BiFunction<SSLEngine, List<String>, String>, SslHandshakeListener
|
||||
{
|
||||
private final ALPNServerConnection alpnConnection;
|
||||
|
||||
|
@ -81,7 +80,7 @@ public class JDK9ServerALPNProcessor implements ALPNProcessor.Server, SslHandsha
|
|||
String protocol = alpnConnection.getProtocol();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("TLS handshake succeeded, protocol={} for {}", protocol, alpnConnection);
|
||||
if (protocol ==null)
|
||||
if (protocol == null)
|
||||
alpnConnection.unsupported();
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ import java.io.InputStream;
|
|||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLParameters;
|
||||
import javax.net.ssl.SSLSocket;
|
||||
|
@ -100,8 +99,8 @@ public class JDK9ALPNTest
|
|||
client.startHandshake();
|
||||
|
||||
OutputStream output = client.getOutputStream();
|
||||
output.write(("" +
|
||||
"GET / HTTP/1.1\r\n" +
|
||||
output.write((
|
||||
"GET / HTTP/1.1\r\n" +
|
||||
"Host: localhost\r\n" +
|
||||
"Connection: close\r\n" +
|
||||
"\r\n" +
|
||||
|
@ -145,8 +144,8 @@ public class JDK9ALPNTest
|
|||
client.startHandshake();
|
||||
|
||||
OutputStream output = client.getOutputStream();
|
||||
output.write(("" +
|
||||
"GET / HTTP/1.1\r\n" +
|
||||
output.write((
|
||||
"GET / HTTP/1.1\r\n" +
|
||||
"Host: localhost\r\n" +
|
||||
"Connection: close\r\n" +
|
||||
"\r\n" +
|
||||
|
@ -163,6 +162,5 @@ public class JDK9ALPNTest
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
|
@ -53,21 +51,21 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>OpenJDK8 Client ALPN</Bundle-Description>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>OpenJDK8 Client ALPN</Bundle-Description>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package org.eclipse.jetty.alpn.java.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.eclipse.jetty.alpn.ALPN;
|
||||
|
@ -37,9 +36,9 @@ public class OpenJDK8ClientALPNProcessor implements ALPNProcessor.Client
|
|||
@Override
|
||||
public void init()
|
||||
{
|
||||
if (JavaVersion.VERSION.getPlatform()!=8)
|
||||
throw new IllegalStateException(this + " not applicable for java "+JavaVersion.VERSION);
|
||||
if (ALPN.class.getClassLoader()!=null)
|
||||
if (JavaVersion.VERSION.getPlatform() != 8)
|
||||
throw new IllegalStateException(this + " not applicable for java " + JavaVersion.VERSION);
|
||||
if (ALPN.class.getClassLoader() != null)
|
||||
throw new IllegalStateException(ALPN.class.getName() + " must be on JVM boot classpath");
|
||||
if (LOG.isDebugEnabled())
|
||||
ALPN.debug = true;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-alpn-parent</artifactId>
|
||||
|
@ -58,21 +57,21 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>OpenJDK8 Server ALPN</Bundle-Description>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Description>OpenJDK8 Server ALPN</Bundle-Description>
|
||||
<Export-Package>*</Export-Package>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
|
||||
<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server</Provide-Capability>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.alpn.openjdk8.server;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
import javax.net.ssl.SSLException;
|
||||
|
||||
|
@ -35,13 +34,13 @@ import org.eclipse.jetty.util.log.Logger;
|
|||
public class OpenJDK8ServerALPNProcessor implements ALPNProcessor.Server
|
||||
{
|
||||
private static final Logger LOG = Log.getLogger(OpenJDK8ServerALPNProcessor.class);
|
||||
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
if (JavaVersion.VERSION.getPlatform()!=8)
|
||||
throw new IllegalStateException(this + " not applicable for java "+JavaVersion.VERSION);
|
||||
if (ALPN.class.getClassLoader()!=null)
|
||||
if (JavaVersion.VERSION.getPlatform() != 8)
|
||||
throw new IllegalStateException(this + " not applicable for java " + JavaVersion.VERSION);
|
||||
if (ALPN.class.getClassLoader() != null)
|
||||
throw new IllegalStateException(ALPN.class.getName() + " must be on JVM boot classpath");
|
||||
if (LOG.isDebugEnabled())
|
||||
ALPN.debug = true;
|
||||
|
@ -83,7 +82,7 @@ public class OpenJDK8ServerALPNProcessor implements ALPNProcessor.Server
|
|||
LOG.debug("onClosed {}", alpnConnection);
|
||||
ALPN.remove(alpnConnection.getSSLEngine());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void unsupported()
|
||||
{
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
<!-- always include the sources to be able to prepare the eclipse-jetty-SDK feature
|
||||
with a snapshot. -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
|
@ -45,12 +45,12 @@
|
|||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${bundle-symbolic-name};singleton:=true</Bundle-SymbolicName>
|
||||
<Export-Package>org.eclipse.jetty.alpn.server,*</Export-Package>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server)";resolution:=optional;cardinality:=multiple</Require-Capability>
|
||||
</instructions>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${bundle-symbolic-name};singleton:=true</Bundle-SymbolicName>
|
||||
<Export-Package>org.eclipse.jetty.alpn.server,*</Export-Package>
|
||||
<Import-Package>org.eclipse.jetty.alpn;version="${alpn.majorVersion}.${alpn.minorVersion}.${alpn.incrementalVersion}",*</Import-Package>
|
||||
<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server)";resolution:=optional;cardinality:=multiple</Require-Capability>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
|
||||
<Configure id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
DO NOT EDIT - See: https://www.eclipse.org/jetty/documentation/current/startup-modules.html
|
||||
|
||||
[description]
|
||||
Experimental CDI/Weld integration
|
||||
|
||||
[depend]
|
||||
cdi1
|
||||
alpn-impl/alpn-9
|
|
@ -20,7 +20,6 @@ package org.eclipse.jetty.alpn.server;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
import javax.net.ssl.SSLSession;
|
||||
|
||||
|
@ -44,7 +43,7 @@ public class ALPNServerConnection extends NegotiatingServerConnection
|
|||
{
|
||||
select(Collections.emptyList());
|
||||
}
|
||||
|
||||
|
||||
public void select(List<String> clientProtocols)
|
||||
{
|
||||
SSLEngine sslEngine = getSSLEngine();
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.util.Arrays;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
import javax.net.ssl.SSLEngine;
|
||||
|
||||
import org.eclipse.jetty.io.AbstractConnection;
|
||||
|
@ -45,21 +44,21 @@ public class ALPNServerConnectionFactory extends NegotiatingServerConnectionFact
|
|||
{
|
||||
this(protocols.trim().split(",", 0));
|
||||
}
|
||||
|
||||
|
||||
public ALPNServerConnectionFactory(@Name("protocols") String... protocols)
|
||||
{
|
||||
super("alpn", protocols);
|
||||
|
||||
IllegalStateException failure = new IllegalStateException("No Server ALPNProcessors!");
|
||||
// Use a for loop on iterator so load exceptions can be caught and ignored
|
||||
for (Iterator<Server> i = ServiceLoader.load(Server.class).iterator(); i.hasNext();)
|
||||
for (Iterator<Server> i = ServiceLoader.load(Server.class).iterator(); i.hasNext(); )
|
||||
{
|
||||
Server processor;
|
||||
try
|
||||
{
|
||||
processor = i.next();
|
||||
}
|
||||
catch(Throwable x)
|
||||
catch (Throwable x)
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug(x);
|
||||
|
@ -81,7 +80,7 @@ public class ALPNServerConnectionFactory extends NegotiatingServerConnectionFact
|
|||
failure.addSuppressed(x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
{
|
||||
LOG.debug("protocols: {}", Arrays.asList(protocols));
|
||||
|
@ -106,9 +105,9 @@ public class ALPNServerConnectionFactory extends NegotiatingServerConnectionFact
|
|||
return connection;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("No ALPNProcessor: {} {}",engine,endPoint);
|
||||
LOG.debug("No ALPNProcessor: {} {}", engine, endPoint);
|
||||
throw new IllegalStateException("Connection rejected: No ALPN Processor for " + engine.getClass().getName() + " from " + processors);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-project</artifactId>
|
||||
|
|
|
@ -18,12 +18,12 @@
|
|||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Import-Package>org.objectweb.asm;version="5",*</Import-Package>
|
||||
<Require-Capability>osgi.serviceloader; filter:="(osgi.serviceloader=javax.servlet.ServletContainerInitializer)";resolution:=optional;cardinality:=multiple, osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional</Require-Capability>
|
||||
</instructions>
|
||||
</configuration>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Import-Package>org.objectweb.asm;version="5",*</Import-Package>
|
||||
<Require-Capability>osgi.serviceloader; filter:="(osgi.serviceloader=javax.servlet.ServletContainerInitializer)";resolution:=optional;cardinality:=multiple, osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional</Require-Capability>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
|
||||
<Configure id="Server" class="org.eclipse.jetty.server.Server">
|
||||
<!-- =========================================================== -->
|
||||
|
|
|
@ -26,22 +26,18 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||
* DiscoverableAnnotationHandler
|
||||
*
|
||||
* Base class for handling the discovery of an annotation.
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractDiscoverableAnnotationHandler extends AbstractHandler
|
||||
{
|
||||
protected WebAppContext _context;
|
||||
|
||||
|
||||
public AbstractDiscoverableAnnotationHandler(WebAppContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
|
||||
public void addAnnotation (DiscoveredAnnotation a)
|
||||
public void addAnnotation(DiscoveredAnnotation a)
|
||||
{
|
||||
_context.getMetaData().addDiscoveredAnnotation(a);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -30,10 +30,10 @@ public class AnnotationDecorator implements Decorator
|
|||
|
||||
public AnnotationDecorator(WebAppContext context)
|
||||
{
|
||||
registerHandlers(context);
|
||||
registerHandlers(context);
|
||||
}
|
||||
|
||||
public void registerHandlers (WebAppContext context)
|
||||
|
||||
public void registerHandlers(WebAppContext context)
|
||||
{
|
||||
_introspector.registerHandler(new ResourceAnnotationHandler(context));
|
||||
_introspector.registerHandler(new ResourcesAnnotationHandler(context));
|
||||
|
@ -54,9 +54,10 @@ public class AnnotationDecorator implements Decorator
|
|||
* <li> PreDestroy </li>
|
||||
* <li> ServletSecurity? </li>
|
||||
* </ul>
|
||||
*
|
||||
* @param o the object ot introspect
|
||||
*/
|
||||
protected void introspect (Object o)
|
||||
protected void introspect(Object o)
|
||||
{
|
||||
_introspector.introspect(o.getClass());
|
||||
}
|
||||
|
@ -64,13 +65,13 @@ public class AnnotationDecorator implements Decorator
|
|||
@Override
|
||||
public Object decorate(Object o)
|
||||
{
|
||||
introspect(o);
|
||||
return o;
|
||||
introspect(o);
|
||||
return o;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy(Object o)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,14 +23,11 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* AnnotationIntrospector
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class AnnotationIntrospector
|
||||
{
|
||||
{
|
||||
protected List<IntrospectableAnnotationHandler> _handlers = new ArrayList<IntrospectableAnnotationHandler>();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* IntrospectableAnnotationHandler
|
||||
*
|
||||
|
@ -38,59 +35,56 @@ public class AnnotationIntrospector
|
|||
*/
|
||||
public interface IntrospectableAnnotationHandler
|
||||
{
|
||||
public void handle(Class<?> clazz);
|
||||
void handle(Class<?> clazz);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* AbstractIntrospectableAnnotationHandler
|
||||
*
|
||||
* Base class for handlers that introspect a class to find a particular annotation.
|
||||
* A handler can optionally introspect the parent hierarchy of a class.
|
||||
*/
|
||||
public static abstract class AbstractIntrospectableAnnotationHandler implements IntrospectableAnnotationHandler
|
||||
public abstract static class AbstractIntrospectableAnnotationHandler implements IntrospectableAnnotationHandler
|
||||
{
|
||||
private boolean _introspectAncestors;
|
||||
|
||||
|
||||
public abstract void doHandle(Class<?> clazz);
|
||||
|
||||
|
||||
|
||||
public AbstractIntrospectableAnnotationHandler(boolean introspectAncestors)
|
||||
{
|
||||
_introspectAncestors = introspectAncestors;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(Class<?> clazz)
|
||||
{
|
||||
Class<?> c = clazz;
|
||||
|
||||
|
||||
//process the whole inheritance hierarchy for the class
|
||||
while (c!=null && (!c.equals(Object.class)))
|
||||
while (c != null && (!c.equals(Object.class)))
|
||||
{
|
||||
doHandle(c);
|
||||
if (!_introspectAncestors)
|
||||
break;
|
||||
|
||||
|
||||
c = c.getSuperclass();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void registerHandler (IntrospectableAnnotationHandler handler)
|
||||
|
||||
public void registerHandler(IntrospectableAnnotationHandler handler)
|
||||
{
|
||||
_handlers.add(handler);
|
||||
}
|
||||
|
||||
public void introspect (Class<?> clazz)
|
||||
|
||||
public void introspect(Class<?> clazz)
|
||||
{
|
||||
if (_handlers == null)
|
||||
return;
|
||||
if (clazz == null)
|
||||
return;
|
||||
|
||||
for (IntrospectableAnnotationHandler handler:_handlers)
|
||||
|
||||
for (IntrospectableAnnotationHandler handler : _handlers)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -105,6 +99,5 @@ public class AnnotationIntrospector
|
|||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,8 +55,8 @@ import org.objectweb.asm.Opcodes;
|
|||
* <p>
|
||||
* Use asm to scan classes for annotations. A SAX-style parsing is done.
|
||||
* Handlers are registered which will be called back when various types of
|
||||
* entity are encountered, eg a class, a method, a field.
|
||||
* <p>
|
||||
* entity are encountered, eg a class, a method, a field.
|
||||
* <p>
|
||||
* Handlers are not called back in any particular order and are assumed
|
||||
* to be order-independent.
|
||||
* <p>
|
||||
|
@ -73,19 +73,20 @@ public class AnnotationParser
|
|||
private static final Logger LOG = Log.getLogger(AnnotationParser.class);
|
||||
private static final int ASM_OPCODE_VERSION = Opcodes.ASM7; //compatibility of api
|
||||
private static final String ASM_OPCODE_VERSION_STR = "ASM7";
|
||||
|
||||
|
||||
/**
|
||||
* Map of classnames scanned and the first location from which scan occurred
|
||||
*/
|
||||
protected Map<String, Resource> _parsedClassNames = new ConcurrentHashMap<>();
|
||||
private final int _javaPlatform;
|
||||
private int _asmVersion;
|
||||
|
||||
|
||||
/**
|
||||
* Determine the runtime version of asm.
|
||||
*
|
||||
* @return the org.objectweb.asm.Opcode matching the runtime version of asm.
|
||||
*/
|
||||
public static int asmVersion ()
|
||||
public static int asmVersion()
|
||||
{
|
||||
int asmVersion = ASM_OPCODE_VERSION;
|
||||
String version = ManifestUtils.getVersion(Opcodes.class).orElse(null);
|
||||
|
@ -138,54 +139,56 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Convert internal name to simple name
|
||||
*
|
||||
*
|
||||
* @param name the internal name
|
||||
* @return the simple name
|
||||
*/
|
||||
public static String normalize (String name)
|
||||
public static String normalize(String name)
|
||||
{
|
||||
if (name==null)
|
||||
if (name == null)
|
||||
return null;
|
||||
|
||||
if (name.startsWith("L") && name.endsWith(";"))
|
||||
name = name.substring(1, name.length()-1);
|
||||
name = name.substring(1, name.length() - 1);
|
||||
|
||||
if (name.endsWith(".class"))
|
||||
name = name.substring(0, name.length()-".class".length());
|
||||
name = name.substring(0, name.length() - ".class".length());
|
||||
|
||||
return StringUtil.replace(name,'/', '.');
|
||||
return StringUtil.replace(name, '/', '.');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert internal names to simple names.
|
||||
*
|
||||
*
|
||||
* @param list the list of internal names
|
||||
* @return the list of simple names
|
||||
*/
|
||||
public static String[] normalize (String[] list)
|
||||
public static String[] normalize(String[] list)
|
||||
{
|
||||
if (list == null)
|
||||
return null;
|
||||
return null;
|
||||
String[] normalList = new String[list.length];
|
||||
int i=0;
|
||||
int i = 0;
|
||||
for (String s : list)
|
||||
{
|
||||
normalList[i++] = normalize(s);
|
||||
}
|
||||
return normalList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Immutable information gathered by parsing class header.
|
||||
*/
|
||||
public class ClassInfo
|
||||
public class ClassInfo
|
||||
{
|
||||
final Resource _containingResource;
|
||||
final String _className;
|
||||
final int _version;
|
||||
final int _access;
|
||||
final String _signature;
|
||||
final String _superName;
|
||||
final String _superName;
|
||||
final String[] _interfaces;
|
||||
|
||||
|
||||
public ClassInfo(Resource resource, String className, int version, int access, String signature, String superName, String[] interfaces)
|
||||
{
|
||||
super();
|
||||
|
@ -240,12 +243,12 @@ public class AnnotationParser
|
|||
public class MethodInfo
|
||||
{
|
||||
final ClassInfo _classInfo;
|
||||
final String _methodName;
|
||||
final String _methodName;
|
||||
final int _access;
|
||||
final String _desc;
|
||||
final String _desc;
|
||||
final String _signature;
|
||||
final String[] _exceptions;
|
||||
|
||||
|
||||
public MethodInfo(ClassInfo classInfo, String methodName, int access, String desc, String signature, String[] exceptions)
|
||||
{
|
||||
super();
|
||||
|
@ -299,7 +302,7 @@ public class AnnotationParser
|
|||
final String _fieldType;
|
||||
final String _signature;
|
||||
final Object _value;
|
||||
|
||||
|
||||
public FieldInfo(ClassInfo classInfo, String fieldName, int access, String fieldType, String signature, Object value)
|
||||
{
|
||||
super();
|
||||
|
@ -341,24 +344,29 @@ public class AnnotationParser
|
|||
return _value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Signature for all handlers that respond to parsing class files.
|
||||
*/
|
||||
public static interface Handler
|
||||
public interface Handler
|
||||
{
|
||||
public void handle(ClassInfo classInfo);
|
||||
public void handle(MethodInfo methodInfo);
|
||||
public void handle (FieldInfo fieldInfo);
|
||||
public void handle (ClassInfo info, String annotationName);
|
||||
public void handle (MethodInfo info, String annotationName);
|
||||
public void handle (FieldInfo info, String annotationName);
|
||||
void handle(ClassInfo classInfo);
|
||||
|
||||
void handle(MethodInfo methodInfo);
|
||||
|
||||
void handle(FieldInfo fieldInfo);
|
||||
|
||||
void handle(ClassInfo info, String annotationName);
|
||||
|
||||
void handle(MethodInfo info, String annotationName);
|
||||
|
||||
void handle(FieldInfo info, String annotationName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convenience base class to provide no-ops for all Handler methods.
|
||||
*/
|
||||
public static abstract class AbstractHandler implements Handler
|
||||
public abstract static class AbstractHandler implements Handler
|
||||
{
|
||||
@Override
|
||||
public void handle(ClassInfo classInfo)
|
||||
|
@ -398,7 +406,7 @@ public class AnnotationParser
|
|||
{
|
||||
final MethodInfo _mi;
|
||||
final Set<? extends Handler> _handlers;
|
||||
|
||||
|
||||
public MyMethodVisitor(final Set<? extends Handler> handlers,
|
||||
final ClassInfo classInfo,
|
||||
final int access,
|
||||
|
@ -410,7 +418,7 @@ public class AnnotationParser
|
|||
{
|
||||
super(asmVersion);
|
||||
_handlers = handlers;
|
||||
_mi = new MethodInfo(classInfo, name, access, methodDesc,signature, exceptions);
|
||||
_mi = new MethodInfo(classInfo, name, access, methodDesc, signature, exceptions);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -420,8 +428,10 @@ public class AnnotationParser
|
|||
public AnnotationVisitor visitAnnotation(String desc, boolean visible)
|
||||
{
|
||||
String annotationName = normalize(desc);
|
||||
for (Handler h:_handlers)
|
||||
for (Handler h : _handlers)
|
||||
{
|
||||
h.handle(_mi, annotationName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -431,7 +441,7 @@ public class AnnotationParser
|
|||
* We are only interested in visiting annotations on Fields.
|
||||
*/
|
||||
public class MyFieldVisitor extends FieldVisitor
|
||||
{
|
||||
{
|
||||
final FieldInfo _fieldInfo;
|
||||
final Set<? extends Handler> _handlers;
|
||||
|
||||
|
@ -457,7 +467,9 @@ public class AnnotationParser
|
|||
{
|
||||
String annotationName = normalize(desc);
|
||||
for (Handler h : _handlers)
|
||||
h.handle(_fieldInfo, annotationName);
|
||||
{
|
||||
h.handle(_fieldInfo, annotationName);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
@ -472,7 +484,7 @@ public class AnnotationParser
|
|||
final Resource _containingResource;
|
||||
final Set<? extends Handler> _handlers;
|
||||
ClassInfo _ci;
|
||||
|
||||
|
||||
public MyClassVisitor(Set<? extends Handler> handlers, Resource containingResource, int asmVersion)
|
||||
{
|
||||
super(asmVersion);
|
||||
|
@ -482,27 +494,31 @@ public class AnnotationParser
|
|||
}
|
||||
|
||||
@Override
|
||||
public void visit (final int version,
|
||||
final int access,
|
||||
final String name,
|
||||
final String signature,
|
||||
final String superName,
|
||||
final String[] interfaces)
|
||||
{
|
||||
public void visit(final int version,
|
||||
final int access,
|
||||
final String name,
|
||||
final String signature,
|
||||
final String superName,
|
||||
final String[] interfaces)
|
||||
{
|
||||
_ci = new ClassInfo(_containingResource, normalize(name), version, access, signature, normalize(superName), normalize(interfaces));
|
||||
for (Handler h:_handlers)
|
||||
h.handle(_ci);
|
||||
for (Handler h : _handlers)
|
||||
{
|
||||
h.handle(_ci);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Visit an annotation on a Class
|
||||
*/
|
||||
@Override
|
||||
public AnnotationVisitor visitAnnotation (String desc, boolean visible)
|
||||
public AnnotationVisitor visitAnnotation(String desc, boolean visible)
|
||||
{
|
||||
String annotationName = normalize(desc);
|
||||
for (Handler h : _handlers)
|
||||
{
|
||||
h.handle(_ci, annotationName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -510,11 +526,11 @@ public class AnnotationParser
|
|||
* Visit a method to extract its annotations
|
||||
*/
|
||||
@Override
|
||||
public MethodVisitor visitMethod (final int access,
|
||||
final String name,
|
||||
final String methodDesc,
|
||||
final String signature,
|
||||
final String[] exceptions)
|
||||
public MethodVisitor visitMethod(final int access,
|
||||
final String name,
|
||||
final String methodDesc,
|
||||
final String signature,
|
||||
final String[] exceptions)
|
||||
{
|
||||
return new MyMethodVisitor(_handlers, _ci, access, name, methodDesc, signature, exceptions, _asmVersion);
|
||||
}
|
||||
|
@ -523,11 +539,11 @@ public class AnnotationParser
|
|||
* Visit a field to extract its annotations
|
||||
*/
|
||||
@Override
|
||||
public FieldVisitor visitField (final int access,
|
||||
final String fieldName,
|
||||
final String fieldType,
|
||||
final String signature,
|
||||
final Object value)
|
||||
public FieldVisitor visitField(final int access,
|
||||
final String fieldName,
|
||||
final String fieldType,
|
||||
final String signature,
|
||||
final Object value)
|
||||
{
|
||||
return new MyFieldVisitor(_handlers, _ci, access, fieldName, fieldType, signature, value, _asmVersion);
|
||||
}
|
||||
|
@ -544,66 +560,63 @@ public class AnnotationParser
|
|||
public AnnotationParser(int javaPlatform)
|
||||
{
|
||||
_asmVersion = asmVersion();
|
||||
if (javaPlatform==0)
|
||||
if (javaPlatform == 0)
|
||||
javaPlatform = JavaVersion.VERSION.getPlatform();
|
||||
_javaPlatform = javaPlatform;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public AnnotationParser(int javaPlatform, int asmVersion)
|
||||
{
|
||||
if (javaPlatform==0)
|
||||
if (javaPlatform == 0)
|
||||
javaPlatform = JavaVersion.VERSION.getPlatform();
|
||||
_javaPlatform = javaPlatform;
|
||||
if (asmVersion==0)
|
||||
if (asmVersion == 0)
|
||||
asmVersion = ASM_OPCODE_VERSION;
|
||||
_asmVersion = asmVersion;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a class as having been parsed.
|
||||
*
|
||||
*
|
||||
* @param classname the name of the class
|
||||
* @param location the fully qualified location of the class
|
||||
*/
|
||||
public void addParsedClass (String classname, Resource location)
|
||||
public void addParsedClass(String classname, Resource location)
|
||||
{
|
||||
Resource existing = _parsedClassNames.putIfAbsent(classname, location);
|
||||
Resource existing = _parsedClassNames.putIfAbsent(classname, location);
|
||||
if (existing != null)
|
||||
LOG.warn("{} scanned from multiple locations: {}, {}", classname, existing, location);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the locations of the given classname. There may be more than one
|
||||
* location if there are duplicates of the same class.
|
||||
*
|
||||
*
|
||||
* @param classname the name of the class
|
||||
* @return an immutable list of locations
|
||||
*
|
||||
* @deprecated List of duplicate locations no longer stored
|
||||
*/
|
||||
@Deprecated
|
||||
public List<String> getParsedLocations (String classname)
|
||||
public List<String> getParsedLocations(String classname)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a given class
|
||||
*
|
||||
*
|
||||
* @param handlers the set of handlers to find class
|
||||
* @param className the class name to parse
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (Set<? extends Handler> handlers, String className) throws Exception
|
||||
public void parse(Set<? extends Handler> handlers, String className) throws Exception
|
||||
{
|
||||
if (className == null)
|
||||
return;
|
||||
|
||||
String classRef = TypeUtil.toClassReference(className);
|
||||
URL resource = Loader.getResource(classRef);
|
||||
if (resource!= null)
|
||||
if (resource != null)
|
||||
{
|
||||
Resource r = Resource.newResource(resource);
|
||||
addParsedClass(className, r);
|
||||
|
@ -616,24 +629,24 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Parse the given class, optionally walking its inheritance hierarchy
|
||||
*
|
||||
* @param handlers the handlers to look for class in
|
||||
*
|
||||
* @param handlers the handlers to look for class in
|
||||
* @param clazz the class to look for
|
||||
* @param visitSuperClasses if true, also visit super classes for parse
|
||||
* @param visitSuperClasses if true, also visit super classes for parse
|
||||
* @throws Exception if unable to parse class
|
||||
*/
|
||||
public void parse (Set<? extends Handler> handlers, Class<?> clazz, boolean visitSuperClasses) throws Exception
|
||||
public void parse(Set<? extends Handler> handlers, Class<?> clazz, boolean visitSuperClasses) throws Exception
|
||||
{
|
||||
Class<?> cz = clazz;
|
||||
while (cz != Object.class)
|
||||
{
|
||||
String nameAsResource = TypeUtil.toClassReference(cz);
|
||||
URL resource = Loader.getResource(nameAsResource);
|
||||
if (resource!= null)
|
||||
if (resource != null)
|
||||
{
|
||||
Resource r = Resource.newResource(resource);
|
||||
addParsedClass(clazz.getName(), r);
|
||||
try (InputStream is = r.getInputStream())
|
||||
try (InputStream is = r.getInputStream())
|
||||
{
|
||||
scanClass(handlers, null, is);
|
||||
}
|
||||
|
@ -648,12 +661,12 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Parse the given classes
|
||||
*
|
||||
* @param handlers the set of handlers to look for class in
|
||||
*
|
||||
* @param handlers the set of handlers to look for class in
|
||||
* @param classNames the class name
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (Set<? extends Handler> handlers, String[] classNames) throws Exception
|
||||
public void parse(Set<? extends Handler> handlers, String[] classNames) throws Exception
|
||||
{
|
||||
if (classNames == null)
|
||||
return;
|
||||
|
@ -663,12 +676,12 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Parse the given classes
|
||||
*
|
||||
* @param handlers the set of handlers to look for class in
|
||||
*
|
||||
* @param handlers the set of handlers to look for class in
|
||||
* @param classNames the class names
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (Set<? extends Handler> handlers, List<String> classNames) throws Exception
|
||||
public void parse(Set<? extends Handler> handlers, List<String> classNames) throws Exception
|
||||
{
|
||||
MultiException me = new MultiException();
|
||||
|
||||
|
@ -678,7 +691,7 @@ public class AnnotationParser
|
|||
{
|
||||
String classRef = TypeUtil.toClassReference(className);
|
||||
URL resource = Loader.getResource(classRef);
|
||||
if (resource!= null)
|
||||
if (resource != null)
|
||||
{
|
||||
Resource r = Resource.newResource(resource);
|
||||
addParsedClass(className, r);
|
||||
|
@ -690,7 +703,7 @@ public class AnnotationParser
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
me.add(new RuntimeException("Error scanning class "+className, e));
|
||||
me.add(new RuntimeException("Error scanning class " + className, e));
|
||||
}
|
||||
}
|
||||
me.ifExceptionThrow();
|
||||
|
@ -698,32 +711,32 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Parse all classes in a directory
|
||||
*
|
||||
* @param handlers the set of handlers to look for classes in
|
||||
*
|
||||
* @param handlers the set of handlers to look for classes in
|
||||
* @param root the resource directory to look for classes
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
protected void parseDir (Set<? extends Handler> handlers, Resource root) throws Exception
|
||||
protected void parseDir(Set<? extends Handler> handlers, Resource root) throws Exception
|
||||
{
|
||||
if (!root.isDirectory() || !root.exists() || root.getName().startsWith("."))
|
||||
return;
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Scanning dir {}", root);
|
||||
|
||||
|
||||
File rootFile = root.getFile();
|
||||
|
||||
|
||||
MultiException me = new MultiException();
|
||||
Collection<Resource> resources = root.getAllResources();
|
||||
if (resources != null)
|
||||
{
|
||||
for (Resource r:resources)
|
||||
for (Resource r : resources)
|
||||
{
|
||||
if (r.isDirectory())
|
||||
continue;
|
||||
|
||||
File file = r.getFile();
|
||||
if (isValidClassFileName((file==null?null:file.getName())))
|
||||
File file = r.getFile();
|
||||
if (isValidClassFileName((file == null ? null : file.getName())))
|
||||
{
|
||||
Path classpath = rootFile.toPath().relativize(file.toPath());
|
||||
String str = classpath.toString();
|
||||
|
@ -735,58 +748,60 @@ public class AnnotationParser
|
|||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Scanning class {}", r);
|
||||
addParsedClass(str, r);
|
||||
try (InputStream is=r.getInputStream())
|
||||
try (InputStream is = r.getInputStream())
|
||||
{
|
||||
scanClass(handlers, Resource.newResource(file.getParentFile()), is);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Error scanning file "+file, ex);
|
||||
me.add(new RuntimeException("Error scanning file "+file,ex));
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Error scanning file " + file, ex);
|
||||
me.add(new RuntimeException("Error scanning file " + file, ex));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Skipping scan on invalid file {}", file);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Skipping scan on invalid file {}", file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
me.ifExceptionThrow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse classes in the supplied classloader.
|
||||
* Parse classes in the supplied classloader.
|
||||
* Only class files in jar files will be scanned.
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param loader the classloader for the classes
|
||||
* @param visitParents if true, visit parent classloaders too
|
||||
* @param nullInclusive if true, an empty pattern means all names match, if false, none match
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
@Deprecated
|
||||
public void parse (final Set<? extends Handler> handlers, ClassLoader loader, boolean visitParents, boolean nullInclusive) throws Exception
|
||||
public void parse(final Set<? extends Handler> handlers, ClassLoader loader, boolean visitParents, boolean nullInclusive) throws Exception
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse classes in the supplied uris.
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param uris the uris for the jars
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (final Set<? extends Handler> handlers, final URI[] uris) throws Exception
|
||||
public void parse(final Set<? extends Handler> handlers, final URI[] uris) throws Exception
|
||||
{
|
||||
if (uris==null)
|
||||
if (uris == null)
|
||||
return;
|
||||
|
||||
MultiException me = new MultiException();
|
||||
|
||||
for (URI uri:uris)
|
||||
|
||||
for (URI uri : uris)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -794,7 +809,7 @@ public class AnnotationParser
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
me.add(new RuntimeException("Problem parsing classes from "+ uri, e));
|
||||
me.add(new RuntimeException("Problem parsing classes from " + uri, e));
|
||||
}
|
||||
}
|
||||
me.ifExceptionThrow();
|
||||
|
@ -802,31 +817,31 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Parse a particular uri
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param uri the uri for the jar
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param uri the uri for the jar
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (final Set<? extends Handler> handlers, URI uri) throws Exception
|
||||
public void parse(final Set<? extends Handler> handlers, URI uri) throws Exception
|
||||
{
|
||||
if (uri == null)
|
||||
return;
|
||||
|
||||
parse (handlers, Resource.newResource(uri));
|
||||
parse(handlers, Resource.newResource(uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a resource
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param r the resource to parse
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
public void parse (final Set<? extends Handler> handlers, Resource r) throws Exception
|
||||
public void parse(final Set<? extends Handler> handlers, Resource r) throws Exception
|
||||
{
|
||||
if (r == null)
|
||||
return;
|
||||
|
||||
|
||||
if (r.exists() && r.isDirectory())
|
||||
{
|
||||
parseDir(handlers, r);
|
||||
|
@ -842,37 +857,38 @@ public class AnnotationParser
|
|||
|
||||
if (fullname.endsWith(".class"))
|
||||
{
|
||||
try (InputStream is=r.getInputStream())
|
||||
try (InputStream is = r.getInputStream())
|
||||
{
|
||||
scanClass(handlers, null, is);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (LOG.isDebugEnabled()) LOG.warn("Resource not scannable for classes: {}", r);
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.warn("Resource not scannable for classes: {}", r);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a resource that is a jar file.
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param jarResource the jar resource to parse
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
protected void parseJar (Set<? extends Handler> handlers, Resource jarResource) throws Exception
|
||||
protected void parseJar(Set<? extends Handler> handlers, Resource jarResource) throws Exception
|
||||
{
|
||||
if (jarResource == null)
|
||||
return;
|
||||
|
||||
|
||||
if (jarResource.toString().endsWith(".jar"))
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Scanning jar {}", jarResource);
|
||||
|
||||
MultiException me = new MultiException();
|
||||
try (MultiReleaseJarFile jarFile = new MultiReleaseJarFile(jarResource.getFile(),_javaPlatform,false))
|
||||
try (MultiReleaseJarFile jarFile = new MultiReleaseJarFile(jarResource.getFile(), _javaPlatform, false))
|
||||
{
|
||||
jarFile.stream().forEach(e->
|
||||
jarFile.stream().forEach(e ->
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -885,19 +901,19 @@ public class AnnotationParser
|
|||
});
|
||||
}
|
||||
me.ifExceptionThrow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a single entry in a jar file
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param entry the entry in the potentially MultiRelease jar resource to parse
|
||||
* @param jar the jar file
|
||||
* @throws Exception if unable to parse
|
||||
*/
|
||||
protected void parseJarEntry (Set<? extends Handler> handlers, Resource jar, MultiReleaseJarFile.VersionedJarEntry entry)
|
||||
throws Exception
|
||||
protected void parseJarEntry(Set<? extends Handler> handlers, Resource jar, MultiReleaseJarFile.VersionedJarEntry entry)
|
||||
throws Exception
|
||||
{
|
||||
if (jar == null || entry == null)
|
||||
return;
|
||||
|
@ -912,7 +928,7 @@ public class AnnotationParser
|
|||
if (isValidClassFileName(name) && isValidClassFilePath(name))
|
||||
{
|
||||
String shortName = StringUtil.replace(name, '/', '.').substring(0, name.length() - 6);
|
||||
addParsedClass(shortName, Resource.newResource("jar:"+jar.getURI()+"!/"+entry.getNameInJar()));
|
||||
addParsedClass(shortName, Resource.newResource("jar:" + jar.getURI() + "!/" + entry.getNameInJar()));
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Scanning class from jar {}!/{}", jar, entry);
|
||||
try (InputStream is = entry.getInputStream())
|
||||
|
@ -924,22 +940,22 @@ public class AnnotationParser
|
|||
|
||||
/**
|
||||
* Use ASM on a class
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
*
|
||||
* @param handlers the handlers to look for classes in
|
||||
* @param containingResource the dir or jar that the class is contained within, can be null if not known
|
||||
* @param is the input stream to parse
|
||||
* @throws IOException if unable to parse
|
||||
*/
|
||||
protected void scanClass (Set<? extends Handler> handlers, Resource containingResource, InputStream is) throws IOException
|
||||
protected void scanClass(Set<? extends Handler> handlers, Resource containingResource, InputStream is) throws IOException
|
||||
{
|
||||
ClassReader reader = new ClassReader(is);
|
||||
reader.accept(new MyClassVisitor(handlers, containingResource, _asmVersion), ClassReader.SKIP_CODE|ClassReader.SKIP_DEBUG|ClassReader.SKIP_FRAMES);
|
||||
reader.accept(new MyClassVisitor(handlers, containingResource, _asmVersion), ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove any parsed class names.
|
||||
*/
|
||||
public void resetParsedClasses ()
|
||||
public void resetParsedClasses()
|
||||
{
|
||||
_parsedClassNames.clear();
|
||||
}
|
||||
|
@ -952,39 +968,43 @@ public class AnnotationParser
|
|||
* <li> it isn't a dot file or in a hidden directory </li>
|
||||
* <li> the name of the class at least begins with a valid identifier for a class name </li>
|
||||
* </ul>
|
||||
*
|
||||
* @param name the class file name
|
||||
* @return whether the class file name is valid
|
||||
*/
|
||||
private boolean isValidClassFileName (String name)
|
||||
private boolean isValidClassFileName(String name)
|
||||
{
|
||||
//no name cannot be valid
|
||||
if (name == null || name.length()==0)
|
||||
if (name == null || name.length() == 0)
|
||||
return false;
|
||||
|
||||
//skip anything that is not a class file
|
||||
String lc = name.toLowerCase(Locale.ENGLISH);
|
||||
if (!lc.endsWith(".class"))
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Not a class: {}",name);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Not a class: {}", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (lc.equals("module-info.class"))
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Skipping module-info.class");
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Skipping module-info.class");
|
||||
return false;
|
||||
}
|
||||
|
||||
//skip any classfiles that are not a valid java identifier
|
||||
int c0 = 0;
|
||||
int ldir = name.lastIndexOf('/', name.length()-6);
|
||||
c0 = (ldir > -1 ? ldir+1 : c0);
|
||||
int c0 = 0;
|
||||
int ldir = name.lastIndexOf('/', name.length() - 6);
|
||||
c0 = (ldir > -1 ? ldir + 1 : c0);
|
||||
if (!Character.isJavaIdentifierStart(name.charAt(c0)))
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Not a java identifier: {}",name);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Not a java identifier: {}", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -994,16 +1014,17 @@ public class AnnotationParser
|
|||
* @param path the class file path
|
||||
* @return whether the class file path is valid
|
||||
*/
|
||||
private boolean isValidClassFilePath (String path)
|
||||
private boolean isValidClassFilePath(String path)
|
||||
{
|
||||
//no path is not valid
|
||||
if (path == null || path.length()==0)
|
||||
if (path == null || path.length() == 0)
|
||||
return false;
|
||||
|
||||
// skip any classfiles that are in a hidden directory
|
||||
if (path.startsWith(".") || path.contains("/."))
|
||||
{
|
||||
if (LOG.isDebugEnabled()) LOG.debug("Contains hidden dirs: " + path);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Contains hidden dirs: " + path);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue