Wenn der Tomcat nicht will, dann zwing ihn!

Dieser Beitrag soll auf ein Problem hinweisen, welches mir kürzlich Kopfschmerzen bereitete. Im Zuge des Updates einer Webapplikation wurde der ausführende Tomcat 7 durch einen Tomcat 8 mit der gleichen Konfiguration ersetzt. Die Webapplikation versendet in bestimmten Fällen automatisiert E-Mails. Gelegentlich kam es beim Versand vor, dass diese E-Mails nicht in der gewünschten Codierung ankamen. Nach längerem Debuggen konnte ich das Problem verorten, nur beim ersten Absenden eines Formulars nach dem Neustart des Tomcats trat es auf. Daraufhin wurde an diversen Stellen geprüft, ob UTF-8 für Codierung und Decodierung Verwendung findet. In der web.xml des Tomcat war folgender Filter auskommentiert.

Das Einkommentieren dieses Codes hatte keine Wirkung auf das Codierungsproblem. Damit der Filter auf Dokumente, welche der Tomcat verarbeitet, wirkt, war der Parameter „forceEncoding“ im Filter zu ergänzen. Außerdem erfolgte die Integration eines „Filter Mappings“, durch das der Filter auf sämtliche Dokumente angewandt wird. Problem behoben 🙂 !

 

 

Eine Antwort zu “Wenn der Tomcat nicht will, dann zwing ihn!”

  1. Thorsten Schöning sagt:

    „forceEncoding“ dürfte nicht funktionieren, das gibt es in der Klasse nicht, die Property heißt auch in der offiziellen Doku immer nur „ignore“:

    > Nov 26, 2018 3:03:20 PM org.apache.catalina.filters.FilterBase init
    > WARNUNG: The property [forceEncoding] is not defined for filters of type [org.apache.catalina.filters.SetCharacterEncodingFilter]

    https://tomcat.apache.org/tomcat-8.5-doc/config/filter.html#Set_Character_Encoding_Filter/Initialisation_parameters
    https://github.com/apache/tomcat85/blob/trunk/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java#L76
    https://github.com/apache/tomcat70/blob/trunk/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java#L76

    Die eigentlich relevante Änderung im konkreten Fall dürfte also lediglich das Mapping gewesen sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.