Skip to content

Commit ba6a927

Browse files
committed
JCRVLT-702 Get rid of default locale/timezone/charset specific methods
Enable forbiddenapis in Maven build
1 parent a2629fd commit ba6a927

File tree

80 files changed

+408
-206
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+408
-206
lines changed

parent/pom.xml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Apache Jackrabbit FileVault is a project of the Apache Software Foundation.
5959
<!-- for embedded dependencies the newest version should be used -->
6060
<oak.max.version>1.52.0</oak.max.version>
6161
<slf4j.version>1.7.25</slf4j.version>
62+
<commons-io.version>2.7</commons-io.version>
6263
<test.oak>true</test.oak> <!-- passed to integration test as property "oak", set to true to test with Oak, false means test with Jackrabbit 2 -->
6364
<bnd.version>6.4.0</bnd.version>
6465
<minimalMavenBuildVersion>3.6.1</minimalMavenBuildVersion><!-- due to https://issues.apache.org/jira/browse/MNG-6059 -->
@@ -365,6 +366,39 @@ Bundle-Category: jackrabbit
365366
</execution>
366367
</executions>
367368
</plugin>
369+
<plugin>
370+
<groupId>de.thetaphi</groupId>
371+
<artifactId>forbiddenapis</artifactId>
372+
<version>3.8</version>
373+
<configuration>
374+
<!--
375+
if the used Java version is too new,
376+
don't fail, just do nothing:
377+
-->
378+
<failOnUnsupportedJava>false</failOnUnsupportedJava>
379+
<bundledSignatures>
380+
<!--
381+
This will automatically choose the right
382+
signatures based on 'maven.compiler.target':
383+
-->
384+
<bundledSignature>jdk-unsafe</bundledSignature>
385+
<bundledSignature>jdk-deprecated</bundledSignature>
386+
<!-- disallow undocumented classes like sun.misc.Unsafe: -->
387+
<bundledSignature>jdk-non-portable</bundledSignature>
388+
<!-- don't allow unsafe reflective access: -->
389+
<bundledSignature>jdk-reflection</bundledSignature>
390+
<bundledSignature>commons-io-unsafe-${commons-io.version}</bundledSignature>
391+
</bundledSignatures>
392+
<ignoreSignaturesOfMissingClasses>true</ignoreSignaturesOfMissingClasses>
393+
</configuration>
394+
<executions>
395+
<execution>
396+
<goals>
397+
<goal>check</goal>
398+
</goals>
399+
</execution>
400+
</executions>
401+
</plugin>
368402
</plugins>
369403

370404
</build>
@@ -512,7 +546,7 @@ Bundle-Category: jackrabbit
512546
<dependency>
513547
<groupId>commons-io</groupId>
514548
<artifactId>commons-io</artifactId>
515-
<version>2.7</version>
549+
<version>${commons-io.version}</version>
516550
</dependency>
517551
<dependency>
518552
<groupId>org.apache.commons</groupId>

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/AbstractCmdLs.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.IOException;
2121
import java.text.SimpleDateFormat;
2222
import java.util.Date;
23+
import java.util.Locale;
2324

2425
import org.apache.commons.cli2.CommandLine;
2526
import org.apache.commons.cli2.Option;
@@ -97,7 +98,7 @@ public static String formatSize(long size) {
9798
}
9899

99100
public static String formatDate(long date) {
100-
final SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
101+
final SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
101102
return date == 0 ? "" : fmt.format(new Date(date));
102103
}
103104
}

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdCat.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.jackrabbit.vault.cli;
1919

2020
import java.io.IOException;
21+
import java.util.Locale;
2122

2223
import javax.jcr.RepositoryException;
2324

@@ -52,7 +53,7 @@ protected void doExecute(VaultFsConsoleExecutionContext ctx, CommandLine cl) thr
5253
file.getArtifact().spool(System.out);
5354
System.out.flush();
5455
} else {
55-
System.out.printf("Refusing to print contents of a '%s' file.%n", ct);
56+
System.out.printf(Locale.ENGLISH, "Refusing to print contents of a '%s' file.%n", ct);
5657
}
5758
} catch (IOException e) {
5859
throw new ExecutionException("Error while downloading file.",e);

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDebug.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
package org.apache.jackrabbit.vault.cli;
1919

2020
import java.io.File;
21+
import java.io.OutputStreamWriter;
2122
import java.io.PrintWriter;
23+
import java.nio.charset.StandardCharsets;
2224
import java.util.Collection;
2325
import java.util.List;
2426

@@ -80,7 +82,7 @@ protected void doExecute(VaultFsConsoleExecutionContext ctx, CommandLine cl) thr
8082
DefaultWorkspaceFilter r = new DefaultWorkspaceFilter();
8183
try {
8284
r.load(file);
83-
DumpContext dCtx = new DumpContext(new PrintWriter(System.out));
85+
DumpContext dCtx = new DumpContext(new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.US_ASCII)));
8486
r.dump(dCtx, false);
8587
dCtx.flush();
8688

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDump.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919

2020
import java.io.File;
2121
import java.io.InputStream;
22+
import java.io.OutputStreamWriter;
2223
import java.io.PrintWriter;
24+
import java.nio.charset.StandardCharsets;
2325
import java.nio.file.Files;
2426

2527
import org.apache.commons.cli2.Argument;
@@ -72,15 +74,15 @@ protected void doExecute(VaultFsConsoleExecutionContext ctx, CommandLine cl)
7274
} else {
7375
Object f = ctx.getCurrentFile().getFile(path, false).unwrap();
7476
if (f instanceof Dumpable) {
75-
DumpContext dCtx = new DumpContext(new PrintWriter(System.out));
77+
DumpContext dCtx = new DumpContext(new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.US_ASCII)));
7678
((Dumpable) f).dump(dCtx, true);
7779
dCtx.flush();
7880
} else {
7981
VaultFsApp.log.info("Object not dumpable: {}", f);
8082
}
8183
}
8284
} else {
83-
fs.getAggregateManager().dumpConfig(new PrintWriter(System.out));
85+
fs.getAggregateManager().dumpConfig(new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.US_ASCII)));
8486
}
8587
}
8688

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdExportCli.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.File;
2121
import java.time.Instant;
2222
import java.time.format.DateTimeFormatter;
23+
import java.util.Locale;
2324

2425
import org.apache.commons.cli2.Argument;
2526
import org.apache.commons.cli2.CommandLine;
@@ -44,7 +45,7 @@
4445
*/
4546
public class CmdExportCli extends AbstractVaultCommand {
4647

47-
static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
48+
static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH);
4849

4950
private Option optType;
5051
private Option optPrune;

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdFormatCli.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.ArrayList;
2424
import java.util.LinkedList;
2525
import java.util.List;
26+
import java.util.Locale;
2627
import java.util.regex.Pattern;
2728

2829
import org.apache.commons.cli2.CommandLine;
@@ -79,15 +80,15 @@ protected void doExecute(VaultFsApp app, CommandLine cl) throws Exception {
7980
for (File file: localFiles) {
8081
if (file.isDirectory()) {
8182
if (verbose) {
82-
System.out.printf("traversing: %s%n", file);
83+
System.out.printf(Locale.ENGLISH, "traversing: %s%n", file);
8384
for (Pattern p: parsedPatterns) {
84-
System.out.printf("scanning for files matching: %s%n", p);
85+
System.out.printf(Locale.ENGLISH, "scanning for files matching: %s%n", p);
8586
}
8687
}
8788
formattedFiles.addAll(format.format(file, parsedPatterns, checkOnly));
8889
} else {
8990
if (verbose) {
90-
System.out.printf("processing: %s%n", file);
91+
System.out.printf(Locale.ENGLISH, "processing: %s%n", file);
9192
}
9293
if (format.format(file, checkOnly)) {
9394
formattedFiles.add(file.getPath());

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdSync.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.io.File;
2121
import java.util.List;
22+
import java.util.Locale;
2223

2324
import org.apache.commons.cli2.Argument;
2425
import org.apache.commons.cli2.CommandLine;
@@ -116,7 +117,7 @@ public void validate(List list) throws InvalidArgumentException {
116117
if (list.size() > 0) {
117118
String cmd = list.get(0).toString();
118119
try {
119-
list.set(0, Sync.Command.valueOf(cmd.toUpperCase()));
120+
list.set(0, Sync.Command.valueOf(cmd.toUpperCase(Locale.ROOT)));
120121
} catch (IllegalArgumentException e) {
121122
throw new InvalidArgumentException("Invalid command: " + cmd);
122123
}

vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/VaultFsApp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.IOException;
2222
import java.util.ArrayList;
2323
import java.util.List;
24+
import java.util.Locale;
2425
import java.util.Map;
2526

2627
import javax.jcr.Credentials;
@@ -794,7 +795,7 @@ public Credentials getCredentials(RepositoryAddress mountpoint) {
794795
try {
795796
SimpleCredentials simpleCredentials = (SimpleCredentials) creds;
796797
if (simpleCredentials.getPassword().length == 0) {
797-
System.out.printf("Please enter password for user %s connecting to %s: ",
798+
System.out.printf(Locale.ENGLISH, "Please enter password for user %s connecting to %s: ",
798799
simpleCredentials.getUserID(), mountpoint);
799800
String password = new jline.ConsoleReader().readLine('*');
800801
creds = new SimpleCredentials(simpleCredentials.getUserID(), password.toCharArray());

vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
import java.io.FileInputStream;
2121
import java.io.FileOutputStream;
2222
import java.io.IOException;
23-
import java.time.LocalDate;
23+
import java.time.Instant;
24+
import java.time.temporal.ChronoField;
2425
import java.util.Iterator;
2526
import java.util.Properties;
2627

@@ -80,7 +81,7 @@ public PomProperties getPomProperties() {
8081
}
8182

8283
public String getCopyrightLine() {
83-
return "copyright 2013-" + LocalDate.now().getYear() +" by Apache Software Foundation. See LICENSE.txt for more information.";
84+
return "copyright 2013-" + Instant.now().get(ChronoField.YEAR) +" by Apache Software Foundation. See LICENSE.txt for more information.";
8485
}
8586

8687
public String getVersionString() {

vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/platform/CmdLs.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.IOException;
2121
import java.time.Instant;
2222
import java.time.format.DateTimeFormatter;
23+
import java.util.Locale;
2324

2425
import org.apache.commons.cli2.CommandLine;
2526
import org.apache.commons.cli2.Option;
@@ -40,7 +41,7 @@
4041
*/
4142
public class CmdLs extends AbstractConsoleCommand {
4243

43-
private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy MMM dd HH:mm");
44+
private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy MMM dd HH:mm", Locale.ENGLISH);
4445

4546
// format flags
4647
private static int F_FLAG_TIME = 0x01;

vault-core-it/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@
6767
<skip>true</skip>
6868
</configuration>
6969
</plugin>
70+
<plugin>
71+
<groupId>de.thetaphi</groupId>
72+
<artifactId>forbiddenapis</artifactId>
73+
<configuration>
74+
<skip>true</skip>
75+
</configuration>
76+
</plugin>
7077
</plugins>
7178
</pluginManagement>
7279
</build>

vault-core/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,20 @@
133133
<groupId>biz.aQute.bnd</groupId>
134134
<artifactId>bnd-resolver-maven-plugin</artifactId>
135135
</plugin>
136+
<plugin>
137+
<groupId>de.thetaphi</groupId>
138+
<artifactId>forbiddenapis</artifactId>
139+
<configuration>
140+
<excludes>
141+
<!-- excluded embedded 3rd party libraries -->
142+
<exclude>com/ctc/wstx/**/*.class</exclude>
143+
<exclude>org/apache/jackrabbit/jcr2spi/**/*.class</exclude>
144+
<exclude>org/codehaus/stax/**/*.class</exclude>
145+
<exclude>org/codehaus/stax2/**/*.class</exclude>
146+
<exclude>org/h2/**/*.class</exclude>
147+
</excludes>
148+
</configuration>
149+
</plugin>
136150
</plugins>
137151
</build>
138152

vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/DumpContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.io.PrintWriter;
2121
import java.util.LinkedList;
22+
import java.util.Locale;
2223

2324
/**
2425
* {@code DumpHandler}...
@@ -46,7 +47,7 @@ public void println(boolean isLast, String str) {
4647
}
4748

4849
public void printf(boolean isLast, String format, Object ... args) {
49-
println(isLast, String.format(format, args));
50+
println(isLast, String.format(Locale.ENGLISH, format, args));
5051
}
5152

5253
public void indent(boolean isLast) {

vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/ConfigHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.lang.reflect.InvocationTargetException;
2121
import java.lang.reflect.Method;
2222
import java.util.HashMap;
23+
import java.util.Locale;
2324
import java.util.Map;
2425

2526
import org.slf4j.Logger;
@@ -125,7 +126,7 @@ public Object create(Element elem)
125126
}
126127

127128
public static String getMethodName(String prefix, String name) {
128-
return prefix + name.substring(0, 1).toUpperCase() + name.substring(1);
129+
return prefix + name.substring(0, 1).toUpperCase(Locale.ROOT) + name.substring(1);
129130
}
130131

131132
public static Method getMethod(Object obj, String name, Class ... params) {

vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Iterator;
3131
import java.util.LinkedList;
3232
import java.util.List;
33+
import java.util.Locale;
3334
import java.util.Set;
3435
import java.util.TreeSet;
3536

@@ -425,7 +426,7 @@ private void readDef(Element elem) throws ConfigurationException {
425426
String mode = elem.getAttribute("mode");
426427
if (mode != null && mode.length() > 0) {
427428
try {
428-
ImportMode importMode = ImportMode.valueOf(mode.toUpperCase());
429+
ImportMode importMode = ImportMode.valueOf(mode.toUpperCase(Locale.ROOT));
429430
nodeFilters.setImportMode(importMode);
430431
propFilters.setImportMode(importMode);
431432
bothFilters.setImportMode(importMode);
@@ -531,7 +532,7 @@ private void generateSource() {
531532
writer.writeStartElement("filter");
532533
writer.writeAttribute("root", set.getRoot());
533534
if (set.getImportMode() != ImportMode.REPLACE) {
534-
writer.writeAttribute("mode", set.getImportMode().name().toLowerCase());
535+
writer.writeAttribute("mode", set.getImportMode().name().toLowerCase(Locale.ROOT));
535536
}
536537
if (set.getType() != null) {
537538
writer.writeAttribute("type", set.getType());

vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.io.InputStream;
2323
import java.util.Arrays;
2424
import java.util.HashSet;
25+
import java.util.Locale;
2526
import java.util.Set;
2627
import java.util.zip.Deflater;
2728
import java.util.zip.ZipEntry;
@@ -113,7 +114,7 @@ public static int isCompressible(@NotNull Artifact artifact) {
113114
*/
114115
String contentType = artifact.getContentType();
115116
if (contentType != null) {
116-
contentType = contentType.toLowerCase();
117+
contentType = contentType.toLowerCase(Locale.ROOT);
117118
if (isCompressibleContentType(contentType)) {
118119
return 1;
119120
}

vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewImporter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.io.InputStream;
2121
import java.time.Duration;
22+
import java.time.ZoneOffset;
2223
import java.util.ArrayList;
2324
import java.util.Calendar;
2425
import java.util.Collection;
@@ -27,9 +28,11 @@
2728
import java.util.HashSet;
2829
import java.util.LinkedList;
2930
import java.util.List;
31+
import java.util.Locale;
3032
import java.util.Map;
3133
import java.util.Optional;
3234
import java.util.Set;
35+
import java.util.TimeZone;
3336
import java.util.UUID;
3437

3538
import javax.jcr.ImportUUIDBehavior;
@@ -707,7 +710,7 @@ private void handleBinNode(Node node, BlobInfo info, boolean checkIfNtFileOk)
707710
}
708711
// always update last modified if binary was modified (bug #22969)
709712
if (!node.hasProperty(JcrConstants.JCR_LASTMODIFIED) || modified) {
710-
Calendar lastModified = Calendar.getInstance();
713+
Calendar lastModified = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT);
711714
node.setProperty(JcrConstants.JCR_LASTMODIFIED, lastModified);
712715
modified = true;
713716
}

0 commit comments

Comments
 (0)