<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>KB-1506 How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>KB-1506 How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations</link><pubDate>Mon, 26 Feb 2018 18:26:36 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Nick Vigilante</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Current Revision posted to Appian Knowledge Base by Nick Vigilante on 2/26/2018 6:26:36 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching the&amp;nbsp;customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File available:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that the&amp;nbsp;XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39;&amp;nbsp;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating the&amp;nbsp;Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If the XML is not constructed appropriately, the following error may be thrown:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in the&amp;nbsp;customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in the&amp;nbsp;customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If these attributes are present, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Since there isn&amp;#39;t a good way to statistically determine if an action is cancellable, it is recommended to&amp;nbsp;manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in the&amp;nbsp;customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove, or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/a&gt;,&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to, legacy interfaces, application design&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/22</link><pubDate>Mon, 22 Jan 2018 08:24:56 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Nick Vigilante</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 22 posted to Appian Knowledge Base by Nick Vigilante on 1/22/2018 8:24:56 AM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching the&amp;nbsp;customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File available:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that the&amp;nbsp;XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39;&amp;nbsp;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating the&amp;nbsp;Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If the XML is not constructed appropriately, the following error may be thrown:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in the&amp;nbsp;customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in the&amp;nbsp;customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If these attributes are present, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Since there isn&amp;#39;t a good way to statistically determine if an action is cancellable, it is recommended to&amp;nbsp;manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in the&amp;nbsp;customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove, or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/a&gt;,&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to, legacy interfaces, application design&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/21</link><pubDate>Sun, 21 Jan 2018 17:19:39 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 21 posted to Appian Knowledge Base by Parmida Borhani on 1/21/2018 5:19:39 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39;&amp;nbsp;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Since there isn&amp;#39;t a good way to statistically determine if an action is cancellable, it is recommended to&amp;nbsp;manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove, or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/a&gt;,&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to, legacy interfaces, application design&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/20</link><pubDate>Thu, 18 Jan 2018 23:37:16 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 20 posted to Appian Knowledge Base by Parmida Borhani on 1/18/2018 11:37:16 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen automatically when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39;&amp;nbsp;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove, or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to, legacy interfaces, application design&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/19</link><pubDate>Thu, 18 Jan 2018 23:34:00 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 19 posted to Appian Knowledge Base by Parmida Borhani on 1/18/2018 11:34:00 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen automatically when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove, or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to, legacy interfaces, application design&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/18</link><pubDate>Thu, 18 Jan 2018 23:28:57 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 18 posted to Appian Knowledge Base by Parmida Borhani on 1/18/2018 11:28:57 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to specific folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&amp;nbsp;Be sure to download Struts from Fedora (see link above) and copy all the jars if needed. Otherwise, the Appian installation will provide the jars by default and no action is needed.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen automatically when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are of the correct structure. Struts configuration files declare which DTD verification file to use at the top of the XML file. This declaration needs to be updated to point to the latest DTD in every Struts Configuration File.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/17</link><pubDate>Tue, 16 Jan 2018 23:58:46 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 17 posted to Appian Knowledge Base by Parmida Borhani on 1/16/2018 11:58:46 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/16</link><pubDate>Sun, 07 Jan 2018 20:18:58 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 16 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 8:18:58 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Affected Versions&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This article applies to Appian 18.1 and later.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Last Reviewed: January 2018&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT KB-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/15</link><pubDate>Sun, 07 Jan 2018 20:17:58 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 15 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 8:17:58 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/14</link><pubDate>Sun, 07 Jan 2018 20:14:01 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 14 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 8:14:01 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/13</link><pubDate>Sun, 07 Jan 2018 20:13:25 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 13 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 8:13:25 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;Replace &lt;code&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/12</link><pubDate>Sun, 07 Jan 2018 20:03:47 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 12 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 8:03:47 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.perform&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.execute&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace: &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.action&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtil&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ValidatorUtils&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; (namespace:&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.util&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.commons.validator.routines.EmailValidator&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.taglib.tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; namespace&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;org.apache.struts.tiles.taglib&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;DataSourceConfig&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Locale.getDefault&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.getDataSource&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Globals.LOCALE_KEY&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.saveErrors&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessages&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionErrors ...)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;saveErrors(... actionMessages...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.GLOBAL_ERROR&lt;/span&gt;&lt;/code&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors.add&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionError &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;add(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;constructor called with &lt;code&gt;contextRelative&lt;/code&gt; parameter&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call without &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionForward(...)&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;DynaActionFormClass.clear&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ExceptionHandler.storeException&lt;/span&gt;&lt;span style="font-weight:400;"&gt; called with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ActionMessage&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionError &amp;hellip;)&lt;/span&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;span style="font-weight:400;"&gt;storeException(... actionMessage &amp;hellip;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestProcessor.log&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove or use Commons Logging class instead&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;FormBeanConfig.setDynamic&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig.contextRelative&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig&lt;/span&gt;&lt;span style="font-weight:400;"&gt; constructor called with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative &lt;/span&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Call with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module &lt;/span&gt;&lt;span style="font-weight:400;"&gt;parameter instead&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;E.g. &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... contextRelative &amp;hellip;)&lt;/span&gt;&lt;span style="font-weight:400;"&gt; becomes &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ForwardConfig(... module ...)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ModuleException.error&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;message&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ModuleException.getError&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;MultipartRequestWrapper.getRequest&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Now returns &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ServletRequestWrapper&lt;/span&gt;&lt;span style="font-weight:400;"&gt; instead of &lt;/span&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Note: Casting to &lt;/span&gt;&lt;span style="font-weight:400;"&gt;HttpServletRequest&lt;/span&gt;&lt;span style="font-weight:400;"&gt; is safe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;SERVLET_CONTEXT_PARAM&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;HTTP_SERVLET_REQUEST_PARAM&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.ACTION_ERRORS_KEY&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ACTION_MESSAGES_PARAM&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getUserLocale&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;validator.Resources.getActionError&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;getActionMessage&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.computeURL&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;TagUtils.computeURL&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.selectModule&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.selectModule&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleName&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleName&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getRequestModuleConfig&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getRequestModuleConfig&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.saveException&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;TagUtils.saveException&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModuleConfig&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModuleConfig&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.getModulePrefixes&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ModuleUtils.getModulePrefixes&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;MessageTag.defaultLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;BaseHandlerTag.defaultLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.defaultLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;JavascriptValidatorTag.defaultLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;OptionTag.defaultLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ErrorsTag.lineEnd&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;HtmlTag.getCurrentLocale&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ImgTag.isContextRelativeSet&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ImgTag.lowsrc&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove usages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getActionErrors&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;getActionMessages&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getProperty&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;PropertyUtils.getProperty&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.write&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;TagUtils.write&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.writePrevious&lt;/span&gt;&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;TagUtils.writePrevious&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;RequestUtils&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils&lt;/span&gt;&lt;span style="font-weight:400;"&gt; usages not covered above&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Replace &lt;/span&gt;&lt;span style="font-weight:400;"&gt;RequestUtils.*&lt;/span&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;span style="font-weight:400;"&gt;ResponseUtils.*&lt;/span&gt;&lt;span style="font-weight:400;"&gt; usages with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;TagUtils.getInstance().*&lt;/span&gt;&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.saveErrors&lt;/code&gt; c&lt;span style="font-weight:400;"&gt;alled with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionErrors &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Call with &lt;code&gt;ActionMessages&lt;/code&gt; parameter instead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionErrors.GLOBAL_ERROR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionMessage.GLOBAL_MESSAGE&lt;/span&gt;&lt;/code&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionErrors.add&lt;/code&gt;&amp;nbsp;&lt;span style="font-weight:400;"&gt;called with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;ActionError &lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;parameter&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Call with &lt;code&gt;ActionMessage&lt;/code&gt; parameter instead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ActionForward constructor called with contextRelative parameter&lt;/td&gt;
&lt;td&gt;Call without contextRelative parameter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/11</link><pubDate>Sun, 07 Jan 2018 19:48:01 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 11 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 7:48:01 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web.xml%20Changes"&gt;web.xml Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;code&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/10</link><pubDate>Sun, 07 Jan 2018 19:43:04 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 10 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 7:43:04 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Cancellable%20Actions"&gt;Cancellable Actions&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Java%20API%20Changes"&gt;Java API Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;code&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Cancellable Actions"&gt;&lt;/a&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Java API Changes"&gt;&lt;/a&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/9</link><pubDate>Sun, 07 Jan 2018 19:34:24 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 9 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 7:34:24 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Find%20the%20Struts%20Action%20Servlet%20in%20the%20web.xml%20file"&gt;Find the Struts Action Servlet in the web.xml file&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Make%20the%20same%20changes%20as%20found%20in%20the%20Appian-provided%20web.xml"&gt;Make the same changes as found in the Appian-provided web.xml&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Search%20for%20all%20Struts%20Configuration%20Files"&gt;Search for all Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20message-resources%20tag"&gt;Add message-resources tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Make the same changes as found in the Appian-provided web.xml"&gt;&lt;/a&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a id="Search for all Struts Configuration Files"&gt;&lt;/a&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a id="Add message-resources tag"&gt;&lt;/a&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/8</link><pubDate>Sun, 07 Jan 2018 19:32:17 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 8 posted to Appian Knowledge Base by Parmida Borhani on 1/7/2018 7:32:17 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Find%20the%20Struts%20Action%20Servlet%20in%20the%20web.xml%20file"&gt;Find the Struts Action Servlet in the web.xml file&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Make%20the%20same%20changes%20as%20found%20in%20the%20Appian-provided%20web.xml"&gt;Make the same changes as found in the Appian-provided web.xml&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Search%20for%20all%20Struts%20Configuration%20Files"&gt;Search for all Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20message-resources%20tag"&gt;Add message-resources tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#Notes"&gt;Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Find the Struts Action Servlet in the web.xml file"&gt;&lt;/a&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Make the same changes as found in the Appian-provided web.xml"&gt;&lt;/a&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a id="Search for all Struts Configuration Files"&gt;&lt;/a&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a id="Add message-resources tag"&gt;&lt;/a&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;a id="Notes"&gt;&lt;/a&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian Technical Support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: how-to&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/1</link><pubDate>Fri, 22 Dec 2017 01:33:00 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 1 posted to Appian Knowledge Base by Parmida Borhani on 12/22/2017 1:33:00 AM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide is intended to provide a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are as follows:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customer customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the web.xml file. For example,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided web.xml.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt; if you have a github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the debug parameter from the action servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the application parameter from the action servlet. It looks like this: &amp;lt;init-param&amp;gt; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&amp;lt;/init-param&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Add the following chainConfig parameter to the action servlet:&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet. The following&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;lt;init-param&amp;gt;&lt;span style="font-weight:400;"&gt; entries are no longer supported and should be removed:&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;mapping&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;bufferSize.&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;content. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;locale. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;maxFileSize. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;nocache. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;multipartClass. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;tempDir. This is now supported by the &amp;lt;controller&amp;gt; element in the Framework Struts Configuration file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;factory. This is now supported by the &amp;lt;message-resources&amp;gt; element in Struts Configuration files.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;null. This is now supported by the &amp;lt;message-resources&amp;gt; element in Struts Configuration files.&lt;/span&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files. Example:&lt;br /&gt;You find this parameter inside your action servlet:&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;br /&gt; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;You would remove this parameter, and then add an equivalent set-property element the inside the &amp;lt;controller&amp;gt; element in your customized version of struts-config-framework.xml, like so:&lt;br /&gt; &amp;lt;controller&amp;gt;&lt;br /&gt; ...&lt;br /&gt; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/controller&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/7</link><pubDate>Thu, 21 Dec 2017 21:57:35 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 7 posted to Appian Knowledge Base by Parmida Borhani on 12/21/2017 9:57:35 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Find%20the%20Struts%20Action%20Servlet%20in%20the%20web.xml%20file"&gt;Find the Struts Action Servlet in the web.xml file&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Make%20the%20same%20changes%20as%20found%20in%20the%20Appian-provided%20web.xml"&gt;Make the same changes as found in the Appian-provided web.xml&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Search%20for%20all%20Struts%20Configuration%20Files"&gt;Search for all Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20message-resources%20tag"&gt;Add message-resources tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Find the Struts Action Servlet in the web.xml file"&gt;&lt;/a&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Make the same changes as found in the Appian-provided web.xml"&gt;&lt;/a&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a id="Search for all Struts Configuration Files"&gt;&lt;/a&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a id="Add message-resources tag"&gt;&lt;/a&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-bean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http://jakarta.apache.org/struts/tags-nested&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag. The &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the &lt;code&gt;struts-config-*.xml&lt;/code&gt; file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&lt;code&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&lt;code&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/action&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You confirm that the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, and &lt;code&gt;scope&lt;/code&gt; parameters match the values specified on the form. Then, you remove those parameters from the &lt;code&gt;form&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; to the action:&lt;br /&gt; &lt;code&gt;&amp;lt;action path=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; type=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; name=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not &lt;code&gt;cancellable&lt;/code&gt; will result in an &lt;code&gt;InvalidCancelException&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting &lt;code&gt;cancellable=&amp;quot;true&amp;quot;&lt;/code&gt; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;With&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.perform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Action.execute&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ActionError (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.commons.validator.routines.EmailValidator&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.taglib.tiles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;org.apache.struts.tiles.taglib&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DataSourceConfig&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;Action.defaultLocale&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Locale.getDefault&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.getDataSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Action.LOCALE_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Globals.LOCALE_KEY&amp;nbsp;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/6</link><pubDate>Thu, 21 Dec 2017 21:37:15 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 6 posted to Appian Knowledge Base by Parmida Borhani on 12/21/2017 9:37:15 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Find%20the%20Struts%20Action%20Servlet%20in%20the%20web.xml%20file"&gt;Find the Struts Action Servlet in the web.xml file&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Make%20the%20same%20changes%20as%20found%20in%20the%20Appian-provided%20web.xml"&gt;Make the same changes as found in the Appian-provided web.xml&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Search%20for%20all%20Struts%20Configuration%20Files"&gt;Search for all Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20message-resources%20tag"&gt;Add message-resources tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;code&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/code&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Find the Struts Action Servlet in the web.xml file"&gt;&lt;/a&gt;Find the Struts Action Servlet in the &lt;code&gt;web.xml&lt;/code&gt; file.&amp;nbsp;E.g.,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Make the same changes as found in the Appian-provided web.xml"&gt;&lt;/a&gt;Make the same changes as found in the Appian-provided &lt;code&gt;web.xml&lt;/code&gt;.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;If you have a Github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the &lt;code&gt;debug&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the &lt;code&gt;application&lt;/code&gt; parameter from the &lt;code&gt;action&lt;/code&gt; servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following &lt;code&gt;chainConfig&lt;/code&gt; parameter to the &lt;code&gt;action&lt;/code&gt; servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a&gt;&lt;/a&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapping&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bufferSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;locale&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxFileSize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nocache&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multipartClass&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tempDir&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;factory&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent &lt;code&gt;set-property&lt;/code&gt; element the inside the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in your customized version of &lt;code&gt;struts-config-framework.xml&lt;/code&gt;, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the &lt;code&gt;application&lt;/code&gt; &lt;code&gt;init-param&lt;/code&gt; from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a id="Search for all Struts Configuration Files"&gt;&lt;/a&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a id="Add message-resources tag"&gt;&lt;/a&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (&lt;code&gt;*.DTD&lt;/code&gt;) files are used to verify that Struts Configuration Files (&lt;code&gt;struts-config-*.xml&lt;/code&gt;) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;&lt;/a&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&amp;nbsp;If you fail to construct the XML appropriately, you may get an app server error like this:&lt;/p&gt;
&lt;pre&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/pre&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;table style="height:211px;" width="147"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replace&lt;/td&gt;
&lt;td&gt;With&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;http://jakarta.apache.org/struts/tags-bean&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-bean&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;http://jakarta.apache.org/struts/tags-nested&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-nested&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-html&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-html&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-logic&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-logic&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://jakarta.apache.org/struts/tags-tiles&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://struts.apache.org/tags-tiles&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/c-rt.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/core_rt&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/fmt-rt.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/fmt_rt&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/sql-rt.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/sql_rt&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;/WEB-INF/x-rt.tld&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-weight:400;"&gt;http://java.sun.com/jstl/xml_rt&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-bean with &lt;a href="http://struts.apache.org/tags-bean"&gt;http://struts.apache.org/tags-bean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-nested with &lt;a href="http://struts.apache.org/tags-nested"&gt;http://struts.apache.org/tags-nested&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-html with &lt;a href="http://struts.apache.org/tags-html"&gt;http://struts.apache.org/tags-html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-logic with &lt;a href="http://struts.apache.org/tags-logic"&gt;http://struts.apache.org/tags-logic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-tiles with &lt;a href="http://struts.apache.org/tags-tiles"&gt;http://struts.apache.org/tags-tiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c.tld with &lt;a href="http://java.sun.com/jstl/core"&gt;http://java.sun.com/jstl/core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt.tld with &lt;a href="http://java.sun.com/jstl/fmt"&gt;http://java.sun.com/jstl/fmt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql.tld with &lt;a href="http://java.sun.com/jstl/sql"&gt;http://java.sun.com/jstl/sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x.tld with &lt;a href="http://java.sun.com/jstl/xml"&gt;http://java.sun.com/jstl/xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c-rt.tld with &lt;a href="http://java.sun.com/jstl/core_rt"&gt;http://java.sun.com/jstl/core_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt-rt.tld with &lt;a href="http://java.sun.com/jstl/fmt_rt"&gt;http://java.sun.com/jstl/fmt_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql-rt.tld with &lt;a href="http://java.sun.com/jstl/sql_rt"&gt;http://java.sun.com/jstl/sql_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x-rt.tld with &lt;a href="http://java.sun.com/jstl/xml_rt"&gt;http://java.sun.com/jstl/xml_rt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example 1: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;Example 2: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &amp;lt;form&amp;gt; tag. The name, scope, and type attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the struts-config-*.xml file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;Example:&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;/p&gt;
&lt;p&gt;You confirm that the name, type, and scope parameters match the values specified on the form. Then, you remove those parameters from the form.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value cancellable=&amp;quot;true&amp;quot; to the action:&lt;br /&gt; &amp;lt;action path=&amp;quot;...&amp;quot;&lt;br /&gt; type=&amp;quot;...&amp;quot;&lt;br /&gt; name=&amp;quot;...&amp;quot;&lt;br /&gt; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;br /&gt; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not cancellable will result in an InvalidCancelException.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting cancellable=&amp;quot;true&amp;quot; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replace&lt;/td&gt;
&lt;td&gt;With&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action.perform&lt;/td&gt;
&lt;td&gt;Action.execute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ActionError (namespace: org.apache.struts.action)&lt;/td&gt;
&lt;td&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/td&gt;
&lt;td&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/5</link><pubDate>Thu, 21 Dec 2017 21:03:51 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 5 posted to Appian Knowledge Base by Parmida Borhani on 12/21/2017 9:03:51 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;Web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the web.xml file. For example,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided web.xml.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt; if you have a github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the debug parameter from the action servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the application parameter from the action servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following chainConfig parameter to the action servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &amp;lt;init-param&amp;gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;mapping&lt;/li&gt;
&lt;li&gt;bufferSize&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;content&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;li&gt;locale&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;maxFileSize&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;nocache&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;multipartClass&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;tempDir&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;factory&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;li&gt;null&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files. For example,&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent set-property element the inside the &amp;lt;controller&amp;gt; element in your customized version of struts-config-framework.xml, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the application init-param from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (*.DTD) files are used to verify that Struts Configuration Files (struts-config-*.xml) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&lt;/p&gt;
&lt;p&gt;Example Error: If you fail to construct the XML appropriately, you may get an app server error like this:&lt;br /&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-bean with &lt;a href="http://struts.apache.org/tags-bean"&gt;http://struts.apache.org/tags-bean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-nested with &lt;a href="http://struts.apache.org/tags-nested"&gt;http://struts.apache.org/tags-nested&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-html with &lt;a href="http://struts.apache.org/tags-html"&gt;http://struts.apache.org/tags-html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-logic with &lt;a href="http://struts.apache.org/tags-logic"&gt;http://struts.apache.org/tags-logic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-tiles with &lt;a href="http://struts.apache.org/tags-tiles"&gt;http://struts.apache.org/tags-tiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c.tld with &lt;a href="http://java.sun.com/jstl/core"&gt;http://java.sun.com/jstl/core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt.tld with &lt;a href="http://java.sun.com/jstl/fmt"&gt;http://java.sun.com/jstl/fmt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql.tld with &lt;a href="http://java.sun.com/jstl/sql"&gt;http://java.sun.com/jstl/sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x.tld with &lt;a href="http://java.sun.com/jstl/xml"&gt;http://java.sun.com/jstl/xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c-rt.tld with &lt;a href="http://java.sun.com/jstl/core_rt"&gt;http://java.sun.com/jstl/core_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt-rt.tld with &lt;a href="http://java.sun.com/jstl/fmt_rt"&gt;http://java.sun.com/jstl/fmt_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql-rt.tld with &lt;a href="http://java.sun.com/jstl/sql_rt"&gt;http://java.sun.com/jstl/sql_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x-rt.tld with &lt;a href="http://java.sun.com/jstl/xml_rt"&gt;http://java.sun.com/jstl/xml_rt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example 1: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;Example 2: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &amp;lt;form&amp;gt; tag. The name, scope, and type attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the struts-config-*.xml file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;Example:&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;/p&gt;
&lt;p&gt;You confirm that the name, type, and scope parameters match the values specified on the form. Then, you remove those parameters from the form.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value cancellable=&amp;quot;true&amp;quot; to the action:&lt;br /&gt; &amp;lt;action path=&amp;quot;...&amp;quot;&lt;br /&gt; type=&amp;quot;...&amp;quot;&lt;br /&gt; name=&amp;quot;...&amp;quot;&lt;br /&gt; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;br /&gt; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not cancellable will result in an InvalidCancelException.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting cancellable=&amp;quot;true&amp;quot; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;table style="height:215px;" width="99"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replace&lt;/td&gt;
&lt;td&gt;With&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action.perform&lt;/td&gt;
&lt;td&gt;Action.execute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ActionError (namespace: org.apache.struts.action)&lt;/td&gt;
&lt;td&gt;ActionMessage (namespace: org.apache.struts.action)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;/td&gt;
&lt;td&gt;ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Any URIs seen in this document are internal to the Appian product. E.g. Usages of &lt;/span&gt;&lt;span style="font-weight:400;"&gt;jakarta.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; or &lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts.apache.org&lt;/span&gt;&lt;span style="font-weight:400;"&gt; do not point to an external resource from the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The instructions in this document were put together by upgrading a common set of customizations and may not cover your particular situation. For additional information on how to upgrade struts customizations, see &lt;/span&gt;&lt;a href="https://wiki.apache.org/struts/StrutsUpgrade"&gt;&lt;span style="font-weight:400;"&gt;https://wiki.apache.org/struts/StrutsUpgrade&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt; and contact Appian support for additional questions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>DRAFT INT-XXXX How to update legacy customizations</title><link>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations/revision/4</link><pubDate>Thu, 21 Dec 2017 21:01:42 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:09598915-1ef3-4715-a9d3-93a408ae7ca9</guid><dc:creator>Parmida Borhani</dc:creator><comments>https://community.appian.com/support/w/kb/736/kb-1506-how-to-update-legacy-customizations#comments</comments><description>Revision 4 posted to Appian Knowledge Base by Parmida Borhani on 12/21/2017 9:01:42 PM&lt;br /&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The Struts library and its dependencies have been upgraded in Appian 18.1. This guide provides a set of instructions that&amp;nbsp;users can follow to update existing legacy customizations.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;The library version changes are:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts: 1.1 to 1.3.10-20.fc27 (&lt;/span&gt;&lt;a href="https://koji.fedoraproject.org/koji/buildinfo?buildID=932778"&gt;&lt;span style="font-weight:400;"&gt;provided by Fedora&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Taglibs: 1.0.6 to 1.2.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-chain: 1.1 to 1.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-beanutils: 1.8.0 to 1.9.3&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Commons-digester: 1.5 to 1.8&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Oro: 2.0.6 to 2.0.8&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;This legacy library upgrade affects customizations in the following types of files:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts configuration files (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;struts-config-*.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Tag Library Descriptors (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.tld&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Java Server Pages (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.jsp&lt;/span&gt;&lt;span style="font-weight:400;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Struts Actions (&lt;/span&gt;&lt;span style="font-weight:400;"&gt;*.java&lt;/span&gt;&lt;span style="font-weight:400;"&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight:400;"&gt;Instructions&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Core%20Struts%20JARs"&gt;Core Struts JARs&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Web.xml%20Changes"&gt;Web.xml Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Add%20a%20Default%20Message%20Resource%20to%20Every%20Custom%20Struts%20Configuration%20File"&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Use%20the%20Latest%20DTD%20Validators%20in%20Every%20Custom%20Struts%20Configuration%20File"&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a&gt;[Uncommon] XML Structure Changes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Validating%20Your%20Struts%20Configuration%20Files"&gt;Validating Your Struts Configuration Files&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#JSP%20Replacements"&gt;JSP Replacements&lt;/a&gt;&lt;/span&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#URI%20Replacements"&gt;URI Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Replace%20Attributes%20of%20Form%20Tag"&gt;Replace Attributes of Form Tag&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight:400;"&gt;&lt;a href="#Other%20Attribute%20Replacements"&gt;Other Attribute Replacements&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Core Struts JARs"&gt;&lt;/a&gt;Core Struts JARs&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If your customizations require copying Core Struts JARs to other folders (an uncommon scenario), please note that Struts now consists of multiple jars, including &lt;/span&gt;&lt;span style="font-weight:400;"&gt;core&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;el&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;tiles&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, &lt;/span&gt;&lt;span style="font-weight:400;"&gt;taglib&lt;/span&gt;&lt;span style="font-weight:400;"&gt;, and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;extras&lt;/span&gt;&lt;span style="font-weight:400;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Web.xml Changes"&gt;&lt;/a&gt;Web.xml Changes&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;If you are using a custom &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; file that overwrites the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;web.xml&lt;/span&gt;&lt;span style="font-weight:400;"&gt; provided by Appian (an uncommon scenario), you will need to make the following changes.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Find the Struts Action Servlet in the web.xml file. For example,&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight:400;"&gt;look for:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;servlet-class&amp;gt;com.appiancorp.common.struts.AppianActionServlet&amp;lt;/servlet-class&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Make the same changes as found in the Appian-provided web.xml.&amp;nbsp;&lt;strong&gt;Note:&lt;/strong&gt; if you have a github branch that you merge with Appian to get Appian&amp;#39;s changes, this step will happen when you merge the branches.&lt;/span&gt;
&lt;ol&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Remove the debug parameter from the action servlet. It looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;2&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Remove the application parameter from the action servlet. It looks like this:&lt;br /&gt; &lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;resources.application&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Add the following chainConfig parameter to the action servlet:&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt; &amp;lt;param-name&amp;gt;chainConfig&amp;lt;/param-name&amp;gt;&lt;br /&gt; &amp;lt;param-value&amp;gt;org/apache/struts/tiles/chain-config.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[Uncommon] Address any additional customizations you have made to the Struts Action Servlet.&amp;nbsp;The following &amp;lt;init-param&amp;gt; entries are no longer supported and should be removed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;mapping&lt;/li&gt;
&lt;li&gt;bufferSize&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;content&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file, under the name contentType.&lt;/li&gt;
&lt;li&gt;locale&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;maxFileSize&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;nocache&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;multipartClass&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;tempDir&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt; element in the Framework Struts Configuration file.&lt;/li&gt;
&lt;li&gt;factory&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;li&gt;null&lt;br /&gt;This is now supported by the &lt;code&gt;&amp;lt;message-resources&amp;gt;&lt;/code&gt; element in Struts Configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you need to preserve the same functionality that these unsupported parameters were providing, they must be added to the appropriate Struts Configuration Files. For example,&lt;/p&gt;
&lt;p&gt;You find this parameter inside your action servlet:&lt;br /&gt;&lt;code&gt;&amp;lt;init-param&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-name&amp;gt;maxFileSize&amp;lt;/param-name&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;param-value&amp;gt;1G&amp;lt;/param-value&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/init-param&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You would remove this parameter, and then add an equivalent set-property element the inside the &amp;lt;controller&amp;gt; element in your customized version of struts-config-framework.xml, like so:&lt;br /&gt; &lt;code&gt;&amp;lt;controller&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;set-property property=&amp;quot;maxFileSize&amp;quot; value=&amp;quot;1G&amp;quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;/controller&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Add a Default Message Resource to Every Custom Struts Configuration File"&gt;&lt;/a&gt;Add a Default Message Resource to Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Due to the removal of the application init-param from the Struts Action Servlet as described in the previous section, a &lt;code&gt;message-resources&lt;/code&gt; tag must be added to every Struts Configuration File.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for all Struts Configuration Files. All Struts Configuration Files must start with &lt;code&gt;struts-config-&lt;/code&gt;, so searching your customization directories for file names that match the form &lt;code&gt;struts-config-*.xml&lt;/code&gt; should provide a list of files to update.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add message-resources tag. Add the following line to every Struts Configuration File that you have:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;message-resources parameter=&amp;quot;resources.application&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line must be added after the &lt;code&gt;&amp;lt;action-mappings&amp;gt;&lt;/code&gt; tag, but before any &lt;code&gt;&amp;lt;plug-in&amp;gt;&lt;/code&gt; tag and before the closing &lt;code&gt;&amp;lt;/struts-config&amp;gt;&lt;/code&gt; tag. Be sure to validate that your XML is still valid, as described in the next section.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;a id="Use the Latest DTD Validators in Every Custom Struts Configuration File"&gt;&lt;/a&gt;Use the Latest DTD Validators in Every Custom Struts Configuration File&lt;/h3&gt;
&lt;p&gt;Document Type Definition (*.DTD) files are used to verify that Struts Configuration Files (struts-config-*.xml) are correct. Struts configuration files declare what DTD verification file to use at the top of the XML file. These declarations need to be updated to point to the latest DTD.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&amp;#39;&amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &lt;a href="http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;&amp;#39;http://struts.apache.org/dtds/struts-config_1_3.dtd&amp;#39;&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;Note the change in two numbers as well as the path to the DTD.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:400;"&gt;&lt;strong&gt;Example 2:&lt;/strong&gt; change&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.1//EN&amp;#39; &amp;#39;/struts-config_1_1.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code&gt;&amp;lt;!DOCTYPE struts-config PUBLIC &amp;#39;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&amp;#39; &amp;#39;/struts-config_1_3.dtd&amp;#39; &amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;[Uncommon] XML Structure Changes&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;debug&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;controller&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;dynamic&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;form-bean&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; parameter of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;forward&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; element is no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;The &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-sources&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; and &lt;/span&gt;&lt;span style="font-weight:400;"&gt;&amp;lt;data-source&amp;gt;&lt;/span&gt;&lt;span style="font-weight:400;"&gt; elements are no longer supported and should be removed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;span style="font-weight:400;"&gt;&lt;a id="Validating Your Struts Configuration Files"&gt;&lt;/a&gt;Validating Your Struts Configuration Files&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;After updating the XML file to point to the new DTD, open the XML file in a editor that verifies the XML against its DTD (e.g. IntelliJ IDEA, Eclipse, Visual Studio) and confirm that there are no errors.&lt;/p&gt;
&lt;p&gt;Example Error: If you fail to construct the XML appropriately, you may get an app server error like this:&lt;br /&gt;ERROR org.apache.commons.digester.Digester - Parse Error at line X column Y: The content of element type &amp;quot;struts-config&amp;quot; must match &amp;quot;(display-name?,description?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)&amp;quot;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="JSP Replacements"&gt;&lt;/a&gt;JSP Replacements&lt;/h3&gt;
&lt;h4&gt;&lt;a id="URI Replacements"&gt;&lt;/a&gt;URI Replacements&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-bean with &lt;a href="http://struts.apache.org/tags-bean"&gt;http://struts.apache.org/tags-bean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-nested with &lt;a href="http://struts.apache.org/tags-nested"&gt;http://struts.apache.org/tags-nested&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-html with &lt;a href="http://struts.apache.org/tags-html"&gt;http://struts.apache.org/tags-html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-logic with &lt;a href="http://struts.apache.org/tags-logic"&gt;http://struts.apache.org/tags-logic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace http://jakarta.apache.org/struts/tags-tiles with &lt;a href="http://struts.apache.org/tags-tiles"&gt;http://struts.apache.org/tags-tiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c.tld with &lt;a href="http://java.sun.com/jstl/core"&gt;http://java.sun.com/jstl/core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt.tld with &lt;a href="http://java.sun.com/jstl/fmt"&gt;http://java.sun.com/jstl/fmt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql.tld with &lt;a href="http://java.sun.com/jstl/sql"&gt;http://java.sun.com/jstl/sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x.tld with &lt;a href="http://java.sun.com/jstl/xml"&gt;http://java.sun.com/jstl/xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/c-rt.tld with &lt;a href="http://java.sun.com/jstl/core_rt"&gt;http://java.sun.com/jstl/core_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/fmt-rt.tld with &lt;a href="http://java.sun.com/jstl/fmt_rt"&gt;http://java.sun.com/jstl/fmt_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/sql-rt.tld with &lt;a href="http://java.sun.com/jstl/sql_rt"&gt;http://java.sun.com/jstl/sql_rt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Replace /WEB-INF/x-rt.tld with &lt;a href="http://java.sun.com/jstl/xml_rt"&gt;http://java.sun.com/jstl/xml_rt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example 1: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/c.tld&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/core&amp;quot; prefix=&amp;quot;c&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;p&gt;Example 2: replace&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;/WEB-INF/fmt.tld&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;with&lt;br /&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jstl/fmt&amp;quot; prefix=&amp;quot;fmt&amp;quot; %&amp;gt;&lt;/code&gt;&lt;br /&gt;in every JSP where it is found.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Replace Attributes of Form Tag"&gt;&lt;/a&gt;Replace Attributes of Form Tag&lt;/h4&gt;
&lt;p&gt;Search all JSP files in your customization directories and check usages of the &amp;lt;form&amp;gt; tag. The name, scope, and type attributes are no longer supported and should be removed.&lt;/p&gt;
&lt;p&gt;If you find these attributes, check the struts-config-*.xml file containing the action configuration corresponding to this JSP file. If the corresponding action already has these parameters defined with the same values, no further action is necessary. Otherwise, add these parameters to the action mapping.&lt;/p&gt;
&lt;p&gt;Example:&lt;br /&gt;You find this form in one of your JSPs:&lt;br /&gt;&amp;lt;form name=&amp;quot;dashboardForm&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; action=&amp;quot;/admin/data/updateDashboard.do&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;You find the corresponding Struts Configuration file that contains the action mapping for the referenced action:&lt;br /&gt;&amp;lt;action path=&amp;quot;/admin/data/updateDashboard&amp;quot; type=&amp;quot;com.appiancorp.record.admin.UpdateDashboard&amp;quot; name=&amp;quot;dashboardForm&amp;quot; scope=&amp;quot;request&amp;quot;&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/action&amp;gt;&lt;/p&gt;
&lt;p&gt;You confirm that the name, type, and scope parameters match the values specified on the form. Then, you remove those parameters from the form.&lt;/p&gt;
&lt;h4&gt;&lt;a id="Other Attribute Replacements"&gt;&lt;/a&gt;Other Attribute Replacements&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;name&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;bean:include&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;page&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;Replace the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;locale&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;html&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;lang&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Replace the &lt;span style="font-weight:400;"&gt;contextRelative&lt;/span&gt;&lt;span style="font-weight:400;"&gt; attribute of the &lt;/span&gt;&lt;span style="font-weight:400;"&gt;img&lt;/span&gt;&lt;span style="font-weight:400;"&gt; tag with &lt;/span&gt;&lt;span style="font-weight:400;"&gt;module&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style="font-weight:400;"&gt;Cancellable Actions&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Struts actions which are cancellable now need to be specified as such in their corresponding Struts Configuration File.&lt;/p&gt;
&lt;p&gt;Where necessary, add the property and value cancellable=&amp;quot;true&amp;quot; to the action:&lt;br /&gt; &amp;lt;action path=&amp;quot;...&amp;quot;&lt;br /&gt; type=&amp;quot;...&amp;quot;&lt;br /&gt; name=&amp;quot;...&amp;quot;&lt;br /&gt; scope=&amp;quot;...&amp;quot; &amp;gt;&lt;br /&gt; cancellable=&amp;quot;true&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;Attempting to cancel an action which is not cancellable will result in an InvalidCancelException.&lt;/p&gt;
&lt;p&gt;Unfortunately, we haven&amp;#39;t found a good way to statically determine if an action is cancellable. It is recommended that you manually verify that performing (and cancelling if possible) every custom action in the GUI does not result in errors. However, if a less intensive approach is needed, setting cancellable=&amp;quot;true&amp;quot; on every custom action may be acceptable.&lt;/p&gt;
&lt;h3&gt;Java API Changes&lt;/h3&gt;
&lt;p&gt;Search all Java and JSP files in your customization directories for the following replacements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action.perform
&lt;ul&gt;
&lt;li&gt;Replace usages with Action.execute&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ActionError (namespace: org.apache.struts.action)
&lt;ul&gt;
&lt;li&gt;Replace usages with ActionMessage (namespace: org.apache.struts.action)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ValidatorUtil (namespace org.apache.commons.validator)&lt;br /&gt;Replace usages with ValidatorUtils (namespace org.apache.commons.validator.util)&lt;/li&gt;
&lt;li&gt;org.apache.commons.validator.EmailValidator&lt;br /&gt;Replace usages with org.apache.commons.validator.routines.EmailValidator&lt;/li&gt;
&lt;li&gt;The org.apache.struts.taglib.tiles namespace&lt;br /&gt;Replace usages with org.apache.struts.tiles.taglib&lt;/li&gt;
&lt;li&gt;DataSourceConfig&lt;br /&gt;Remove usages&lt;/li&gt;
&lt;li&gt;Action.defaultLocale&lt;br /&gt;Replace usages with Locale.getDefault&lt;/li&gt;
&lt;li&gt;Action.getDataSource&lt;br /&gt;Remove usages&lt;/li&gt;
&lt;li&gt;Action.LOCALE_KEY&lt;br /&gt;Replace usages with Globals.LOCALE_KEY&lt;/li&gt;
&lt;li&gt;Action.saveErrors called with ActionErrors parameter&lt;br /&gt;Call with ActionMessages parameter instead&lt;/li&gt;
&lt;li&gt;E.g. saveErrors(... actionErrors ...) becomes saveErrors(... actionMessages...)&lt;br /&gt;ActionErrors.GLOBAL_ERROR&lt;/li&gt;
&lt;li&gt;Replace usages with ActionMessage.GLOBAL_MESSAGE&lt;br /&gt;ActionErrors.add called with ActionError parameter&lt;/li&gt;
&lt;li&gt;Call with ActionMessage parameter instead&lt;br /&gt;E.g. add(... actionError &amp;hellip;) becomes add(... actionMessage &amp;hellip;)&lt;/li&gt;
&lt;li&gt;ActionForward constructor called with contextRelative parameter&lt;br /&gt;Call without contextRelative parameter&lt;/li&gt;
&lt;li&gt;E.g. ActionForward(... contextRelative &amp;hellip;) becomes ActionForward(...)&lt;br /&gt;DynaActionFormClass.clear&lt;/li&gt;
&lt;li&gt;Remove usages&lt;br /&gt;ExceptionHandler.storeException called with ActionError parameter&lt;/li&gt;
&lt;li&gt;Call with ActionMessage parameter instead&lt;br /&gt;E.g. storeException(... actionError &amp;hellip;) becomes storeException(... actionMessage &amp;hellip;)&lt;br /&gt;RequestProcessor.log&lt;br /&gt;Remove or use Commons Logging class instead&lt;br /&gt;FormBeanConfig.setDynamic&lt;br /&gt;Remove usages&lt;br /&gt;ForwardConfig.contextRelative&lt;br /&gt;Replace usages with module&lt;br /&gt;ForwardConfig constructor called with contextRelative parameter&lt;br /&gt;Call with module parameter instead&lt;br /&gt;E.g. ForwardConfig(... contextRelative &amp;hellip;) becomes ForwardConfig(... module ...)&lt;br /&gt;ModuleException.error&lt;br /&gt;Replace usages with message&lt;br /&gt;ModuleException.getError&lt;br /&gt;Replace usages with getActionMessage&lt;br /&gt;MultipartRequestWrapper.getRequest&lt;br /&gt;Now returns ServletRequestWrapper instead of HttpServletRequest&lt;br /&gt;Note: Casting to HttpServletRequest is safe&lt;br /&gt;validator.Resources.SERVLET_CONTEXT_KEY&lt;br /&gt;Replace usages with SERVLET_CONTEXT_PARAM&lt;br /&gt;validator.Resources.HTTP_SERVLET_REQUEST_KEY&lt;br /&gt;Replace usages with HTTP_SERVLET_REQUEST_PARAM&lt;br /&gt;validator.Resources.ACTION_ERRORS_KEY&lt;br /&gt;Replace usages with ACTION_MESSAGES_PARAM&lt;br /&gt;validator.Resources.getLocale&lt;br /&gt;Replace usages with RequestUtils.getUserLocale&lt;br /&gt;validator.Resources.getActionError&lt;br /&gt;Replace usages with getActionMessage&lt;br /&gt;RequestUtils.computeURL&lt;br /&gt;Replace usages with TagUtils.computeURL&lt;br /&gt;RequestUtils.selectModule&lt;br /&gt;Replace usages with ModuleUtils.selectModule&lt;br /&gt;RequestUtils.getModuleName&lt;br /&gt;Replace usages with ModuleUtils.getModuleName&lt;br /&gt;RequestUtils.getRequestModuleConfig&lt;br /&gt;Replace with ModuleUtils.getRequestModuleConfig&lt;br /&gt;RequestUtils.saveException&lt;br /&gt;Replace usages with TagUtils.saveException&lt;br /&gt;RequestUtils.getModuleConfig&lt;br /&gt;Replace usages with ModuleUtils.getModuleConfig&lt;br /&gt;RequestUtils.getModulePrefixes&lt;br /&gt;Replace usages with ModuleUtils.getModulePrefixes&lt;br /&gt;MessageTag.defaultLocale&lt;br /&gt;Remove usages&lt;br /&gt;BaseHandlerTag.defaultLocale&lt;br /&gt;Remove usages&lt;br /&gt;ErrorsTag.defaultLocale&lt;br /&gt;Remove usages&lt;br /&gt;JavascriptValidatorTag.defaultLocale&lt;br /&gt;Remove usages&lt;br /&gt;OptionTag.defaultLocale&lt;br /&gt;Remove usages&lt;br /&gt;ErrorsTag.lineEnd&lt;br /&gt;Remove usages&lt;br /&gt;HtmlTag.getCurrentLocale&lt;br /&gt;Remove usages&lt;br /&gt;ImgTag.isContextRelativeSet&lt;br /&gt;Remove usages&lt;br /&gt;ImgTag.lowsrc&lt;br /&gt;Remove usages&lt;br /&gt;TagUtils.getActionErrors&lt;br /&gt;Replace usages with getActionMessages&lt;br /&gt;TagUtils.getProperty&lt;br /&gt;Replace usages with PropertyUtils.getProperty&lt;br /&gt;ResponseUtils.write&lt;br /&gt;Replace usages with TagUtils.write&lt;br /&gt;ResponseUtils.writePrevious&lt;br /&gt;Replace usages with TagUtils.writePrevious&lt;br /&gt;RequestUtils and ResponseUtils usages not covered above&lt;br /&gt;Replace RequestUtils.* or ResponseUtils.* usages with TagUtils.getInstance().*&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>