This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 31be526af7bbf558b73264211d260c0398f264f6 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Dec 4 18:03:36 2019 +0000 Align MIME type mappings for embedded with those in conf/web.xml Switch Tomcat embedded to loading MIME type mappings from a property file generated from the default web.xml so the MIME type mappings are consistent regardless of how Tomcat is started. Add the code to generate the properties file and a test case to check that the two remain in sync. --- .../catalina/startup/LocalStrings.properties | 1 + .../catalina/startup/MimeTypeMappings.properties | 1025 ++++++++++++++++++++ java/org/apache/catalina/startup/Tomcat.java | 206 +--- .../apache/tomcat/buildutil/MimeTypeMappings.java | 73 ++ java/org/apache/tomcat/buildutil/Utils.java | 59 ++ .../apache/tomcat/buildutil/translate/Import.java | 32 +- .../catalina/startup/TestTomcatNoServer.java | 92 ++ webapps/docs/changelog.xml | 5 + 8 files changed, 1278 insertions(+), 215 deletions(-) diff --git a/java/org/apache/catalina/startup/LocalStrings.properties b/java/org/apache/catalina/startup/LocalStrings.properties index 93d094a..c857b48 100644 --- a/java/org/apache/catalina/startup/LocalStrings.properties +++ b/java/org/apache/catalina/startup/LocalStrings.properties @@ -149,6 +149,7 @@ tomcat.addWebapp.conflictChild=Unable to deploy WAR at [{0}] to context path [{1 tomcat.addWebapp.conflictFile=Unable to deploy WAR at [{0}] to context path [{1}] because of existing file [{2}] tomcat.baseDirMakeFail=Unable to create the directory [{0}] to use as the base directory tomcat.baseDirNotDir=The location [{0}] specified for the base directory is not a directory +tomcat.defaultMimeTypeMappingsFail=Unable to load the default MIME types tomcat.homeDirMakeFail=Unable to create the directory [{0}] to use as the home directory tomcat.invalidCommandLine=Invalid command line arguments [{0}] tomcat.noContextClass=Failed to instantiate context class [{0}] for host [{1}] and url [{2}] diff --git a/java/org/apache/catalina/startup/MimeTypeMappings.properties b/java/org/apache/catalina/startup/MimeTypeMappings.properties new file mode 100644 index 0000000..a043c5b --- /dev/null +++ b/java/org/apache/catalina/startup/MimeTypeMappings.properties @@ -0,0 +1,1025 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +123=application/vnd.lotus-1-2-3 +3dml=text/vnd.in3d.3dml +3ds=image/x-3ds +3g2=video/3gpp2 +3gp=video/3gpp +7z=application/x-7z-compressed +aab=application/x-authorware-bin +aac=audio/x-aac +aam=application/x-authorware-map +aas=application/x-authorware-seg +abs=audio/x-mpeg +abw=application/x-abiword +ac=application/pkix-attr-cert +acc=application/vnd.americandynamics.acc +ace=application/x-ace-compressed +acu=application/vnd.acucobol +acutc=application/vnd.acucorp +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 +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 +appcache=text/cache-manifest +application=application/x-ms-application +apr=application/vnd.lotus-approach +arc=application/x-freearc +art=image/x-jg +asc=application/pgp-signature +asf=video/x-ms-asf +asm=text/x-asm +aso=application/vnd.accpac.simply.aso +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 +axv=video/annodex +azf=application/vnd.airzip.filesecure.azf +azs=application/vnd.airzip.filesecure.azs +azw=application/vnd.amazon.ebook +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 +blb=application/x-blorb +blorb=application/x-blorb +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 +btif=image/prs.btif +bz=application/x-bzip +bz2=application/x-bzip2 +c=text/x-c +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 +cab=application/vnd.ms-cab-compressed +caf=audio/x-caf +cap=application/vnd.tcpdump.pcap +car=application/vnd.curl.car +cat=application/vnd.ms-pki.seccat +cb7=application/x-cbr +cba=application/x-cbr +cbr=application/x-cbr +cbt=application/x-cbr +cbz=application/x-cbr +cc=text/x-c +cct=application/x-director +ccxml=application/ccxml+xml +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 +cfs=application/x-cfs-compressed +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 +cmc=application/vnd.cosmocaller +cmdf=chemical/x-cmdf +cml=chemical/x-cml +cmp=application/vnd.yellowriver-custom-menu +cmx=image/x-cmx +cod=application/vnd.rim.cod +com=application/x-msdownload +conf=text/plain +cpio=application/x-cpio +cpp=text/x-c +cpt=application/mac-compactpro +crd=application/x-mscardfile +crl=application/pkix-crl +crt=application/x-x509-ca-cert +cryptonote=application/vnd.rig.cryptonote +csh=application/x-csh +csml=chemical/x-csml +csp=application/vnd.commonspace +css=text/css +cst=application/x-director +csv=text/csv +cu=application/cu-seeme +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 +dart=application/vnd.dart +dataless=application/vnd.fdsn.seed +davmount=application/davmount+xml +dbk=application/docbook+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 +dgc=application/x-dgc-compressed +dib=image/bmp +dic=text/x-c +dir=application/x-director +dis=application/vnd.mobius.dis +dist=application/octet-stream +distz=application/octet-stream +djv=image/vnd.djvu +djvu=image/vnd.djvu +dll=application/x-msdownload +dmg=application/x-apple-diskimage +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 +dssc=application/dssc+der +dtb=application/x-dtbook+xml +dtd=application/xml-dtd +dts=audio/vnd.dts +dtshd=audio/vnd.dts.hd +dump=application/octet-stream +dv=video/x-dv +dvb=video/vnd.dvb.file +dvi=application/x-dvi +dwf=model/vnd.dwf +dwg=image/vnd.dwg +dxf=image/vnd.dxf +dxp=application/vnd.spotfire.dxp +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 +emf=application/x-msmetafile +eml=message/rfc822 +emma=application/emma+xml +emz=application/x-msmetafile +eol=audio/vnd.digital-winds +eot=application/vnd.ms-fontobject +eps=application/postscript +epub=application/epub+zip +es3=application/vnd.eszigno3+xml +esa=application/vnd.osgi.subsystem +esf=application/vnd.epson.esf +et3=application/vnd.eszigno3+xml +etx=text/x-setext +eva=application/x-eva +evy=application/x-envoy +exe=application/octet-stream +exi=application/exi +ext=application/vnd.novadigm.ext +ez=application/andrew-inset +ez2=application/vnd.ezpix-album +ez3=application/vnd.ezpix-package +f=text/x-fortran +f4v=video/x-f4v +f77=text/x-fortran +f90=text/x-fortran +fbs=image/vnd.fastbidsheet +fcdt=application/vnd.adobe.formscentral.fcdt +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 +fh=image/x-freehand +fh4=image/x-freehand +fh5=image/x-freehand +fh7=image/x-freehand +fhc=image/x-freehand +fig=application/x-xfig +flac=audio/flac +fli=video/x-fli +flo=application/vnd.micrografx.flo +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 +gam=application/x-tads +gbr=application/rpki-ghostbusters +gca=application/x-gca-compressed +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 +gml=application/gml+xml +gmx=application/vnd.gmx +gnumeric=application/x-gnumeric +gph=application/vnd.flographit +gpx=application/gpx+xml +gqf=application/vnd.grafeq +gqs=application/vnd.grafeq +gram=application/srgs +gramps=application/x-gramps-xml +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 +gxf=application/gxf +gxt=application/vnd.geonext +gz=application/x-gzip +h=text/x-c +h261=video/h261 +h263=video/h263 +h264=video/h264 +hal=application/vnd.hal+xml +hbci=application/vnd.hbci +hdf=application/x-hdf +hh=text/x-c +hlp=application/winhlp +hpgl=application/vnd.hp-hpgl +hpid=application/vnd.hp-hpid +hps=application/vnd.hp-hps +hqx=application/mac-binhex40 +htc=text/x-component +htke=application/vnd.kenameaapp +htm=text/html +html=text/html +hvd=application/vnd.yamaha.hv-dic +hvp=application/vnd.yamaha.hv-voice +hvs=application/vnd.yamaha.hv-script +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 +imp=application/vnd.accpac.simply.imp +ims=application/vnd.ms-ims +in=text/plain +ink=application/inkml+xml +inkml=application/inkml+xml +install=application/x-install-instructions +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/x-iso9660-image +itp=application/vnd.shana.informed.formtemplate +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 +jisp=application/vnd.jisp +jlt=application/vnd.hp-jlyt +jnlp=application/x-java-jnlp-file +joda=application/vnd.joost.joda-archive +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 +jsonml=application/jsonml+json +jspf=text/plain +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 +kpxx=application/vnd.ds-keypoint +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/x-lzh-compressed +link66=application/vnd.route66.link66+xml +list=text/plain +list3820=application/vnd.ibm.modcap +listafp=application/vnd.ibm.modcap +lnk=application/x-ms-shortcut +log=text/plain +lostxml=application/lost+xml +lrf=application/octet-stream +lrm=application/vnd.ms-lrm +ltf=application/vnd.frogans.ltf +lvp=audio/vnd.lucent.voice +lwp=application/vnd.lotus-wordpro +lzh=application/x-lzh-compressed +m13=application/x-msmediaview +m14=application/x-msmediaview +m1v=video/mpeg +m21=application/mp21 +m2a=audio/mpeg +m2v=video/mpeg +m3a=audio/mpeg +m3u=audio/x-mpegurl +m3u8=application/vnd.apple.mpegurl +m4a=audio/mp4 +m4b=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 +mar=application/octet-stream +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 +me=text/troff +mesh=model/mesh +meta4=application/metalink4+xml +metalink=application/metalink+xml +mets=application/mets+xml +mfm=application/vnd.mfmp +mft=application/rpki-manifest +mgp=application/vnd.osgeo.mapguide.package +mgz=application/vnd.proteus.magazine +mid=audio/midi +midi=audio/midi +mie=application/x-mie +mif=application/x-mif +mime=message/rfc822 +mj2=video/mj2 +mjp2=video/mj2 +mk3d=video/x-matroska +mka=audio/x-matroska +mks=video/x-matroska +mkv=video/x-matroska +mlp=application/vnd.dolby.mlp +mmd=application/vnd.chipnuts.karaoke-mmd +mmf=application/vnd.smaf +mmr=image/vnd.fujixerox.edmics-mmr +mng=video/x-mng +mny=application/x-msmoney +mobi=application/x-mobipocket-ebook +mods=application/mods+xml +mov=video/quicktime +movie=video/x-sgi-movie +mp1=audio/mpeg +mp2=audio/mpeg +mp21=application/mp21 +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 +mpg=video/mpeg +mpg4=video/mp4 +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 +msty=application/vnd.muvee.style +mts=model/vnd.mts +mus=application/vnd.musician +musicxml=application/vnd.recordare.musicxml+xml +mvb=application/x-msmediaview +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 +nfo=text/x-nfo +ngdat=application/vnd.nokia.n-gage.data +nitf=application/vnd.nitf +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 +nsc=application/x-conference +nsf=application/vnd.lotus-notes +ntf=application/vnd.nitf +nzb=application/x-nzb +oa2=application/vnd.fujitsu.oasys2 +oa3=application/vnd.fujitsu.oasys3 +oas=application/vnd.fujitsu.oasys +obd=application/x-msbinder +obj=application/x-tgif +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 +omdoc=application/omdoc+xml +onepkg=application/onenote +onetmp=application/onenote +onetoc=application/onenote +onetoc2=application/onenote +opf=application/oebps-package+xml +opml=text/x-opml +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=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 +p=text/x-pascal +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 +pas=text/x-pascal +paw=application/vnd.pawaafile +pbd=application/vnd.powerbuilder6 +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 +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 +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 +plb=application/vnd.3gpp.pic-bw-large +plc=application/vnd.mobius.plc +plf=application/vnd.pocketlearn +pls=audio/x-scpls +pml=application/vnd.ctc-posml +png=image/png +pnm=image/x-portable-anymap +pnt=image/x-macpaint +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 +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 +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 +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 +rgb=image/x-rgb +rif=application/reginfo+xml +rip=audio/vnd.rip +ris=application/x-research-info-systems +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 +rmvb=application/vnd.rn-realmedia-vbr +rnc=application/relax-ng-compact-syntax +roa=application/rpki-roa +roff=text/troff +rp9=application/vnd.cloanto.rp9 +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=text/richtext +s=text/x-asm +s3m=audio/s3m +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 +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 +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 +sfv=text/x-sfv +sgi=image/sgi +sgl=application/vnd.stardivision.writer-global +sgm=text/sgml +sgml=text/sgml +sh=application/x-sh +shar=application/x-shar +shf=application/shf+xml +sid=image/x-mrsid-image +sig=application/pgp-signature +sil=audio/silk +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 +slt=application/vnd.epson.salt +sm=application/vnd.stepmania.stepchart +smf=application/vnd.stardivision.math +smi=application/smil+xml +smil=application/smil+xml +smv=video/x-smv +smzip=application/vnd.stepmania.package +snd=audio/basic +snf=application/x-font-snf +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 +sql=application/x-sql +src=application/x-wais-source +srt=application/x-subrip +sru=application/sru+xml +srx=application/sparql-results+xml +ssdl=application/ssdl+xml +sse=application/vnd.kodak-descriptor +ssf=application/vnd.epson.ssf +ssml=application/ssml+xml +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 +t3=application/x-t3vm-image +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 +tga=image/x-tga +thmx=application/vnd.ms-officetheme +tif=image/tiff +tiff=image/tiff +tmo=application/vnd.tmobile-livetv +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=font/collection +ttf=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 +ulw=audio/basic +ulx=application/x-glulx +umj=application/vnd.umajin +unityweb=application/vnd.unity +uoml=application/vnd.uoml+xml +uri=text/uri-list +uris=text/uri-list +urls=text/uri-list +ustar=application/x-ustar +utz=application/vnd.uiq.theme +uu=text/x-uuencode +uva=audio/vnd.dece.audio +uvd=application/vnd.dece.data +uvf=application/vnd.dece.data +uvg=image/vnd.dece.graphic +uvh=video/vnd.dece.hd +uvi=image/vnd.dece.graphic +uvm=video/vnd.dece.mobile +uvp=video/vnd.dece.pd +uvs=video/vnd.dece.sd +uvt=application/vnd.dece.ttml+xml +uvu=video/vnd.uvvu.mp4 +uvv=video/vnd.dece.video +uvva=audio/vnd.dece.audio +uvvd=application/vnd.dece.data +uvvf=application/vnd.dece.data +uvvg=image/vnd.dece.graphic +uvvh=video/vnd.dece.hd +uvvi=image/vnd.dece.graphic +uvvm=video/vnd.dece.mobile +uvvp=video/vnd.dece.pd +uvvs=video/vnd.dece.sd +uvvt=application/vnd.dece.ttml+xml +uvvu=video/vnd.uvvu.mp4 +uvvv=video/vnd.dece.video +uvvx=application/vnd.dece.unspecified +uvvz=application/vnd.dece.zip +uvx=application/vnd.dece.unspecified +uvz=application/vnd.dece.zip +vcard=text/vcard +vcd=application/x-cdlink +vcf=text/x-vcard +vcg=application/vnd.groove-vcard +vcs=text/x-vcalendar +vcx=application/vnd.vcx +vis=application/vnd.visionary +viv=video/vnd.vivo +vob=video/x-ms-vob +vor=application/vnd.stardivision.writer +vox=application/x-authorware-bin +vrml=model/vrml +vsd=application/vnd.visio +vsf=application/vnd.vsf +vss=application/vnd.visio +vst=application/vnd.visio +vsw=application/vnd.visio +vtu=model/vnd.vtu +vxml=application/voicexml+xml +w3d=application/x-director +wad=application/x-doom +wav=audio/x-wav +wax=audio/x-ms-wax +wbmp=image/vnd.wap.wbmp +wbs=application/vnd.criticaltools.wbs+xml +wbxml=application/vnd.wap.wbxml +wcm=application/vnd.ms-works +wdb=application/vnd.ms-works +wdp=image/vnd.ms-photo +weba=audio/webm +webm=video/webm +webp=image/webp +wg=application/vnd.pmi.widget +wgt=application/widget +wks=application/vnd.ms-works +wm=video/x-ms-wm +wma=audio/x-ms-wma +wmd=application/x-ms-wmd +wmf=application/x-msmetafile +wml=text/vnd.wap.wml +wmlc=application/vnd.wap.wmlc +wmls=text/vnd.wap.wmlscript +wmlsc=application/vnd.wap.wmlscriptc +wmv=video/x-ms-wmv +wmx=video/x-ms-wmx +wmz=application/x-msmetafile +woff=font/woff +woff2=font/woff2 +wpd=application/vnd.wordperfect +wpl=application/vnd.ms-wpl +wps=application/vnd.ms-works +wqd=application/vnd.wqd +wri=application/x-mswrite +wrl=model/vrml +wsdl=application/wsdl+xml +wspolicy=application/wspolicy+xml +wtb=application/vnd.webturbo +wvx=video/x-ms-wvx +x32=application/x-authorware-bin +x3d=model/x3d+xml +x3db=model/x3d+binary +x3dbz=model/x3d+binary +x3dv=model/x3d+vrml +x3dvz=model/x3d+vrml +x3dz=model/x3d+xml +xaml=application/xaml+xml +xap=application/x-silverlight-app +xar=application/vnd.xara +xbap=application/x-ms-xbap +xbd=application/vnd.fujixerox.docuworks.binder +xbm=image/x-xbitmap +xdf=application/xcap-diff+xml +xdm=application/vnd.syncml.dm+xml +xdp=application/vnd.adobe.xdp+xml +xdssc=application/dssc+xml +xdw=application/vnd.fujixerox.docuworks +xenc=application/xenc+xml +xer=application/patch-ops-error+xml +xfdf=application/vnd.adobe.xfdf +xfdl=application/vnd.xfdl +xht=application/xhtml+xml +xhtml=application/xhtml+xml +xhvml=application/xv+xml +xif=image/vnd.xiff +xla=application/vnd.ms-excel +xlam=application/vnd.ms-excel.addin.macroenabled.12 +xlc=application/vnd.ms-excel +xlf=application/x-xliff+xml +xlm=application/vnd.ms-excel +xls=application/vnd.ms-excel +xlsb=application/vnd.ms-excel.sheet.binary.macroenabled.12 +xlsm=application/vnd.ms-excel.sheet.macroenabled.12 +xlsx=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +xlt=application/vnd.ms-excel +xltm=application/vnd.ms-excel.template.macroenabled.12 +xltx=application/vnd.openxmlformats-officedocument.spreadsheetml.template +xlw=application/vnd.ms-excel +xm=audio/xm +xml=application/xml +xo=application/vnd.olpc-sugar +xop=application/xop+xml +xpi=application/x-xpinstall +xpl=application/xproc+xml +xpm=image/x-xpixmap +xpr=application/vnd.is-xpr +xps=application/vnd.ms-xpsdocument +xpw=application/vnd.intercon.formnet +xpx=application/vnd.intercon.formnet +xsl=application/xml +xslt=application/xslt+xml +xsm=application/vnd.syncml+xml +xspf=application/xspf+xml +xul=application/vnd.mozilla.xul+xml +xvm=application/xv+xml +xvml=application/xv+xml +xwd=image/x-xwindowdump +xyz=chemical/x-xyz +xz=application/x-xz +yang=application/yang +yin=application/yin+xml +z=application/x-compress +z1=application/x-zmachine +z2=application/x-zmachine +z3=application/x-zmachine +z4=application/x-zmachine +z5=application/x-zmachine +z6=application/x-zmachine +z7=application/x-zmachine +z8=application/x-zmachine +zaz=application/vnd.zzazz.deck+xml +zip=application/zip +zir=application/vnd.zul +zirz=application/vnd.zul +zmm=application/vnd.handheld-entertainment+xml diff --git a/java/org/apache/catalina/startup/Tomcat.java b/java/org/apache/catalina/startup/Tomcat.java index 15fdd67..a6f09f3 100644 --- a/java/org/apache/catalina/startup/Tomcat.java +++ b/java/org/apache/catalina/startup/Tomcat.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Stack; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -1090,11 +1091,8 @@ public class Tomcat { // Sessions ctx.setSessionTimeout(30); - // MIME mappings - for (int i = 0; i < DEFAULT_MIME_MAPPINGS.length;) { - ctx.addMimeMapping(DEFAULT_MIME_MAPPINGS[i++], - DEFAULT_MIME_MAPPINGS[i++]); - } + // MIME type mappings + addDefaultMimeTypeMappings(ctx); // Welcome files ctx.addWelcomeFile("index.html"); @@ -1104,6 +1102,25 @@ public class Tomcat { /** + * Add the default MIME type mappings to the provide Context. + * + * @param context The web application to which the default MIME type + * mappings should be added. + */ + public static void addDefaultMimeTypeMappings(Context context) { + Properties defaultMimeMappings = new Properties(); + try (InputStream is = Tomcat.class.getResourceAsStream("MimeTypeMappings.properties")) { + defaultMimeMappings.load(is); + for (Map.Entry<Object, Object> entry: defaultMimeMappings.entrySet()) { + context.addMimeMapping((String) entry.getKey(), (String) entry.getValue()); + } + } catch (IOException e) { + throw new IllegalStateException(sm.getString("tomcat.defaultMimeTypeMappingsFail"), e); + } + } + + + /** * Fix startup sequence - required if you don't use web.xml. * * <p> @@ -1215,185 +1232,6 @@ public class Tomcat { } } - /** - * TODO: would a properties resource be better ? Or just parsing - * /etc/mime.types ? - * This is needed because we don't use the default web.xml, where this - * is encoded. - */ - private static final String[] DEFAULT_MIME_MAPPINGS = { - "abs", "audio/x-mpeg", - "ai", "application/postscript", - "aif", "audio/x-aiff", - "aifc", "audio/x-aiff", - "aiff", "audio/x-aiff", - "aim", "application/x-aim", - "art", "image/x-jg", - "asf", "video/x-ms-asf", - "asx", "video/x-ms-asf", - "au", "audio/basic", - "avi", "video/x-msvideo", - "avx", "video/x-rad-screenplay", - "bcpio", "application/x-bcpio", - "bin", "application/octet-stream", - "bmp", "image/bmp", - "body", "text/html", - "cdf", "application/x-cdf", - "cer", "application/pkix-cert", - "class", "application/java", - "cpio", "application/x-cpio", - "csh", "application/x-csh", - "css", "text/css", - "dib", "image/bmp", - "doc", "application/msword", - "dtd", "application/xml-dtd", - "dv", "video/x-dv", - "dvi", "application/x-dvi", - "eps", "application/postscript", - "etx", "text/x-setext", - "exe", "application/octet-stream", - "gif", "image/gif", - "gtar", "application/x-gtar", - "gz", "application/x-gzip", - "hdf", "application/x-hdf", - "hqx", "application/mac-binhex40", - "htc", "text/x-component", - "htm", "text/html", - "html", "text/html", - "ief", "image/ief", - "jad", "text/vnd.sun.j2me.app-descriptor", - "jar", "application/java-archive", - "java", "text/x-java-source", - "jnlp", "application/x-java-jnlp-file", - "jpe", "image/jpeg", - "jpeg", "image/jpeg", - "jpg", "image/jpeg", - "js", "application/javascript", - "jsf", "text/plain", - "jspf", "text/plain", - "kar", "audio/midi", - "latex", "application/x-latex", - "m3u", "audio/x-mpegurl", - "mac", "image/x-macpaint", - "man", "text/troff", - "mathml", "application/mathml+xml", - "me", "text/troff", - "mid", "audio/midi", - "midi", "audio/midi", - "mif", "application/x-mif", - "mov", "video/quicktime", - "movie", "video/x-sgi-movie", - "mp1", "audio/mpeg", - "mp2", "audio/mpeg", - "mp3", "audio/mpeg", - "mp4", "video/mp4", - "mpa", "audio/mpeg", - "mpe", "video/mpeg", - "mpeg", "video/mpeg", - "mpega", "audio/x-mpeg", - "mpg", "video/mpeg", - "mpv2", "video/mpeg2", - "nc", "application/x-netcdf", - "oda", "application/oda", - "odb", "application/vnd.oasis.opendocument.database", - "odc", "application/vnd.oasis.opendocument.chart", - "odf", "application/vnd.oasis.opendocument.formula", - "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", - "otg", "application/vnd.oasis.opendocument.graphics-template", - "oth", "application/vnd.oasis.opendocument.text-web", - "otp", "application/vnd.oasis.opendocument.presentation-template", - "ots", "application/vnd.oasis.opendocument.spreadsheet-template ", - "ott", "application/vnd.oasis.opendocument.text-template", - "ogx", "application/ogg", - "ogv", "video/ogg", - "oga", "audio/ogg", - "ogg", "audio/ogg", - "spx", "audio/ogg", - "flac", "audio/flac", - "anx", "application/annodex", - "axa", "audio/annodex", - "axv", "video/annodex", - "xspf", "application/xspf+xml", - "pbm", "image/x-portable-bitmap", - "pct", "image/pict", - "pdf", "application/pdf", - "pgm", "image/x-portable-graymap", - "pic", "image/pict", - "pict", "image/pict", - "pls", "audio/x-scpls", - "png", "image/png", - "pnm", "image/x-portable-anymap", - "pnt", "image/x-macpaint", - "ppm", "image/x-portable-pixmap", - "ppt", "application/vnd.ms-powerpoint", - "pps", "application/vnd.ms-powerpoint", - "ps", "application/postscript", - "psd", "image/vnd.adobe.photoshop", - "qt", "video/quicktime", - "qti", "image/x-quicktime", - "qtif", "image/x-quicktime", - "ras", "image/x-cmu-raster", - "rdf", "application/rdf+xml", - "rgb", "image/x-rgb", - "rm", "application/vnd.rn-realmedia", - "roff", "text/troff", - "rtf", "application/rtf", - "rtx", "text/richtext", - "sh", "application/x-sh", - "shar", "application/x-shar", - /*"shtml", "text/x-server-parsed-html",*/ - "sit", "application/x-stuffit", - "snd", "audio/basic", - "src", "application/x-wais-source", - "sv4cpio", "application/x-sv4cpio", - "sv4crc", "application/x-sv4crc", - "svg", "image/svg+xml", - "svgz", "image/svg+xml", - "swf", "application/x-shockwave-flash", - "t", "text/troff", - "tar", "application/x-tar", - "tcl", "application/x-tcl", - "tex", "application/x-tex", - "texi", "application/x-texinfo", - "texinfo", "application/x-texinfo", - "tif", "image/tiff", - "tiff", "image/tiff", - "tr", "text/troff", - "tsv", "text/tab-separated-values", - "txt", "text/plain", - "ulw", "audio/basic", - "ustar", "application/x-ustar", - "vxml", "application/voicexml+xml", - "xbm", "image/x-xbitmap", - "xht", "application/xhtml+xml", - "xhtml", "application/xhtml+xml", - "xls", "application/vnd.ms-excel", - "xml", "application/xml", - "xpm", "image/x-xpixmap", - "xsl", "application/xml", - "xslt", "application/xslt+xml", - "xul", "application/vnd.mozilla.xul+xml", - "xwd", "image/x-xwindowdump", - "vsd", "application/vnd.visio", - "wav", "audio/x-wav", - "wbmp", "image/vnd.wap.wbmp", - "wml", "text/vnd.wap.wml", - "wmlc", "application/vnd.wap.wmlc", - "wmls", "text/vnd.wap.wmlsc", - "wmlscriptc", "application/vnd.wap.wmlscriptc", - "wmv", "video/x-ms-wmv", - "wrl", "model/vrml", - "wspolicy", "application/wspolicy+xml", - "Z", "application/x-compress", - "z", "application/x-compress", - "zip", "application/zip" - }; - protected URL getWebappConfigFile(String path, String contextName) { File docBase = new File(path); if (docBase.isDirectory()) { diff --git a/java/org/apache/tomcat/buildutil/MimeTypeMappings.java b/java/org/apache/tomcat/buildutil/MimeTypeMappings.java new file mode 100644 index 0000000..8c1e221 --- /dev/null +++ b/java/org/apache/tomcat/buildutil/MimeTypeMappings.java @@ -0,0 +1,73 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package org.apache.tomcat.buildutil; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.tomcat.util.descriptor.DigesterFactory; +import org.apache.tomcat.util.descriptor.XmlErrorHandler; +import org.apache.tomcat.util.descriptor.web.WebRuleSet; +import org.apache.tomcat.util.descriptor.web.WebXml; +import org.apache.tomcat.util.digester.Digester; +import org.xml.sax.InputSource; + +public class MimeTypeMappings { + + public static void main(String... args) throws Exception { + InputSource globalWebXml = new InputSource(new File("conf/web.xml").getAbsoluteFile().toURI().toString()); + + WebXml webXmlDefaultFragment = new WebXml(); + webXmlDefaultFragment.setOverridable(true); + webXmlDefaultFragment.setDistributable(true); + webXmlDefaultFragment.setAlwaysAddWelcomeFiles(false); + + Digester digester = DigesterFactory.newDigester(true, true, new WebRuleSet(), true); + XmlErrorHandler handler = new XmlErrorHandler(); + digester.setErrorHandler(handler); + digester.push(webXmlDefaultFragment); + digester.parse(globalWebXml); + + Map<String,String> webXmlMimeMappings = webXmlDefaultFragment.getMimeMappings(); + SortedMap<String,String> sortedWebXmlMimeMappings = new TreeMap<>(); + sortedWebXmlMimeMappings.putAll(webXmlMimeMappings); + + File f = new File("java/org/apache/catalina/startup/MimeTypeMappings.properties"); + FileOutputStream fos = new FileOutputStream(f); + Writer w = new OutputStreamWriter(fos, StandardCharsets.US_ASCII); + + Utils.insertLicense(w); + + w.write(System.lineSeparator()); + + for (Map.Entry<String, String> mapping : sortedWebXmlMimeMappings.entrySet()) { + w.write(mapping.getKey()); + w.write("="); + w.write(mapping.getValue()); + w.write(System.lineSeparator()); + } + + w.close(); + fos.close(); + } +} diff --git a/java/org/apache/tomcat/buildutil/Utils.java b/java/org/apache/tomcat/buildutil/Utils.java new file mode 100644 index 0000000..7799f59 --- /dev/null +++ b/java/org/apache/tomcat/buildutil/Utils.java @@ -0,0 +1,59 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package org.apache.tomcat.buildutil; + +import java.io.IOException; +import java.io.Writer; + +public class Utils { + + private Utils() { + // Utility class. Hide default constructor. + } + + + public static void insertLicense(Writer w) throws IOException { + w.write("# Licensed to the Apache Software Foundation (ASF) under one or more"); + w.write(System.lineSeparator()); + w.write("# contributor license agreements. See the NOTICE file distributed with"); + w.write(System.lineSeparator()); + w.write("# this work for additional information regarding copyright ownership."); + w.write(System.lineSeparator()); + w.write("# The ASF licenses this file to You under the Apache License, Version 2.0"); + w.write(System.lineSeparator()); + w.write("# (the \"License\"); you may not use this file except in compliance with"); + w.write(System.lineSeparator()); + w.write("# the License. You may obtain a copy of the License at"); + w.write(System.lineSeparator()); + w.write("#"); + w.write(System.lineSeparator()); + w.write("# http://www.apache.org/licenses/LICENSE-2.0"); + w.write(System.lineSeparator()); + w.write("#"); + w.write(System.lineSeparator()); + w.write("# Unless required by applicable law or agreed to in writing, software"); + w.write(System.lineSeparator()); + w.write("# distributed under the License is distributed on an \"AS IS\" BASIS,"); + w.write(System.lineSeparator()); + w.write("# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); + w.write(System.lineSeparator()); + w.write("# See the License for the specific language governing permissions and"); + w.write(System.lineSeparator()); + w.write("# limitations under the License."); + w.write(System.lineSeparator()); + } +} diff --git a/java/org/apache/tomcat/buildutil/translate/Import.java b/java/org/apache/tomcat/buildutil/translate/Import.java index bdffd73..fe637cc 100644 --- a/java/org/apache/tomcat/buildutil/translate/Import.java +++ b/java/org/apache/tomcat/buildutil/translate/Import.java @@ -69,7 +69,7 @@ public class Import { File outFile = new File(currentPkg.replace('.', File.separatorChar), Constants.L10N_PREFIX + language + Constants.L10N_SUFFIX); FileOutputStream fos = new FileOutputStream(outFile); w = new OutputStreamWriter(fos, StandardCharsets.UTF_8); - insertLicense(w); + org.apache.tomcat.buildutil.Utils.insertLicense(w); } if (!currentGroup.equals(cKey.group)) { @@ -86,36 +86,6 @@ public class Import { } - private static void insertLicense(Writer w) throws IOException { - w.write("# Licensed to the Apache Software Foundation (ASF) under one or more"); - w.write(System.lineSeparator()); - w.write("# contributor license agreements. See the NOTICE file distributed with"); - w.write(System.lineSeparator()); - w.write("# this work for additional information regarding copyright ownership."); - w.write(System.lineSeparator()); - w.write("# The ASF licenses this file to You under the Apache License, Version 2.0"); - w.write(System.lineSeparator()); - w.write("# (the \"License\"); you may not use this file except in compliance with"); - w.write(System.lineSeparator()); - w.write("# the License. You may obtain a copy of the License at"); - w.write(System.lineSeparator()); - w.write("#"); - w.write(System.lineSeparator()); - w.write("# http://www.apache.org/licenses/LICENSE-2.0"); - w.write(System.lineSeparator()); - w.write("#"); - w.write(System.lineSeparator()); - w.write("# Unless required by applicable law or agreed to in writing, software"); - w.write(System.lineSeparator()); - w.write("# distributed under the License is distributed on an \"AS IS\" BASIS,"); - w.write(System.lineSeparator()); - w.write("# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); - w.write(System.lineSeparator()); - w.write("# See the License for the specific language governing permissions and"); - w.write(System.lineSeparator()); - w.write("# limitations under the License."); - w.write(System.lineSeparator()); - } private static class CompositeKey { public final String pkg; diff --git a/test/org/apache/catalina/startup/TestTomcatNoServer.java b/test/org/apache/catalina/startup/TestTomcatNoServer.java new file mode 100644 index 0000000..5a2f374 --- /dev/null +++ b/test/org/apache/catalina/startup/TestTomcatNoServer.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.startup; + +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Test; + +import org.apache.catalina.core.StandardContext; +import org.apache.tomcat.util.descriptor.DigesterFactory; +import org.apache.tomcat.util.descriptor.XmlErrorHandler; +import org.apache.tomcat.util.descriptor.web.WebRuleSet; +import org.apache.tomcat.util.descriptor.web.WebXml; +import org.apache.tomcat.util.digester.Digester; +import org.xml.sax.InputSource; + + +/** + * Tests that do not require a Tomcat instance to be started. + */ +public class TestTomcatNoServer { + + @Test + public void testDefaultMimeTypeMappings() throws Exception { + StandardContext ctx = new StandardContext(); + + Tomcat.initWebappDefaults(ctx); + + InputSource globalWebXml = new InputSource(new File("conf/web.xml").getAbsoluteFile().toURI().toString()); + + WebXml webXmlDefaultFragment = new WebXml(); + webXmlDefaultFragment.setOverridable(true); + webXmlDefaultFragment.setDistributable(true); + webXmlDefaultFragment.setAlwaysAddWelcomeFiles(false); + + Digester digester = DigesterFactory.newDigester(true, true, new WebRuleSet(), true); + XmlErrorHandler handler = new XmlErrorHandler(); + digester.setErrorHandler(handler); + digester.push(webXmlDefaultFragment); + digester.parse(globalWebXml); + Assert.assertEquals(0, handler.getErrors().size()); + Assert.assertEquals(0, handler.getWarnings().size()); + + Map<String,String> webXmlMimeMappings = webXmlDefaultFragment.getMimeMappings(); + + Set<String> embeddedExtensions = new HashSet<>(); + embeddedExtensions.addAll(Arrays.asList(ctx.findMimeMappings())); + + // Find entries present in conf/web.xml that are missing in embedded + Set<String> missingInEmbedded = new HashSet<>(); + missingInEmbedded.addAll(webXmlMimeMappings.keySet()); + missingInEmbedded.removeAll(embeddedExtensions); + if (missingInEmbedded.size() > 0) { + for (String missingExtension : missingInEmbedded) { + System.out.println("Missing in embedded: [" + missingExtension + + "]-[" + webXmlMimeMappings.get(missingExtension) + "]"); + } + Assert.fail("Embedded is missing [" + missingInEmbedded.size() + "] entires compared to conf/web.xml"); + } + + // Find entries present in embedded that are missing in conf/web.xml + Set<String> missingInWebXml = new HashSet<>(); + missingInWebXml.addAll(embeddedExtensions); + missingInWebXml.removeAll(webXmlMimeMappings.keySet()); + if (missingInWebXml.size() > 0) { + for (String missingExtension : missingInWebXml) { + System.out.println("Missing in embedded: [" + missingExtension + + "]-[" + ctx.findMimeMapping(missingExtension) + "]"); + } + Assert.fail("Embedded is missing [" + missingInWebXml.size() + "] entires compared to conf/web.xml"); + } + } +} diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 0d1f5f5..75146d8 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -56,6 +56,11 @@ <code>HTTP_HOST</code> variable rather than extracting it from the <code>Host</code> header as this allows HTTP/2 to be supported. (markt) </fix> + <fix> + Switch Tomcat embedded to loading MIME type mappings from a property + file generated from the default <code>web.xml</code> so the MIME type + mappings are consistent regardless of how Tomcat is started. (markt) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org