This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch 1.2.X in repository https://gitbox.apache.org/repos/asf/mina-ftpserver.git
The following commit(s) were added to refs/heads/1.2.X by this push: new e41fd329 [FTPSERVER-506] Fix binary compatibility issues. e41fd329 is described below commit e41fd329a79a146714623aba479a1eab68ba298b Author: Gary Gregory <ggreg...@rocketsoftware.com> AuthorDate: Wed Apr 13 21:07:39 2022 -0400 [FTPSERVER-506] Fix binary compatibility issues. Pick 1.1.2 as the baseline for FTPSERVER-506 but it should be the previous version in more normal usage when you've been sure that binary compatibility has not been broken from release to release. --- .../org/apache/ftpserver/ssl/SslConfiguration.java | 8 +-- .../ftpserver/ssl/SslConfigurationFactory.java | 28 +++++++- .../ssl/impl/DefaultSslConfiguration.java | 11 +++- .../org/apache/ftpserver/util/StringUtils.java | 23 ++++--- distribution/pom.xml | 1 + examples/ftpserver-example-spring-war/pom.xml | 1 + examples/ftpserver-osgi-ftplet-service/pom.xml | 1 + examples/ftpserver-osgi-spring-service/pom.xml | 1 + examples/pom.xml | 1 + pom.xml | 74 +++++++++++++++++++++- 10 files changed, 132 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/apache/ftpserver/ssl/SslConfiguration.java b/core/src/main/java/org/apache/ftpserver/ssl/SslConfiguration.java index 1c646c30..ec3ad066 100644 --- a/core/src/main/java/org/apache/ftpserver/ssl/SslConfiguration.java +++ b/core/src/main/java/org/apache/ftpserver/ssl/SslConfiguration.java @@ -73,16 +73,16 @@ public interface SslConfiguration { * * @return The name of the protocol as a String */ - default String getEnabledProtocol() { - return DEFAULT_ENABLED_PROTOCOL; - } + String getEnabledProtocol(); /** * Returns the list of ssl protocols * * @return The list of enabled protocols as a String */ - String[] getEnabledProtocols(); + default String[] getEnabledProtocols() { + return new String[] { getEnabledProtocol() }; + } /** * Return the required client authentication setting diff --git a/core/src/main/java/org/apache/ftpserver/ssl/SslConfigurationFactory.java b/core/src/main/java/org/apache/ftpserver/ssl/SslConfigurationFactory.java index 6ee613a0..97d0753a 100644 --- a/core/src/main/java/org/apache/ftpserver/ssl/SslConfigurationFactory.java +++ b/core/src/main/java/org/apache/ftpserver/ssl/SslConfigurationFactory.java @@ -157,11 +157,37 @@ public class SslConfigurationFactory { * The SSL protocol used for this channel. Supported values are "SSL" and "TLS". Defaults to "TLS". * * @return The SSL protocol + * @deprecated Use {@link #getSslProtocols()}. + */ + @Deprecated + public String getSslProtocol() { + return sslProtocols[0]; + } + + /** + * The SSL protocols used for this channel. Supported values are "SSL" and "TLS". Defaults to "TLS". + * + * @return The SSL protocol */ public String[] getSslProtocols() { - return sslProtocols; + return sslProtocols; } + /** + * Set the SSL protocols used for this channel. Defaults to "TLSv1.2". + * + * @param sslProtocols + * The SSL protocols + * @deprecated Use {@link #setSslProtocol(String...)}. + */ + public void setSslProtocol(String sslProtocols) { + if (sslProtocols == null) { + throw new FtpServerConfigurationException("SslProcotol must not be null"); + } + + this.sslProtocols = new String[] { sslProtocols }; + } + /** * Set the SSL protocols used for this channel. Defaults to "TLSv1.2". * diff --git a/core/src/main/java/org/apache/ftpserver/ssl/impl/DefaultSslConfiguration.java b/core/src/main/java/org/apache/ftpserver/ssl/impl/DefaultSslConfiguration.java index 019170c3..f4266a95 100644 --- a/core/src/main/java/org/apache/ftpserver/ssl/impl/DefaultSslConfiguration.java +++ b/core/src/main/java/org/apache/ftpserver/ssl/impl/DefaultSslConfiguration.java @@ -109,9 +109,18 @@ public class DefaultSslConfiguration implements SslConfiguration { /** * @see SslConfiguration#getEnabledProtocol() + * + * @deprecated Use {@link #getEnabledProtocol()} */ public String getEnabledProtoco() { - if ((enabledProtocols != null) && (enabledProtocols.length > 0)) { + return getEnabledProtocol(); + } + + /** + * @see SslConfiguration#getEnabledProtocol() + */ + public String getEnabledProtocol() { + if (enabledProtocols != null && enabledProtocols.length > 0) { // We use the first one return enabledProtocols[0]; } else { diff --git a/core/src/main/java/org/apache/ftpserver/util/StringUtils.java b/core/src/main/java/org/apache/ftpserver/util/StringUtils.java index 7bba65dc..a618ed7c 100644 --- a/core/src/main/java/org/apache/ftpserver/util/StringUtils.java +++ b/core/src/main/java/org/apache/ftpserver/util/StringUtils.java @@ -28,8 +28,13 @@ import java.util.Map; * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ -public final class StringUtils { - private StringUtils() { +public class StringUtils { + + /** + * @deprecated Do not instantiate. + */ + @Deprecated + public StringUtils() { // Nothing to do } @@ -41,7 +46,7 @@ public final class StringUtils { * @param newStr The replacement string * @return The modified string */ - public static String replaceString(String source, String oldStr, + public static final String replaceString(String source, String oldStr, String newStr) { StringBuilder sb = new StringBuilder(source.length()); int sind = 0; @@ -68,7 +73,7 @@ public final class StringUtils { * the original string * @return The modified string */ - public static String replaceString(String source, Object[] args) { + public static final String replaceString(String source, Object[] args) { int startIndex = 0; int openIndex = source.indexOf('{', startIndex); if (openIndex == -1) { @@ -117,7 +122,7 @@ public final class StringUtils { * the original string * @return The modified string */ - public static String replaceString(String source, + public static final String replaceString(String source, Map<String, Object> args) { int startIndex = 0; int openIndex = source.indexOf('{', startIndex); @@ -165,7 +170,7 @@ public final class StringUtils { * '>' will be replaced by > * @param bReplaceQuote if true '\"' will be replaced by " */ - public static String formatHtml(String source, boolean bReplaceNl, + public static final String formatHtml(String source, boolean bReplaceNl, boolean bReplaceTag, boolean bReplaceQuote) { StringBuilder sb = new StringBuilder(); @@ -231,7 +236,7 @@ public final class StringUtils { /** * Pad string object. */ - public static String pad(String src, char padChar, boolean rightPad, + public static final String pad(String src, char padChar, boolean rightPad, int totalLength) { int srcLength = src.length(); @@ -255,7 +260,7 @@ public final class StringUtils { /** * Get hex string from byte array. */ - public static String toHexString(byte[] res) { + public static final String toHexString(byte[] res) { StringBuilder sb = new StringBuilder(res.length << 1); for (int i = 0; i < res.length; i++) { String digit = Integer.toHexString(0xFF & res[i]); @@ -270,7 +275,7 @@ public final class StringUtils { /** * Get byte array from hex string. */ - public static byte[] toByteArray(String hexString) { + public static final byte[] toByteArray(String hexString) { int arrLength = hexString.length() >> 1; byte buff[] = new byte[arrLength]; for (int i = 0; i < arrLength; i++) { diff --git a/distribution/pom.xml b/distribution/pom.xml index 4f3f0f9d..dbf10d21 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -25,6 +25,7 @@ <properties> <checkstyle.configdir>..</checkstyle.configdir> + <japicmp.skip>true</japicmp.skip> </properties> <build> diff --git a/examples/ftpserver-example-spring-war/pom.xml b/examples/ftpserver-example-spring-war/pom.xml index ac92b112..2aa457df 100644 --- a/examples/ftpserver-example-spring-war/pom.xml +++ b/examples/ftpserver-example-spring-war/pom.xml @@ -26,6 +26,7 @@ <properties> <checkstyle.configdir>${basedir}/../..</checkstyle.configdir> + <japicmp.skip>true</japicmp.skip> </properties> <dependencies> diff --git a/examples/ftpserver-osgi-ftplet-service/pom.xml b/examples/ftpserver-osgi-ftplet-service/pom.xml index 14d442f4..8d1c8de3 100644 --- a/examples/ftpserver-osgi-ftplet-service/pom.xml +++ b/examples/ftpserver-osgi-ftplet-service/pom.xml @@ -30,6 +30,7 @@ <properties> <checkstyle.configdir>../..</checkstyle.configdir> + <japicmp.skip>true</japicmp.skip> </properties> <dependencies> diff --git a/examples/ftpserver-osgi-spring-service/pom.xml b/examples/ftpserver-osgi-spring-service/pom.xml index 0eada184..b31f2a9f 100644 --- a/examples/ftpserver-osgi-spring-service/pom.xml +++ b/examples/ftpserver-osgi-spring-service/pom.xml @@ -30,6 +30,7 @@ <properties> <checkstyle.configdir>${basedir}/../..</checkstyle.configdir> + <japicmp.skip>true</japicmp.skip> </properties> <dependencies> diff --git a/examples/pom.xml b/examples/pom.xml index 2f05b47f..1987624e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -35,6 +35,7 @@ <properties> <checkstyle.configdir>..</checkstyle.configdir> + <japicmp.skip>true</japicmp.skip> </properties> </project> diff --git a/pom.xml b/pom.xml index c7c5fe8c..4b06f134 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,7 @@ </licenses> <!-- Temporary add snapshot repository here to be able to resolve snapshot parent pom --> + <!-- <repositories> <repository> <id>apache.snapshots</id> @@ -51,7 +52,8 @@ </releases> </repository> </repositories> - + --> + <mailingLists> <mailingList> <name>FtpServer Users mailing list</name> @@ -271,7 +273,7 @@ </dependencyManagement> <build> - <defaultGoal>clean verify</defaultGoal> + <defaultGoal>clean verify japicmp:cmp</defaultGoal> <pluginManagement> <plugins> <plugin> @@ -359,6 +361,50 @@ </dependency> </dependencies> </plugin> + + <plugin> + <groupId>com.github.siom79.japicmp</groupId> + <artifactId>japicmp-maven-plugin</artifactId> + <version>0.15.7</version> + <configuration> + <oldVersion> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>${project.artifactId}</artifactId> + <!-- + Pick 1.1.2 for FTPSERVER-506 but it should be the previous version in more normal usage + when you've been sure that binary compatibility has not been broken from release to release. + --> + <version>1.1.2</version> + <type>jar</type> + </dependency> + </oldVersion> + <newVersion> + <file> + <path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path> + </file> + </newVersion> + <parameter> + <onlyModified>true</onlyModified> + <breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications> + <breakBuildOnSourceIncompatibleModifications>true</breakBuildOnSourceIncompatibleModifications> + <!-- skip japicmp on "mvn site" - use "mvn package site" to include report --> + <ignoreMissingNewVersion>true</ignoreMissingNewVersion> + <reportOnlyFilename>true</reportOnlyFilename> + <skipPomModules>true</skipPomModules> + <ignoreMissingClasses>false</ignoreMissingClasses> + <overrideCompatibilityChangeParameters> + <overrideCompatibilityChangeParameter> + <compatibilityChange>METHOD_NEW_DEFAULT</compatibilityChange> + <binaryCompatible>true</binaryCompatible> + <sourceCompatible>true</sourceCompatible> + <semanticVersionLevel>PATCH</semanticVersionLevel> + </overrideCompatibilityChangeParameter> + </overrideCompatibilityChangeParameters> + </parameter> + </configuration> + </plugin> + </plugins> </pluginManagement> @@ -565,6 +611,30 @@ </plugins> </build> </profile> + <profile> + <id>japicmp</id> + <activation> + <property> + <name>enforce.japicmp</name> + </property> + </activation> + <build> + <plugins> + <plugin> + <groupId>com.github.siom79.japicmp</groupId> + <artifactId>japicmp-maven-plugin</artifactId> + <executions> + <execution> + <phase>verify</phase> + <goals> + <goal>cmp</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> </profiles> <modules>