This is an automated email from the ASF dual-hosted git repository.

rmaucher pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
     new cd637eafa5 Fix WrapperListener and WrapperLifecycle elements in 
storeconfig
cd637eafa5 is described below

commit cd637eafa584da6966a158ce8972a17ddb9e3d0d
Author: remm <[email protected]>
AuthorDate: Tue May 26 14:21:07 2026 +0200

    Fix WrapperListener and WrapperLifecycle elements in storeconfig
    
    Also lots of minor issues identified by code review.
---
 .../apache/catalina/storeconfig/ConnectorSF.java   | 45 ----------------------
 .../storeconfig/ConnectorStoreAppender.java        |  4 +-
 java/org/apache/catalina/storeconfig/LoaderSF.java | 25 ++++++------
 .../catalina/storeconfig/LocalStrings.properties   |  1 +
 .../catalina/storeconfig/NamingResourcesSF.java    |  1 +
 .../catalina/storeconfig/PersistentManagerSF.java  |  4 +-
 .../catalina/storeconfig/StandardContextSF.java    |  8 ++--
 .../apache/catalina/storeconfig/StoreAppender.java | 28 --------------
 .../apache/catalina/storeconfig/StoreConfig.java   |  2 +-
 .../catalina/storeconfig/StoreContextAppender.java |  2 +-
 .../catalina/storeconfig/StoreFileMover.java       |  5 ++-
 webapps/docs/changelog.xml                         |  4 ++
 12 files changed, 36 insertions(+), 93 deletions(-)

diff --git a/java/org/apache/catalina/storeconfig/ConnectorSF.java 
b/java/org/apache/catalina/storeconfig/ConnectorSF.java
index 1bb513b17a..bc3db8fcb1 100644
--- a/java/org/apache/catalina/storeconfig/ConnectorSF.java
+++ b/java/org/apache/catalina/storeconfig/ConnectorSF.java
@@ -55,49 +55,4 @@ public class ConnectorSF extends StoreFactoryBase {
         }
     }
 
-    /**
-     * Prints the opening XML tag for a connector element.
-     * @param aWriter the writer to output to
-     * @param indent the indentation level
-     * @param bean the connector bean
-     * @param aDesc the store description
-     * @throws Exception if an error occurs during output
-     */
-    protected void printOpenTag(PrintWriter aWriter, int indent, Object bean, 
StoreDescription aDesc) throws Exception {
-        aWriter.print("<");
-        aWriter.print(aDesc.getTag());
-        storeConnectorAttributes(aWriter, indent, bean, aDesc);
-        aWriter.println(">");
-    }
-
-  /**
-     * Stores connector-specific attributes to the XML output.
-     * @param aWriter the writer to output to
-     * @param indent the indentation level
-     * @param bean the connector bean
-     * @param aDesc the store description
-     * @throws Exception if an error occurs during output
-     */
-    protected void storeConnectorAttributes(PrintWriter aWriter, int indent, 
Object bean, StoreDescription aDesc)
-             throws Exception {
-        if (aDesc.isAttributes()) {
-            getStoreAppender().printAttributes(aWriter, indent, false, bean, 
aDesc);
-        }
-    }
-
-    /**
-     * Prints a self-closing XML tag for a connector element.
-     * @param aWriter the writer to output to
-     * @param indent the indentation level
-     * @param bean the connector bean
-     * @param aDesc the store description
-     * @throws Exception if an error occurs during output
-     */
-    protected void printTag(PrintWriter aWriter, int indent, Object bean, 
StoreDescription aDesc) throws Exception {
-        aWriter.print("<");
-        aWriter.print(aDesc.getTag());
-        storeConnectorAttributes(aWriter, indent, bean, aDesc);
-        aWriter.println("/>");
-    }
-
 }
\ No newline at end of file
diff --git a/java/org/apache/catalina/storeconfig/ConnectorStoreAppender.java 
b/java/org/apache/catalina/storeconfig/ConnectorStoreAppender.java
index a08498b41e..7820edf50a 100644
--- a/java/org/apache/catalina/storeconfig/ConnectorStoreAppender.java
+++ b/java/org/apache/catalina/storeconfig/ConnectorStoreAppender.java
@@ -145,7 +145,9 @@ public class ConnectorStoreAppender extends StoreAppender {
             propertyKeys.add(descriptor.getName());
         }
         // Add the properties of the protocol handler
-        descriptors = 
Introspector.getBeanInfo(protocolHandler.getClass()).getPropertyDescriptors();
+        if (protocolHandler != null) {
+            descriptors = 
Introspector.getBeanInfo(protocolHandler.getClass()).getPropertyDescriptors();
+        }
         if (descriptors == null) {
             descriptors = new PropertyDescriptor[0];
         }
diff --git a/java/org/apache/catalina/storeconfig/LoaderSF.java 
b/java/org/apache/catalina/storeconfig/LoaderSF.java
index 11d1f690fb..e39064ad69 100644
--- a/java/org/apache/catalina/storeconfig/LoaderSF.java
+++ b/java/org/apache/catalina/storeconfig/LoaderSF.java
@@ -38,20 +38,23 @@ public class LoaderSF extends StoreFactoryBase {
 
     @Override
     public void store(PrintWriter aWriter, int indent, Object aElement) throws 
Exception {
-        StoreDescription elementDesc = 
getRegistry().findDescription(aElement.getClass());
-        if (elementDesc != null) {
-            Loader loader = (Loader) aElement;
-            if (!isDefaultLoader(loader)) {
-                if (log.isTraceEnabled()) {
-                    log.trace("store " + elementDesc.getTag() + "( " + 
aElement + " )");
+        if (aElement instanceof Loader loader) {
+            StoreDescription elementDesc = 
getRegistry().findDescription(aElement.getClass());
+            if (elementDesc != null) {
+                if (!isDefaultLoader(loader)) {
+                    if (log.isTraceEnabled()) {
+                        log.trace("store " + elementDesc.getTag() + "( " + 
aElement + " )");
+                    }
+                    getStoreAppender().printIndent(aWriter, indent + 2);
+                    getStoreAppender().printTag(aWriter, indent + 2, loader, 
elementDesc);
+                }
+            } else {
+                if (log.isWarnEnabled()) {
+                    log.warn(sm.getString("factory.storeNoDescriptor", 
aElement.getClass()));
                 }
-                getStoreAppender().printIndent(aWriter, indent + 2);
-                getStoreAppender().printTag(aWriter, indent + 2, loader, 
elementDesc);
             }
         } else {
-            if (log.isWarnEnabled()) {
-                log.warn(sm.getString("factory.storeNoDescriptor", 
aElement.getClass()));
-            }
+            super.store(aWriter, indent, aElement);
         }
     }
 
diff --git a/java/org/apache/catalina/storeconfig/LocalStrings.properties 
b/java/org/apache/catalina/storeconfig/LocalStrings.properties
index 4c2aa53bee..e19dd0014b 100644
--- a/java/org/apache/catalina/storeconfig/LocalStrings.properties
+++ b/java/org/apache/catalina/storeconfig/LocalStrings.properties
@@ -48,3 +48,4 @@ storeFactory.noDescriptor=Descriptor for element [{0}].[{1}] 
not configured
 
 storeFileMover.directoryCreationError=Cannot create directory [{0}]
 storeFileMover.renameError=Cannot rename [{0}] to [{1}]
+storeFileMover.restoreError=Rename [{0}] to [{1}] failed and restoring also 
failed
diff --git a/java/org/apache/catalina/storeconfig/NamingResourcesSF.java 
b/java/org/apache/catalina/storeconfig/NamingResourcesSF.java
index 24d4dedac7..fa67454d0f 100644
--- a/java/org/apache/catalina/storeconfig/NamingResourcesSF.java
+++ b/java/org/apache/catalina/storeconfig/NamingResourcesSF.java
@@ -48,6 +48,7 @@ public class NamingResourcesSF extends StoreFactoryBase {
             if (log.isTraceEnabled()) {
                 log.trace("store " + elementDesc.getTag() + "( " + aElement + 
" )");
             }
+            // Note: The elements go directly inside another one without any 
specific parent
             storeChildren(aWriter, indent, aElement, elementDesc);
         } else {
             log.warn(sm.getString("storeFactory.noDescriptor", 
aElement.getClass(), "NamingResources"));
diff --git a/java/org/apache/catalina/storeconfig/PersistentManagerSF.java 
b/java/org/apache/catalina/storeconfig/PersistentManagerSF.java
index fb759f9ca4..6ad976c3ce 100644
--- a/java/org/apache/catalina/storeconfig/PersistentManagerSF.java
+++ b/java/org/apache/catalina/storeconfig/PersistentManagerSF.java
@@ -46,7 +46,9 @@ public class PersistentManagerSF extends StoreFactoryBase {
 
             // Store nested <Store> element
             Store store = manager.getStore();
-            storeElement(aWriter, indent, store);
+            if (store != null) {
+                storeElement(aWriter, indent, store);
+            }
 
             // Store nested <SessionIdGenerator> element
             SessionIdGenerator sessionIdGenerator = 
manager.getSessionIdGenerator();
diff --git a/java/org/apache/catalina/storeconfig/StandardContextSF.java 
b/java/org/apache/catalina/storeconfig/StandardContextSF.java
index d325147aba..bfc5e7e806 100644
--- a/java/org/apache/catalina/storeconfig/StandardContextSF.java
+++ b/java/org/apache/catalina/storeconfig/StandardContextSF.java
@@ -245,11 +245,11 @@ public class StandardContextSF extends StoreFactoryBase {
             storeElement(aWriter, indent, resources);
 
             // Store nested <WrapperListener> elements
-            String[] wLifecycles = context.findWrapperLifecycles();
-            getStoreAppender().printTagArray(aWriter, "WrapperListener", 
indent + 2, wLifecycles);
-            // Store nested <WrapperLifecycle> elements
             String[] wListeners = context.findWrapperListeners();
-            getStoreAppender().printTagArray(aWriter, "WrapperLifecycle", 
indent + 2, wListeners);
+            getStoreAppender().printTagArray(aWriter, "WrapperListener", 
indent + 2, wListeners);
+            // Store nested <WrapperLifecycle> elements
+            String[] wLifecycles = context.findWrapperLifecycles();
+            getStoreAppender().printTagArray(aWriter, "WrapperLifecycle", 
indent + 2, wLifecycles);
 
             // Store nested <Parameter> elements
             ApplicationParameter[] appParams = 
context.findApplicationParameters();
diff --git a/java/org/apache/catalina/storeconfig/StoreAppender.java 
b/java/org/apache/catalina/storeconfig/StoreAppender.java
index 52aefb5a8c..c5063b7fb1 100644
--- a/java/org/apache/catalina/storeconfig/StoreAppender.java
+++ b/java/org/apache/catalina/storeconfig/StoreAppender.java
@@ -118,34 +118,6 @@ public class StoreAppender {
         aWriter.println(">");
     }
 
-    /**
-     * Print an array of values.
-     *
-     * @param aWriter  The output writer
-     * @param tag      The element name
-     * @param indent   Indentation level
-     * @param elements Array of element values
-     */
-    public void printTagValueArray(PrintWriter aWriter, String tag, int 
indent, String[] elements) {
-        if (elements != null && elements.length > 0) {
-            printIndent(aWriter, indent + 2);
-            aWriter.print("<");
-            aWriter.print(tag);
-            aWriter.print(">");
-            for (int i = 0; i < elements.length; i++) {
-                printIndent(aWriter, indent + 4);
-                aWriter.print(elements[i]);
-                if (i + 1 < elements.length) {
-                    aWriter.println(",");
-                }
-            }
-            printIndent(aWriter, indent + 2);
-            aWriter.print("</");
-            aWriter.print(tag);
-            aWriter.println(">");
-        }
-    }
-
     /**
      * Print an array of elements.
      *
diff --git a/java/org/apache/catalina/storeconfig/StoreConfig.java 
b/java/org/apache/catalina/storeconfig/StoreConfig.java
index 3be20e19d3..0c4d2ce044 100644
--- a/java/org/apache/catalina/storeconfig/StoreConfig.java
+++ b/java/org/apache/catalina/storeconfig/StoreConfig.java
@@ -182,7 +182,7 @@ public class StoreConfig implements IStoreConfig {
                         } finally {
                             desc.setStoreSeparate(oldSeparate);
                             desc.setBackup(oldBackup);
-                            desc.setBackup(oldExternalAllowed);
+                            desc.setExternalAllowed(oldExternalAllowed);
                         }
                     }
                 } else {
diff --git a/java/org/apache/catalina/storeconfig/StoreContextAppender.java 
b/java/org/apache/catalina/storeconfig/StoreContextAppender.java
index 74247f532e..65ed790d3a 100644
--- a/java/org/apache/catalina/storeconfig/StoreContextAppender.java
+++ b/java/org/apache/catalina/storeconfig/StoreContextAppender.java
@@ -82,7 +82,7 @@ public class StoreContextAppender extends StoreAppender {
                 if (host instanceof StandardHost) {
                     File appBase = getAppBase(((StandardHost) host));
                     File docBase = getDocBase(context, appBase);
-                    isPrint = !appBase.equals(docBase.getParentFile());
+                    isPrint = docBase.getParentFile() == null || 
!appBase.equals(docBase.getParentFile());
                 }
             }
         }
diff --git a/java/org/apache/catalina/storeconfig/StoreFileMover.java 
b/java/org/apache/catalina/storeconfig/StoreFileMover.java
index f10ca01428..262066c757 100644
--- a/java/org/apache/catalina/storeconfig/StoreFileMover.java
+++ b/java/org/apache/catalina/storeconfig/StoreFileMover.java
@@ -189,7 +189,10 @@ public class StoreFileMover {
     public void move() throws IOException {
         if (configOld.renameTo(configSave)) {
             if (!configNew.renameTo(configOld)) {
-                configSave.renameTo(configOld);
+                if (!configSave.renameTo(configOld)) {
+                    throw new 
IOException(sm.getString("storeFileMover.restoreError", 
configNew.getAbsolutePath(),
+                            configOld.getAbsolutePath()));
+                }
                 throw new 
IOException(sm.getString("storeFileMover.renameError", 
configNew.getAbsolutePath(),
                         configOld.getAbsolutePath()));
             }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 4cdaa45d56..2bd73e6769 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -186,6 +186,10 @@
       <fix>
         Skip BOM when serving files with UTF-32 encoding. (remm)
       </fix>
+      <fix>
+        Mixup of WrapperListener and WrapperLifecycle elements in storeconfig.
+        (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to