Commits

Stephen McKamey committed aa282e0

streamlining and cleaning up. rev 0.4.0

Comments (0)

Files changed (22)

 	mvn archetype:generate \
 		-DarchetypeGroupId=org.duelengine \
 		-DarchetypeArtifactId=war-bootstrap-archetype \
-		-DarchetypeVersion=0.3.3
+		-DarchetypeVersion=0.4.0
 
 	# build your boostrap
 	# NOTE: replace "bootstrap" with your chosen project name
 
 	# run the resulting WAR on the test bootstrap
 	# NOTE: again replace with your chosen artifact names
-	java -jar bootstrap/target/bootstrap.jar -p 8080 --tomcat -war /myapp='path/to/myapp.war'
+	java -jar bootstrap/target/bootstrap.jar -p 8080 --tomcat \
+		-war /=path/to/root.war \
+		-war /myapp=path/to/myapp.war
+
+JSP in Tomcat
+-------------
+
+If you want to support JSP within Tomcat, **uncomment** the `org.apache.tomcat.embed:tomcat-embed-jasper` dependency (it is commented out by default). Otherwise, it will load a lighter set of resources.
+
+Glassfish 3.1
+-------------
+
+There is a conflict between the classes in embedded Glassfish and embedded Tomcat. As a result, the `pom.xml` needs to be modified to include/exclude the dependencies for one or the other. Currently, this defaults to Tomcat.
+
+NOTE: there seems to be an issue with the Glassfish configuration as it isn't correctly loading anymore.

war-bootstrap-archetype/pom.xml

 
 	<groupId>org.duelengine</groupId>
 	<artifactId>war-bootstrap-archetype</artifactId>
-	<version>0.3.3</version>
+	<version>0.4.0</version>
 	<packaging>maven-archetype</packaging>
 
 	<name>WAR Bootstrap Archetype</name>

war-bootstrap-archetype/src/main/resources/archetype-resources/pom.xml

 			 order appears to matter and also
 			 must set scope to provided if not used -->
 
+		<!-- Tomcat 7 embedded runtime -->
+		<dependency>
+			<groupId>org.apache.tomcat.embed</groupId>
+			<artifactId>tomcat-embed-core</artifactId>
+			<version>${tomcat.version}</version>
+			<!-- <scope>compile</scope> --><!-- comment this for TC7 -->
+		</dependency>
+
+		<!-- Tomcat 7 logging -->
+		<dependency>
+			<groupId>org.apache.tomcat.embed</groupId>
+			<artifactId>tomcat-embed-logging-juli</artifactId>
+			<version>${tomcat.version}</version>
+			<!-- <scope>compile</scope> --><!-- comment this for TC7 -->
+		</dependency>
+
+		<!-- Tomcat 7 JSP (Uncomment to support Tomcat JSP) -->
+<!--
+		<dependency>
+			<groupId>org.apache.tomcat.embed</groupId>
+			<artifactId>tomcat-embed-jasper</artifactId>
+			<version>${tomcat.version}</version>
+		</dependency>
+ -->
+
 		<!-- Jetty 7/8 embedded runtime -->
 		<dependency>
 			<groupId>org.eclipse.jetty.aggregate</groupId>
 			<groupId>org.glassfish.extras</groupId>
 			<artifactId>glassfish-embedded-web</artifactId>
 			<version>${glassfish.version}</version>
-			<scope>provided</scope><!-- comment this for GF3 -->
-		</dependency>
-
-		<!-- Tomcat 7 embedded runtime -->
-		<dependency>
-			<groupId>org.apache.tomcat.embed</groupId>
-			<artifactId>tomcat-embed-core</artifactId>
-			<version>${tomcat.version}</version>
-			<!--scope>compile</scope--><!-- comment this for TC7 -->
-		</dependency>
-
-		<!-- Tomcat 7 JSP -->
-		<dependency>
-			<groupId>org.apache.tomcat.embed</groupId>
-			<artifactId>tomcat-embed-jasper</artifactId>
-			<version>${tomcat.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<!-- Tomcat 7 logging -->
-		<dependency>
-			<groupId>org.apache.tomcat.embed</groupId>
-			<artifactId>tomcat-embed-logging-juli</artifactId>
-			<version>${tomcat.version}</version>
-			<scope>compile</scope>
+			<scope>compile</scope><!-- comment this for GF3 -->
 		</dependency>
 
 		<!-- SLF4J runtime -->
 		<dependency>
+			<groupId>com.pseudocode</groupId>
+			<artifactId>slf4j-compact</artifactId>
+			<version>${slf4j.version}</version>
+		</dependency>
+		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
 			<version>${slf4j.version}</version>

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/GlassFishServletServer.java

 			throw new IllegalStateException("Web server is already running.");
 		}
 
+		// https://wikis.oracle.com/display/GlassFish/3.1EmbeddedOnePager#3.1EmbeddedOnePager-4.1.Details%3A
 		GlassFishProperties gfProps = new GlassFishProperties();
 		if (httpPort > 0) {
 			gfProps.setPort("http-listener", httpPort);
 //		}
 
 		server = GlassFishRuntime.bootstrap().newGlassFish(gfProps);
+		server.start();
 
 		for (String contextPath : contexts.keySet()) {
-			File war = new File(contexts.get(contextPath));
+			String warPath = contexts.get(contextPath);
+
+			File war = new File(warPath);
 			Deployer deployer = server.getDeployer();
 			deployer.deploy(war, "--name="+war.getName(), "--contextroot="+contextPath, "--force=true");
 		}
-
-		server.start();
 	}
 
 	public void stop() throws Exception {

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/MinimalLifecycleListener.java

+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package ${package};
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.Wrapper;
+
+class MinimalLifecycleListener implements LifecycleListener{
+	private static final String MIME_TYPES_RESOURCE = "/MIMETypes.properties";
+	private final Properties MIME_TYPES;
+
+	public MinimalLifecycleListener() {
+		MIME_TYPES = new Properties();
+		try {
+			InputStream stream = MinimalLifecycleListener.class.getResourceAsStream(MIME_TYPES_RESOURCE);
+			MIME_TYPES.load(stream);
+
+		} catch (IOException ex) {
+			ex.printStackTrace();
+		}
+	}
+	
+	@Override
+	public void lifecycleEvent(LifecycleEvent event) {
+		if (!Lifecycle.BEFORE_START_EVENT.equals(event.getType())) {
+			return;
+		}
+
+		Context cx = (Context)event.getLifecycle();
+
+		// default servlet
+		Wrapper servlet = cx.createWrapper();
+		servlet.setName("default");
+		servlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
+		servlet.setLoadOnStartup(1);
+		cx.addChild(servlet);
+
+		// servlet mappings
+		cx.addServletMapping("/", "default");
+
+		// MIME mappings
+		for (String extension : MIME_TYPES.stringPropertyNames()) {
+			String mimeType = MIME_TYPES.getProperty(extension);
+			cx.addMimeMapping(extension, mimeType);
+		}
+
+		// welcome files
+		cx.addWelcomeFile("index.html");
+	}
+}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/TomcatServletServer.java

 import java.util.Deque;
 import java.util.Map;
 
+import org.apache.catalina.LifecycleListener;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.startup.ContextConfig;
 import org.apache.catalina.startup.Tomcat;
 		server.setBaseDir(tmpDir.getCanonicalPath());
 		server.setPort(httpPort);
 
-//		server.addWebapp(contextPath, warPath);
+		boolean loadJSP = getClass().getResource("/javax/servlet/jsp/resources/jsp_2_0.xsd") != null;
+
+		LifecycleListener minListener = loadJSP ? null : new MinimalLifecycleListener();
 
 		for (String contextPath : contexts.keySet()) {
-			StandardContext ctx = new StandardContext();
-			ctx.setPath(contextPath);
-			ctx.setDocBase(contexts.get(contextPath));
+			String warPath = contexts.get(contextPath);
 
-			ctx.addLifecycleListener(new Tomcat.DefaultWebXmlListener());
+			if (loadJSP) {
+				// alternatively do this to include JSP
+				server.addWebapp(contextPath, warPath);
 
-			ContextConfig ctxCfg = new ContextConfig();
-			ctx.addLifecycleListener(ctxCfg);
+			} else {
+				StandardContext cx = new StandardContext();
+				cx.setPath(contextPath);
+				cx.setDocBase(warPath);
 
-			// prevent it from looking ( if it finds one - it'll have dup error )
-			ctxCfg.setDefaultWebXml("org/apache/catalin/startup/NO_DEFAULT_XML");
+				cx.addLifecycleListener(minListener);
 
-			server.getHost().addChild(ctx);
+				ContextConfig cxCfg = new ContextConfig();
+				cx.addLifecycleListener(cxCfg);
+
+				// prevent it from looking (if it finds one, it'll have dup error)
+				// "org/apache/catalin/startup/NO_DEFAULT_XML"
+				cxCfg.setDefaultWebXml(server.noDefaultWebXmlPath());
+
+				server.getHost().addChild(cx);
+			}
 		}
 
 		server.start();

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/logging/CompactLogger.java

-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package ${package}.logging;
-
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-import org.slf4j.helpers.MarkerIgnoringBase;
-
-@SuppressWarnings("serial")
-public class CompactLogger extends MarkerIgnoringBase {
-
-	private static final String TRACE = "[TRACE] ";
-	private static final String DEBUG = "[DEBUG] ";
-	private static final String INFO = "[INFO] ";
-	private static final String WARN = "[WARNING] ";
-	private static final String ERROR = "[ERROR] ";
-
-	private final PrintStream writer;
-
-	public CompactLogger(String name, OutputStream output) {
-		this.name = name;
-
-		if (output == null) {
-			this.writer = System.out;
-
-		} else if (output instanceof PrintStream) {
-			this.writer = (PrintStream)output;
-
-		} else {
-			this.writer = new PrintStream(output, true);
-		}
-	}
-
-	@Override
-	public boolean isTraceEnabled() {
-		return CompactLoggerFactory.isTraceEnabled();
-	}
-
-	@Override
-	public boolean isDebugEnabled() {
-		return CompactLoggerFactory.isDebugEnabled();
-	}
-
-	@Override
-	public boolean isInfoEnabled() {
-		return CompactLoggerFactory.isInfoEnabled();
-	}
-
-	@Override
-	public boolean isWarnEnabled() {
-		return CompactLoggerFactory.isWarnEnabled();
-	}
-
-	@Override
-	public boolean isErrorEnabled() {
-		return CompactLoggerFactory.isErrorEnabled();
-	}
-
-	protected void write(String label, String msg) {
-		writer.println(label+msg);
-	}
-
-	protected void write(String label, String format, Object arg1) {
-		writer.format(label+format, arg1);
-		writer.println();
-	}
-
-	protected void write(String label, String format, Object arg1, Object arg2) {
-		writer.format(label+format, arg1, arg2);
-		writer.println();
-	}
-
-	protected void write(String label, String format, Object[] args) {
-		writer.format(label+format, args);
-		writer.println();
-	}
-
-	protected void write(String label, String msg, Throwable t) {
-		writer.println(label+msg);
-		writer.println(t.toString());
-	}
-
-	@Override
-	public void trace(String msg) {
-		if (isTraceEnabled()) {
-			write(TRACE, msg);
-		}
-	}
-
-	@Override
-	public void trace(String msg, Object arg1) {
-		if (isTraceEnabled()) {
-			write(TRACE, msg, arg1);
-		}
-	}
-
-	@Override
-	public void trace(String msg, Object arg1, Object arg2) {
-		if (isTraceEnabled()) {
-			write(TRACE, msg, arg1, arg2);
-		}
-	}
-
-	@Override
-	public void trace(String msg, Object[] args) {
-		if (isTraceEnabled()) {
-			write(TRACE, msg, args);
-		}
-	}
-
-	@Override
-	public void trace(String msg, Throwable t) {
-		if (isTraceEnabled()) {
-			write(TRACE, msg, t);
-		}
-	}
-
-	@Override
-	public void debug(String msg) {
-		if (isDebugEnabled()) {
-			write(DEBUG, msg);
-		}
-	}
-
-	@Override
-	public void debug(String format, Object arg1) {
-		if (isDebugEnabled()) {
-			write(DEBUG, format, arg1);
-		}
-	}
-
-	@Override
-	public void debug(String format, Object arg1, Object arg2) {
-		if (isDebugEnabled()) {
-			write(DEBUG, format, arg1, arg2);
-		}
-	}
-
-	@Override
-	public void debug(String format, Object[] args) {
-		if (isDebugEnabled()) {
-			write(DEBUG, format, args);
-		}
-	}
-
-	@Override
-	public void debug(String msg, Throwable t) {
-		if (isDebugEnabled()) {
-			write(DEBUG, msg, t);
-		}
-	}
-
-	@Override
-	public void info(String msg) {
-		if (isInfoEnabled()) {
-			write(INFO, msg);
-		}
-	}
-
-	@Override
-	public void info(String format, Object arg1) {
-		if (isInfoEnabled()) {
-			write(INFO, format, arg1);
-		}
-	}
-
-	@Override
-	public void info(String format, Object arg1, Object arg2) {
-		if (isInfoEnabled()) {
-			write(INFO, format, arg1, arg2);
-		}
-	}
-
-	@Override
-	public void info(String format, Object[] args) {
-		if (isInfoEnabled()) {
-			write(INFO, format, args);
-		}
-	}
-
-	@Override
-	public void info(String msg, Throwable t) {
-		if (isInfoEnabled()) {
-			write(INFO, msg, t);
-		}
-	}
-
-	@Override
-	public void warn(String msg) {
-		if (isWarnEnabled()) {
-			write(WARN, msg);
-		}
-	}
-
-	@Override
-	public void warn(String format, Object arg1) {
-		if (isWarnEnabled()) {
-			write(WARN, format, arg1);
-		}
-	}
-
-	@Override
-	public void warn(String format, Object arg1, Object arg2) {
-		if (isWarnEnabled()) {
-			write(WARN, format, arg1, arg2);
-		}
-	}
-
-	@Override
-	public void warn(String format, Object[] args) {
-		if (isWarnEnabled()) {
-			write(WARN, format, args);
-		}
-	}
-
-	@Override
-	public void warn(String msg, Throwable t) {
-		if (isWarnEnabled()) {
-			write(WARN, msg, t);
-		}
-	}
-
-	@Override
-	public void error(String msg) {
-		if (isErrorEnabled()) {
-			write(ERROR, msg);
-		}
-	}
-
-	@Override
-	public void error(String format, Object arg1) {
-		if (isErrorEnabled()) {
-			write(ERROR, format, arg1);
-		}
-	}
-
-	@Override
-	public void error(String format, Object arg1, Object arg2) {
-		if (isErrorEnabled()) {
-			write(ERROR, format, arg1, arg2);
-		}
-	}
-
-	@Override
-	public void error(String format, Object[] args) {
-		if (isErrorEnabled()) {
-			write(ERROR, format, args);
-		}
-	}
-
-	@Override
-	public void error(String msg, Throwable t) {
-		if (isErrorEnabled()) {
-			write(ERROR, msg, t);
-		}
-	}
-}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/logging/CompactLoggerFactory.java

-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package ${package}.logging;
-
-import java.io.OutputStream;
-
-import org.slf4j.ILoggerFactory;
-import org.slf4j.Logger;
-
-public class CompactLoggerFactory implements ILoggerFactory {
-
-	// set up logging defaults
-	private static boolean isTraceEnabled = false;
-	private static boolean isDebugEnabled = false;
-	private static boolean isInfoEnabled = true;
-	private static boolean isWarnEnabled = true;
-	private static boolean isErrorEnabled = true;
-
-	private static OutputStream output;
-
-	public static void setLoggerOutput(OutputStream output) {
-		CompactLoggerFactory.output = output;
-	}
-
-	@Override
-	public Logger getLogger(String name) {
-		return new CompactLogger(name, output);
-	}
-
-	public static boolean isTraceEnabled() {
-		return isTraceEnabled;
-	}
-
-	public static void setTraceEnabled(boolean value) {
-		isTraceEnabled = value;
-	}
-
-	public static boolean isDebugEnabled() {
-		return isDebugEnabled;
-	}
-
-	public static void setDebugEnabled(boolean value) {
-		isDebugEnabled = value;
-	}
-
-	public static boolean isInfoEnabled() {
-		return isInfoEnabled;
-	}
-
-	public static void setInfoEnabled(boolean value) {
-		isInfoEnabled = value;
-	}
-
-	public static boolean isWarnEnabled() {
-		return isWarnEnabled;
-	}
-
-	public static void setWarnEnabled(boolean value) {
-		isWarnEnabled = value;
-	}
-
-	public static boolean isErrorEnabled() {
-		return isErrorEnabled;
-	}
-
-	public static void setErrorEnabled(boolean value) {
-		isErrorEnabled = value;
-	}
-}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/org/slf4j/impl/StaticLoggerBinder.java

-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-package org.slf4j.impl;
-
-import org.slf4j.ILoggerFactory;
-import org.slf4j.LoggerFactory;
-import org.slf4j.spi.LoggerFactoryBinder;
-
-import ${package}.logging.CompactLoggerFactory;
-
-/**
- * The binding of {@link LoggerFactory} class with an actual instance of
- * {@link ILoggerFactory} is performed using information returned by this class.
- */
-public class StaticLoggerBinder implements LoggerFactoryBinder {
-
-	/**
-	 * The unique instance of this class.
-	 * 
-	 */
-	private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
-	
-	/**
-	 * Return the singleton of this class.
-	 * 
-	 * @return the StaticLoggerBinder singleton
-	 */
-	public static final StaticLoggerBinder getSingleton() {
-		return SINGLETON;
-	}
-
-	/**
-	 * Declare the version of the SLF4J API this implementation is compiled
-	 * against. The value of this field is usually modified with each release.
-	 */
-	// to avoid constant folding by the compiler, this field must *not* be final
-	public static String REQUESTED_API_VERSION = "1.6";	 // !final
-	
-	private static final String loggerFactoryClassStr = CompactLoggerFactory.class.getName();
-
-	/**
-	 * The ILoggerFactory instance returned by the {@link #getLoggerFactory}
-	 * method should always be the same object
-	 */
-	private final ILoggerFactory loggerFactory;
-	
-	private StaticLoggerBinder() {
-		loggerFactory = new CompactLoggerFactory();
-	}
-	
-	public ILoggerFactory getLoggerFactory() {
-		return loggerFactory;
-	}
-	
-	public String getLoggerFactoryClassStr() {
-		return loggerFactoryClassStr;
-	}		
-}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/org/slf4j/impl/StaticMDCBinder.java

-package org.slf4j.impl;
-
-import org.slf4j.helpers.NOPMDCAdapter;
-import org.slf4j.spi.MDCAdapter;
-
-/**
- * This implementation is bound to {@link NOPMDCAdapter}.
- */
-public class StaticMDCBinder {
-
-	/**
-	 * The unique instance of this class.
-	 */
-	public static final StaticMDCBinder SINGLETON = new StaticMDCBinder();
-
-	private StaticMDCBinder() {}
-	
-	/**
-	 * Currently this method always returns an instance of 
-	 * {@link StaticMDCBinder}.
-	 */
-	public MDCAdapter getMDCA() {
-		 return new NOPMDCAdapter();
-	}
-	
-	public String getMDCAdapterClassStr() {
-		return NOPMDCAdapter.class.getName();
-	}
-}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/java/org/slf4j/impl/StaticMarkerBinder.java

-package org.slf4j.impl;
-
-import org.slf4j.IMarkerFactory;
-import org.slf4j.MarkerFactory;
-import org.slf4j.helpers.BasicMarkerFactory;
-import org.slf4j.spi.MarkerFactoryBinder;
-
-/**
- * 
- * The binding of {@link MarkerFactory} class with an actual instance of 
- * {@link IMarkerFactory} is performed using information returned by this class. 
- */
-public class StaticMarkerBinder implements MarkerFactoryBinder {
-
-	/**
-	 * The unique instance of this class.
-	 */
-	public static final StaticMarkerBinder SINGLETON = new StaticMarkerBinder();
-	
-	final IMarkerFactory markerFactory = new BasicMarkerFactory();
-	
-	private StaticMarkerBinder() {}
-	
-	/**
-	 * Currently this method always returns an instance of 
-	 * {@link BasicMarkerFactory}.
-	 */
-	public IMarkerFactory getMarkerFactory() {
-		return markerFactory;
-	}
-	
-	/**
-	 * Currently, this method returns the class name of
-	 * {@link BasicMarkerFactory}.
-	 */
-	public String getMarkerFactoryClassStr() {
-		return BasicMarkerFactory.class.getName();
-	}
-}

war-bootstrap-archetype/src/main/resources/archetype-resources/src/main/resources/MIMETypes.properties

+# Manual merge of default MIME types from Apache Tomcat 7.0.29 & MimeUtils 1.0.912.1521
+# http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/conf/web.xml
+# http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java
+# http://code.google.com/p/mime-utils/source/browse/trunk/MimeUtils/MimeUtils/MimeTypes.xml
+# -------------------------------------------------------------------------------------------------
+123=application/vnd.lotus-1-2-3
+323=text/h323
+3dml=text/vnd.in3d.3dml
+3g2=video/3gpp2
+3gp=video/3gpp
+7z=application/x-7z-compressed
+aab=application/x-authorware-bin
+aac=audio/x-aac
+aaf=application/octet-stream
+aam=application/x-authorware-map
+aas=application/x-authorware-seg
+abs=audio/x-mpeg
+abw=application/x-abiword
+ac=application/pkix-attr-cert
+aca=application/octet-stream
+acadb=application/x-msaccess
+acade=application/x-msaccess
+acadt=application/x-msaccess
+acc=application/vnd.americandynamics.acc
+ace=application/x-ace-compressed
+acu=application/vnd.acucobol
+acutc=application/vnd.acucorp
+acx=application/internet-property-stream
+adp=audio/adpcm
+aep=application/vnd.audiograph
+afm=application/x-font-type1
+afp=application/vnd.ibm.modcap
+ahead=application/vnd.ahead.space
+ai=application/postscript
+ai=application/postscript
+aif=audio/x-aiff
+aifc=audio/x-aiff
+aiff=audio/x-aiff
+aim=application/x-aim
+air=application/vnd.adobe.air-application-installer-package+zip
+ait=application/vnd.dvb.ait
+ami=application/vnd.amiga.ami
+anx=application/annodex
+apk=application/vnd.android.package-archive
+application=application/x-ms-application
+apr=application/vnd.lotus-approach
+art=image/x-jg
+asc=application/pgp-signature
+ascx=text/plain
+asd=application/octet-stream
+asf=video/x-ms-asf
+ashx=text/plain
+asi=application/octet-stream
+asm=text/x-asm
+asmx=text/plain
+aso=application/vnd.accpac.simply.aso
+aspx=text/plain
+asr=video/x-ms-asf
+asx=video/x-ms-asf
+atc=application/vnd.acucorp
+atom=application/atom+xml
+atomcat=application/atomcat+xml
+atomsvc=application/atomsvc+xml
+atx=application/vnd.antix.game-component
+au=audio/basic
+avi=video/x-msvideo
+avx=video/x-rad-screenplay
+aw=application/applixware
+axa=audio/annodex
+axs=application/olescript
+axv=video/annodex
+axv=video/annodex
+azf=application/vnd.airzip.filesecure.azf
+azs=application/vnd.airzip.filesecure.azs
+azw=application/vnd.amazon.ebook
+bas=text/plain
+bat=application/x-msdownload
+bcpio=application/x-bcpio
+bdf=application/x-font-bdf
+bdm=application/vnd.syncml.dm+wbxml
+bed=application/vnd.realvnc.bed
+bh2=application/vnd.fujitsu.oasysprs
+bin=application/octet-stream
+bmi=application/vnd.bmi
+bmp=image/bmp
+body=text/html
+book=application/vnd.framemaker
+box=application/vnd.previewsystems.box
+boz=application/x-bzip2
+bpk=application/octet-stream
+browser=text/plain
+btif=image/prs.btif
+bz2=application/x-bzip2
+bz=application/x-bzip
+c11amc=application/vnd.cluetrust.cartomobile-config
+c11amz=application/vnd.cluetrust.cartomobile-config-pkg
+c4d=application/vnd.clonk.c4group
+c4f=application/vnd.clonk.c4group
+c4g=application/vnd.clonk.c4group
+c4p=application/vnd.clonk.c4group
+c4u=application/vnd.clonk.c4group
+c=text/x-c
+cab=application/vnd.ms-cab-compressed
+calx=application/vnd.ms-office.calx
+cap=application/vnd.tcpdump.pcap
+car=application/vnd.curl.car
+cat=application/vnd.ms-pki.seccat
+cc=text/x-c
+cct=application/x-director
+ccxml=application/ccxml+xml
+cda=audio/wav
+cdbcmsg=application/vnd.contact.cmsg
+cdf=application/x-cdf
+cdkey=application/vnd.mediastation.cdkey
+cdmia=application/cdmi-capability
+cdmic=application/cdmi-container
+cdmid=application/cdmi-domain
+cdmio=application/cdmi-object
+cdmiq=application/cdmi-queue
+cdx=chemical/x-cdx
+cdxml=application/vnd.chemdraw+xml
+cdy=application/vnd.cinderella
+cer=application/pkix-cert
+cgm=image/cgm
+chat=application/x-chat
+chm=application/vnd.ms-htmlhelp
+chrt=application/vnd.kde.kchart
+cif=chemical/x-cif
+cii=application/vnd.anser-web-certificate-issue-initiation
+cil=application/vnd.ms-artgalry
+cla=application/vnd.claymore
+class=application/java
+clkk=application/vnd.crick.clicker.keyboard
+clkp=application/vnd.crick.clicker.palette
+clkt=application/vnd.crick.clicker.template
+clkw=application/vnd.crick.clicker.wordbank
+clkx=application/vnd.crick.clicker
+clp=application/x-msclip
+clp=application/x-msclip
+cmc=application/vnd.cosmocaller
+cmdf=chemical/x-cmdf
+cml=chemical/x-cml
+cmp=application/vnd.yellowriver-custom-menu
+cmx=image/x-cmx
+cnf=text/plain
+cod=application/vnd.rim.cod
+com=application/x-msdownload
+conf=text/plain
+config=application/xml
+cpio=application/x-cpio
+cpp=text/x-c
+cpt=application/mac-compactpro
+crd=application/x-mscardfile
+crd=application/x-mscardfile
+crl=application/pkix-crl
+crt=application/x-x509-ca-cert
+cryptonote=application/vnd.rig.cryptonote
+cs=text/plain
+csh=application/x-csh
+csml=chemical/x-csml
+csp=application/vnd.commonspace
+csproj=application/xml
+css=text/css
+cst=application/x-director
+csv=text/csv
+cu=application/cu-seeme
+cur=application/octet-stream
+curl=text/vnd.curl
+cww=application/prs.cww
+cxt=application/x-director
+cxx=text/x-c
+dae=model/vnd.collada+xml
+daf=application/vnd.mobius.daf
+dataless=application/vnd.fdsn.seed
+davmount=application/davmount+xml
+dcr=application/x-director
+dcurl=text/vnd.curl.dcurl
+dd2=application/vnd.oma.dd2+xml
+ddd=application/vnd.fujixerox.ddd
+deb=application/x-debian-package
+def=text/plain
+deploy=application/octet-stream
+der=application/x-x509-ca-cert
+dfac=application/vnd.dreamfactory
+dib=image/bmp
+dic=text/x-c
+dir=application/x-director
+dis=application/vnd.mobius.dis
+disco=application/xml
+dist=application/octet-stream
+distz=application/octet-stream
+djv=image/vnd.djvu
+djvu=image/vnd.djvu
+dll=application/x-msdownload
+dlm=text/dlm
+dmg=application/octet-stream
+dmp=application/vnd.tcpdump.pcap
+dms=application/octet-stream
+dna=application/vnd.dna
+doc=application/msword
+docm=application/vnd.ms-word.document.macroenabled.12
+docx=application/vnd.openxmlformats-officedocument.wordprocessingml.document
+dot=application/msword
+dotm=application/vnd.ms-word.template.macroenabled.12
+dotx=application/vnd.openxmlformats-officedocument.wordprocessingml.template
+dp=application/vnd.osgi.dp
+dpg=application/vnd.dpgraph
+dra=audio/vnd.dra
+dsc=text/prs.lines.tag
+dsp=application/octet-stream
+dssc=application/dssc+der
+dtb=application/x-dtbook+xml
+dtd=application/xml-dtd
+dts=audio/vnd.dts
+dtshd=audio/vnd.dts.hd
+duel=text/x-duel-source
+dump=application/octet-stream
+dv=video/x-dv
+dv=video/x-dv
+dvb=video/vnd.dvb.file
+dvi=application/x-dvi
+dvr-ms=application/vnd.ms-dvr
+dwf=drawing/x-dwf
+dwf=model/vnd.dwf
+dwg=image/vnd.dwg
+dwp=application/octet-stream
+dxf=image/vnd.dxf
+dxp=application/vnd.spotfire.dxp
+dxr=application/x-director
+dxr=application/x-director
+ecelp4800=audio/vnd.nuera.ecelp4800
+ecelp7470=audio/vnd.nuera.ecelp7470
+ecelp9600=audio/vnd.nuera.ecelp9600
+ecma=application/ecmascript
+edm=application/vnd.novadigm.edm
+edx=application/vnd.novadigm.edx
+efif=application/vnd.picsel
+ei6=application/vnd.pg.osasli
+elc=application/octet-stream
+eml=message/rfc822
+eml=message/rfc822
+emma=application/emma+xml
+emz=application/octet-stream
+eol=audio/vnd.digital-winds
+eot=application/vnd.ms-fontobject
+eps=application/postscript
+epub=application/epub+zip
+es3=application/vnd.eszigno3+xml
+esf=application/vnd.epson.esf
+et3=application/vnd.eszigno3+xml
+etx=text/x-setext
+etx=text/x-setext
+evy=application/envoy
+exe=application/octet-stream
+exi=application/exi
+ext=application/vnd.novadigm.ext
+ez2=application/vnd.ezpix-album
+ez3=application/vnd.ezpix-package
+ez=application/andrew-inset
+f4v=video/x-f4v
+f77=text/x-fortran
+f90=text/x-fortran
+f=text/x-fortran
+fbs=image/vnd.fastbidsheet
+fcs=application/vnd.isac.fcs
+fdf=application/vnd.fdf
+fe_launch=application/vnd.denovo.fcselayout-link
+fg5=application/vnd.fujitsu.oasysgp
+fgd=application/x-director
+fh4=image/x-freehand
+fh5=image/x-freehand
+fh7=image/x-freehand
+fh=image/x-freehand
+fhc=image/x-freehand
+fif=application/fractals
+fig=application/x-xfig
+fla=application/octet-stream
+flac=audio/flac
+fli=video/x-fli
+flo=application/vnd.micrografx.flo
+flr=x-world/x-vrml
+flv=video/x-flv
+flw=application/vnd.kde.kivio
+flx=text/vnd.fmi.flexstor
+fly=text/vnd.fly
+fm=application/vnd.framemaker
+fnc=application/vnd.frogans.fnc
+for=text/x-fortran
+fpx=image/vnd.fpx
+frame=application/vnd.framemaker
+fsc=application/vnd.fsc.weblaunch
+fst=image/vnd.fst
+ftc=application/vnd.fluxtime.clip
+fti=application/vnd.anser-web-funds-transfer-initiation
+fvt=video/vnd.fvt
+fxp=application/vnd.adobe.fxp
+fxpl=application/vnd.adobe.fxp
+fzs=application/vnd.fuzzysheet
+g2w=application/vnd.geoplan
+g3=image/g3fax
+g3w=application/vnd.geospace
+gac=application/vnd.groove-account
+gbr=application/rpki-ghostbusters
+gdl=model/vnd.gdl
+geo=application/vnd.dynageo
+gex=application/vnd.geometry-explorer
+ggb=application/vnd.geogebra.file
+ggt=application/vnd.geogebra.tool
+ghf=application/vnd.groove-help
+gif=image/gif
+gim=application/vnd.groove-identity-message
+gmx=application/vnd.gmx
+gnumeric=application/x-gnumeric
+gph=application/vnd.flographit
+gqf=application/vnd.grafeq
+gqs=application/vnd.grafeq
+gram=application/srgs
+gre=application/vnd.geometry-explorer
+grv=application/vnd.groove-injector
+grxml=application/srgs+xml
+gsf=application/x-font-ghostscript
+gtar=application/x-gtar
+gtm=application/vnd.groove-tool-message
+gtw=model/vnd.gtw
+gv=text/vnd.graphviz
+gxt=application/vnd.geonext
+gz=application/x-gzip
+h261=video/h261
+h263=video/h263
+h264=video/h264
+h=text/x-c
+hal=application/vnd.hal+xml
+hbci=application/vnd.hbci
+hdf=application/x-hdf
+hdf=application/x-hdf
+hdml=text/x-hdml
+hh=text/x-c
+hhc=application/x-oleobject
+hhk=application/octet-stream
+hhp=application/octet-stream
+hlp=application/winhlp
+hpgl=application/vnd.hp-hpgl
+hpid=application/vnd.hp-hpid
+hps=application/vnd.hp-hps
+hqx=application/mac-binhex40
+hqx=application/mac-binhex40
+hta=application/hta
+htc=text/x-component
+htke=application/vnd.kenameaapp
+htm=text/html
+html=text/html
+htt=text/webviewhtml
+hvd=application/vnd.yamaha.hv-dic
+hvp=application/vnd.yamaha.hv-voice
+hvs=application/vnd.yamaha.hv-script
+hxt=text/html
+i2g=application/vnd.intergeo
+icc=application/vnd.iccprofile
+ice=x-conference/x-cooltalk
+icm=application/vnd.iccprofile
+ico=image/x-icon
+ics=text/calendar
+ief=image/ief
+ifb=text/calendar
+ifm=application/vnd.shana.informed.formdata
+iges=model/iges
+igl=application/vnd.igloader
+igm=application/vnd.insors.igm
+igs=model/iges
+igx=application/vnd.micrografx.igx
+iif=application/vnd.shana.informed.interchange
+iii=application/x-iphone
+imp=application/vnd.accpac.simply.imp
+ims=application/vnd.ms-ims
+in=text/plain
+inf=text/inf
+ink=application/inkml+xml
+inkml=application/inkml+xml
+ins=application/x-internet-signup
+iota=application/vnd.astraea-software.iota
+ipfix=application/ipfix
+ipk=application/vnd.shana.informed.package
+irm=application/vnd.ibm.rights-management
+irp=application/vnd.irepository.package+xml
+iso=application/octet-stream
+isp=application/x-internet-signup
+itp=application/vnd.shana.informed.formtemplate
+ivf=video/x-ivf
+ivp=application/vnd.immervision-ivp
+ivu=application/vnd.immervision-ivu
+jad=text/vnd.sun.j2me.app-descriptor
+jam=application/vnd.jam
+jar=application/java-archive
+java=text/x-java-source
+jbst=text/x-jbst-source
+jck=application/liquidmotion
+jcz=application/liquidmotion
+jfif=image/jpeg
+jisp=application/vnd.jisp
+jlt=application/vnd.hp-jlyt
+jnlp=application/x-java-jnlp-file
+joda=application/vnd.joost.joda-archive
+jp2=image/jpeg
+jpb=application/octet-stream
+jpe=image/jpeg
+jpeg=image/jpeg
+jpg=image/jpeg
+jpgm=video/jpm
+jpgv=video/jpeg
+jpm=video/jpm
+js=application/javascript
+jsf=text/plain
+json=application/json
+jspf=text/plain
+jsx=application/javascript
+kar=audio/midi
+karbon=application/vnd.kde.karbon
+kfo=application/vnd.kde.kformula
+kia=application/vnd.kidspiration
+kml=application/vnd.google-earth.kml+xml
+kmz=application/vnd.google-earth.kmz
+kne=application/vnd.kinar
+knp=application/vnd.kinar
+kon=application/vnd.kde.kontour
+kpr=application/vnd.kde.kpresenter
+kpt=application/vnd.kde.kpresenter
+ksp=application/vnd.kde.kspread
+ktr=application/vnd.kahootz
+ktx=image/ktx
+ktz=application/vnd.kahootz
+kwd=application/vnd.kde.kword
+kwt=application/vnd.kde.kword
+lasxml=application/vnd.las.las+xml
+latex=application/x-latex
+lbd=application/vnd.llamagraphics.life-balance.desktop
+lbe=application/vnd.llamagraphics.life-balance.exchange+xml
+les=application/vnd.hhe.lesson-player
+lha=application/octet-stream
+link66=application/vnd.route66.link66+xml
+list3820=application/vnd.ibm.modcap
+list=text/plain
+listafp=application/vnd.ibm.modcap
+lit=application/x-ms-reader
+log=text/plain
+lostxml=application/lost+xml
+lpk=application/octet-stream
+lrf=application/octet-stream
+lrm=application/vnd.ms-lrm
+lsf=video/x-la-asf
+lsx=video/x-la-asf
+ltf=application/vnd.frogans.ltf
+lvp=audio/vnd.lucent.voice
+lwp=application/vnd.lotus-wordpro
+lzh=application/lzh
+m13=application/x-msmediaview
+m14=application/x-msmediaview
+m1v=video/mpeg
+m21=application/mp21
+m2a=audio/mpeg
+m2v=video/mpeg
+m3a=audio/mpeg
+m3u8=application/vnd.apple.mpegurl
+m3u=audio/x-mpegurl
+m4a=audio/mp4
+m4b=audio/mp4
+m4p=audio/mp4
+m4r=audio/mp4
+m4u=video/vnd.mpegurl
+m4v=video/mp4
+ma=application/mathematica
+mac=image/x-macpaint
+mads=application/mads+xml
+mag=application/vnd.ecowin.chart
+maker=application/vnd.framemaker
+man=text/troff
+manifest=application/x-ms-manifest
+map=text/plain
+master=text/plain
+mathml=application/mathml+xml
+mb=application/mathematica
+mbk=application/vnd.mobius.mbk
+mbox=application/mbox
+mc1=application/vnd.medcalcdata
+mcd=application/vnd.mcd
+mcurl=text/vnd.curl.mcurl
+mdb=application/x-msaccess
+mdi=image/vnd.ms-modi
+mdp=application/octet-stream
+me=text/troff
+merge=text/plain
+mesh=model/mesh
+meta4=application/metalink4+xml
+mets=application/mets+xml
+mfm=application/vnd.mfmp
+mft=application/rpki-manifest
+mgp=application/vnd.osgeo.mapguide.package
+mgz=application/vnd.proteus.magazine
+mht=message/rfc822
+mhtml=message/rfc822
+mid=audio/midi
+midi=audio/midi
+mif=application/x-mif
+mime=message/rfc822
+mix=application/octet-stream
+mj2=video/mj2
+mjp2=video/mj2
+mlp=application/vnd.dolby.mlp
+mmd=application/vnd.chipnuts.karaoke-mmd
+mmf=application/vnd.smaf
+mmr=image/vnd.fujixerox.edmics-mmr
+mno=application/xml
+mny=application/x-msmoney
+mobi=application/x-mobipocket-ebook
+mods=application/mods+xml
+mov=video/quicktime
+movie=video/x-sgi-movie
+mp1=audio/mpeg
+mp21=application/mp21
+mp2=audio/mpeg
+mp2a=audio/mpeg
+mp3=audio/mpeg
+mp4=video/mp4
+mp4a=audio/mp4
+mp4s=application/mp4
+mp4v=video/mp4
+mpa=audio/mpeg
+mpc=application/vnd.mophun.certificate
+mpe=video/mpeg
+mpeg=video/mpeg
+mpega=audio/x-mpeg
+mpg4=video/mp4
+mpg=video/mpeg
+mpga=audio/mpeg
+mpkg=application/vnd.apple.installer+xml
+mpm=application/vnd.blueice.multipass
+mpn=application/vnd.mophun.application
+mpp=application/vnd.ms-project
+mpt=application/vnd.ms-project
+mpv2=video/mpeg2
+mpy=application/vnd.ibm.minipay
+mqy=application/vnd.mobius.mqy
+mrc=application/marc
+mrcx=application/marcxml+xml
+ms=text/troff
+mscml=application/mediaservercontrol+xml
+mseed=application/vnd.fdsn.mseed
+mseq=application/vnd.mseq
+msf=application/vnd.epson.msf
+msh=model/mesh
+msi=application/x-msdownload
+msl=application/vnd.mobius.msl
+mso=application/octet-stream
+msty=application/vnd.muvee.style
+mts=model/vnd.mts
+mus=application/vnd.musician
+musicxml=application/vnd.recordare.musicxml+xml
+mvb=application/x-msmediaview
+mvc=application/x-miva-compiled
+mwf=application/vnd.mfer
+mxf=application/mxf
+mxl=application/vnd.recordare.musicxml
+mxml=application/xv+xml
+mxs=application/vnd.triscape.mxs
+mxu=video/vnd.mpegurl
+n-gage=application/vnd.nokia.n-gage.symbian.install
+n3=text/n3
+nb=application/mathematica
+nbp=application/vnd.wolfram.player
+nc=application/x-netcdf
+ncx=application/x-dtbncx+xml
+ngdat=application/vnd.nokia.n-gage.data
+nlu=application/vnd.neurolanguage.nlu
+nml=application/vnd.enliven
+nnd=application/vnd.noblenet-directory
+nns=application/vnd.noblenet-sealer
+nnw=application/vnd.noblenet-web
+npx=image/vnd.net-fpx
+nra=application/octet-stream
+nri=application/octet-stream
+nsc=video/x-ms-asf
+nsf=application/vnd.lotus-notes
+nws=message/rfc822
+oa2=application/vnd.fujitsu.oasys2
+oa3=application/vnd.fujitsu.oasys3
+oas=application/vnd.fujitsu.oasys
+obd=application/x-msbinder
+ocx=application/octet-stream
+oda=application/oda
+odb=application/vnd.oasis.opendocument.database
+odc=application/vnd.oasis.opendocument.chart
+odf=application/vnd.oasis.opendocument.formula
+odft=application/vnd.oasis.opendocument.formula-template
+odg=application/vnd.oasis.opendocument.graphics
+odi=application/vnd.oasis.opendocument.image
+odm=application/vnd.oasis.opendocument.text-master
+odp=application/vnd.oasis.opendocument.presentation
+ods=application/vnd.oasis.opendocument.spreadsheet
+odt=application/vnd.oasis.opendocument.text
+oga=audio/ogg
+ogg=audio/ogg
+ogv=video/ogg
+ogx=application/ogg
+one=application/onenote
+onea=application/onenote
+onepkg=application/onenote
+onetmp=application/onenote
+onetoc2=application/onenote
+onetoc=application/onenote
+opf=application/oebps-package+xml
+oprc=application/vnd.palm
+org=application/vnd.lotus-organizer
+osf=application/vnd.yamaha.openscoreformat
+osfpvg=application/vnd.yamaha.openscoreformat.osfpvg+xml
+otc=application/vnd.oasis.opendocument.chart-template
+otf=application/x-font-otf
+otg=application/vnd.oasis.opendocument.graphics-template
+oth=application/vnd.oasis.opendocument.text-web
+oti=application/vnd.oasis.opendocument.image-template
+otp=application/vnd.oasis.opendocument.presentation-template
+ots=application/vnd.oasis.opendocument.spreadsheet-template 
+ott=application/vnd.oasis.opendocument.text-template
+oxps=application/oxps
+oxt=application/vnd.openofficeorg.extension
+p10=application/pkcs10
+p12=application/x-pkcs12
+p7b=application/x-pkcs7-certificates
+p7c=application/pkcs7-mime
+p7m=application/pkcs7-mime
+p7r=application/x-pkcs7-certreqresp
+p7s=application/pkcs7-signature
+p8=application/pkcs8
+p=text/x-pascal
+pas=text/x-pascal
+paw=application/vnd.pawaafile
+pbd=application/vnd.powerbuilder6
+pbm=image/x-portable-bitmap
+pbm=image/x-portable-bitmap
+pcap=application/vnd.tcpdump.pcap
+pcf=application/x-font-pcf
+pcl=application/vnd.hp-pcl
+pclxl=application/vnd.hp-pclxl
+pct=image/pict
+pcurl=application/vnd.curl.pcurl
+pcx=image/x-pcx
+pcz=application/octet-stream
+pdb=application/vnd.palm
+pdf=application/pdf
+pfa=application/x-font-type1
+pfb=application/x-font-type1
+pfm=application/x-font-type1
+pfr=application/font-tdpfr
+pfx=application/x-pkcs12
+pfx=application/x-pkcs12
+pgm=image/x-portable-graymap
+pgn=application/x-chess-pgn
+pgp=application/pgp-encrypted
+pic=image/pict
+pict=image/pict
+pkg=application/octet-stream
+pki=application/pkixcmp
+pkipath=application/pkix-pkipath
+pko=application/vnd.ms-pki.pko
+plb=application/vnd.3gpp.pic-bw-large
+plc=application/vnd.mobius.plc
+plf=application/vnd.pocketlearn
+pls=audio/x-scpls
+pma=application/x-perfmon
+pmc=application/x-perfmon
+pml=application/vnd.ctc-posml
+pmr=application/x-perfmon
+pmw=application/x-perfmon
+png=image/png
+pnm=image/x-portable-anymap
+pnt=image/x-macpaint
+pnz=image/png
+portpkg=application/vnd.macports.portpkg
+pot=application/vnd.ms-powerpoint
+potm=application/vnd.ms-powerpoint.template.macroenabled.12
+potx=application/vnd.openxmlformats-officedocument.presentationml.template
+ppam=application/vnd.ms-powerpoint.addin.macroenabled.12
+ppd=application/vnd.cups-ppd
+ppm=image/x-portable-pixmap
+pps=application/vnd.ms-powerpoint
+ppsm=application/vnd.ms-powerpoint.slideshow.macroenabled.12
+ppsx=application/vnd.openxmlformats-officedocument.presentationml.slideshow
+ppt=application/vnd.ms-powerpoint
+pptm=application/vnd.ms-powerpoint.presentation.macroenabled.12
+pptx=application/vnd.openxmlformats-officedocument.presentationml.presentation
+pqa=application/vnd.palm
+prc=application/x-mobipocket-ebook
+pre=application/vnd.lotus-freelance
+prf=application/pics-rules
+prm=application/octet-stream
+prx=application/octet-stream
+ps=application/postscript
+psb=application/vnd.3gpp.pic-bw-small
+psd=image/vnd.adobe.photoshop
+psf=application/x-font-linux-psf
+pskcxml=application/pskc+xml
+psm=application/octet-stream
+psp=application/octet-stream
+ptid=application/vnd.pvi.ptid1
+pub=application/x-mspublisher
+pvb=application/vnd.3gpp.pic-bw-var
+pwn=application/vnd.3m.post-it-notes
+pya=audio/vnd.ms-playready.media.pya
+pyv=video/vnd.ms-playready.media.pyv
+qam=application/vnd.epson.quickanime
+qbo=application/vnd.intu.qbo
+qfx=application/vnd.intu.qfx
+qps=application/vnd.publishare-delta-tree
+qt=video/quicktime
+qti=image/x-quicktime
+qtif=image/x-quicktime
+qtl=application/x-quicktimeplayer
+qwd=application/vnd.quark.quarkxpress
+qwt=application/vnd.quark.quarkxpress
+qxb=application/vnd.quark.quarkxpress
+qxd=application/vnd.quark.quarkxpress
+qxl=application/vnd.quark.quarkxpress
+qxt=application/vnd.quark.quarkxpress
+ra=audio/x-pn-realaudio
+ram=audio/x-pn-realaudio
+rar=application/x-rar-compressed
+ras=image/x-cmu-raster
+rcprofile=application/vnd.ipunplugged.rcprofile
+rdf=application/rdf+xml
+rdz=application/vnd.data-vision.rdz
+rep=application/vnd.businessobjects
+res=application/x-dtbresource+xml
+resx=application/xml
+rf=image/vnd.rn-realflash
+rgb=image/x-rgb
+rgb=image/x-rgb
+rif=application/reginfo+xml
+rip=audio/vnd.rip
+rl=application/resource-lists+xml
+rlc=image/vnd.fujixerox.edmics-rlc
+rld=application/resource-lists-diff+xml
+rm=application/vnd.rn-realmedia
+rmi=audio/midi
+rmp=audio/x-pn-realaudio-plugin
+rms=application/vnd.jcp.javame.midlet-rms
+rnc=application/relax-ng-compact-syntax
+roa=application/rpki-roa
+roff=text/troff
+rp9=application/vnd.cloanto.rp9
+rpm=audio/x-pn-realaudio-plugin
+rpss=application/vnd.nokia.radio-presets
+rpst=application/vnd.nokia.radio-preset
+rq=application/sparql-query
+rs=application/rls-services+xml
+rsd=application/rsd+xml
+rss=application/rss+xml
+rtf=application/rtf
+rtx=application/rtf
+rtx=text/richtext
+s=text/x-asm
+saf=application/vnd.yamaha.smaf-audio
+sbml=application/sbml+xml
+sc=application/vnd.ibm.secure-container
+scd=application/x-msschedule
+scm=application/vnd.lotus-screencam
+scq=application/scvp-cv-request
+scs=application/scvp-cv-response
+sct=text/scriptlet
+scurl=text/vnd.curl.scurl
+sda=application/vnd.stardivision.draw
+sdc=application/vnd.stardivision.calc
+sdd=application/vnd.stardivision.impress
+sdkd=application/vnd.solent.sdkm+xml
+sdkm=application/vnd.solent.sdkm+xml
+sdp=application/sdp
+sdw=application/vnd.stardivision.writer
+sea=application/octet-stream
+see=application/vnd.seemail
+seed=application/vnd.fdsn.seed
+sema=application/vnd.sema
+semd=application/vnd.semd
+semf=application/vnd.semf
+ser=application/java-serialized-object
+setpay=application/set-payment-initiation
+setreg=application/set-registration-initiation
+sfd-hdstx=application/vnd.hydrostatix.sof-data
+sfs=application/vnd.spotfire.sfs
+sgl=application/vnd.stardivision.writer-global
+sgm=text/sgml
+sgml=text/sgml
+sh=application/x-sh
+shar=application/x-shar
+shf=application/shf+xml
+#shtml=text/x-server-parsed-html
+sig=application/pgp-signature
+silo=model/mesh
+sis=application/vnd.symbian.install
+sisx=application/vnd.symbian.install
+sit=application/x-stuffit
+sitx=application/x-stuffitx
+skd=application/vnd.koan
+skm=application/vnd.koan
+skp=application/vnd.koan
+skt=application/vnd.koan
+sldm=application/vnd.ms-powerpoint.slide.macroenabled.12
+sldx=application/vnd.openxmlformats-officedocument.presentationml.slide
+sln=application/xml
+slt=application/vnd.epson.salt
+sm=application/vnd.stepmania.stepchart
+smd=audio/x-smd
+smf=application/vnd.stardivision.math
+smi=application/smil+xml
+smil=application/smil+xml
+smx=audio/x-smd
+smz=audio/x-smd
+smzip=application/vnd.stepmania.package
+snd=audio/basic
+snf=application/x-font-snf
+snp=application/octet-stream
+so=application/octet-stream
+spc=application/x-pkcs7-certificates
+spf=application/vnd.yamaha.smaf-phrase
+spl=application/x-futuresplash
+spot=text/vnd.in3d.spot
+spp=application/scvp-vp-response
+spq=application/scvp-vp-request
+spx=audio/ogg
+src=application/x-wais-source
+sru=application/sru+xml
+srx=application/sparql-results+xml
+sse=application/vnd.kodak-descriptor
+ssf=application/vnd.epson.ssf
+ssm=application/streamingmedia
+ssml=application/ssml+xml
+sst=application/vnd.ms-pki.certstore
+st=application/vnd.sailingtracker.track
+stc=application/vnd.sun.xml.calc.template
+std=application/vnd.sun.xml.draw.template
+stf=application/vnd.wt.stf
+sti=application/vnd.sun.xml.impress.template
+stk=application/hyperstudio
+stl=application/vnd.ms-pki.stl
+str=application/vnd.pg.format
+stw=application/vnd.sun.xml.writer.template
+sub=text/vnd.dvb.subtitle
+sus=application/vnd.sus-calendar
+susp=application/vnd.sus-calendar
+sv4cpio=application/x-sv4cpio
+sv4crc=application/x-sv4crc
+svc=application/vnd.dvb.service
+svd=application/vnd.svd
+svg=image/svg+xml
+svgz=image/svg+xml
+swa=application/x-director
+swf=application/x-shockwave-flash
+swi=application/vnd.aristanetworks.swi
+sxc=application/vnd.sun.xml.calc
+sxd=application/vnd.sun.xml.draw
+sxg=application/vnd.sun.xml.writer.global
+sxi=application/vnd.sun.xml.impress
+sxm=application/vnd.sun.xml.math
+sxw=application/vnd.sun.xml.writer
+t=text/troff
+taglet=application/vnd.mynfc
+tao=application/vnd.tao.intent-module-archive
+tar=application/x-tar
+tcap=application/vnd.3gpp2.tcap
+tcl=application/x-tcl
+teacher=application/vnd.smart.teacher
+tei=application/tei+xml
+teicorpus=application/tei+xml
+tex=application/x-tex
+texi=application/x-texinfo
+texinfo=application/x-texinfo
+text=text/plain
+tfi=application/thraud+xml
+tfm=application/x-tex-tfm
+tgz=application/x-compressed
+thm=image/gif
+thmx=application/vnd.ms-officetheme
+thn=application/octet-stream
+tif=image/tiff
+tiff=image/tiff
+tmo=application/vnd.tmobile-livetv
+toc=application/octet-stream
+torrent=application/x-bittorrent
+tpl=application/vnd.groove-tool-template
+tpt=application/vnd.trid.tpt
+tr=text/troff
+tra=application/vnd.trueapp
+trm=application/x-msterminal
+tsd=application/timestamped-data
+tsv=text/tab-separated-values
+ttc=application/x-font-ttf
+ttf=application/x-font-ttf
+ttl=text/turtle
+twd=application/vnd.simtech-mindmapper
+twds=application/vnd.simtech-mindmapper
+txd=application/vnd.genomatix.tuxedo
+txf=application/vnd.mobius.txf
+txt=text/plain
+u32=application/x-authorware-bin
+udeb=application/x-debian-package
+ufd=application/vnd.ufdl
+ufdl=application/vnd.ufdl
+uls=text/iuls