Skip to content

Commit df446f3

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

39 files changed

+202
-75
lines changed

parent/pom.xml

Lines changed: 34 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,38 @@ 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+
</configuration>
393+
<executions>
394+
<execution>
395+
<goals>
396+
<goal>check</goal>
397+
</goals>
398+
</execution>
399+
</executions>
400+
</plugin>
368401
</plugins>
369402

370403
</build>
@@ -512,7 +545,7 @@ Bundle-Category: jackrabbit
512545
<dependency>
513546
<groupId>commons-io</groupId>
514547
<artifactId>commons-io</artifactId>
515-
<version>2.7</version>
548+
<version>${commons-io.version}</version>
516549
</dependency>
517550
<dependency>
518551
<groupId>org.apache.commons</groupId>

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
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919

2020
import java.io.IOException;
2121
import java.io.InputStream;
22+
import java.time.ZoneOffset;
2223
import java.util.Calendar;
2324
import java.util.Collection;
25+
import java.util.Locale;
26+
import java.util.TimeZone;
2427

2528
import javax.jcr.ImportUUIDBehavior;
2629
import javax.jcr.Node;
@@ -341,7 +344,7 @@ private boolean importNtResource(ImportInfo info, Node content, Artifact artifac
341344

342345
// always update last modified if binary was modified (bug #22969)
343346
if (!content.hasProperty(JcrConstants.JCR_LASTMODIFIED) || modified) {
344-
Calendar lastMod = Calendar.getInstance();
347+
Calendar lastMod = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT);
345348
content.setProperty(JcrConstants.JCR_LASTMODIFIED, lastMod);
346349
modified = true;
347350
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Arrays;
2121
import java.util.HashSet;
2222
import java.util.List;
23+
import java.util.Locale;
2324
import java.util.Set;
2425
import java.util.concurrent.TimeUnit;
2526

@@ -182,7 +183,7 @@ public NodeStash excludeName(String name) {
182183
}
183184

184185
String primaryType = parent.getPrimaryNodeType().getName();
185-
String message = String.format("Stashed node %s of type %s as %s (%d child nodes, %d properties, elapsed %s).", path, primaryType,
186+
String message = String.format(Locale.ENGLISH, "Stashed node %s of type %s as %s (%d child nodes, %d properties, elapsed %s).", path, primaryType,
186187
tmp.getPath(), childNodeCount, propertyCount, Duration.ofMillis(System.currentTimeMillis() - start));
187188
if (shouldWarn) {
188189
log.warn(message);
@@ -264,7 +265,7 @@ public void recover(@NotNull ImportMode importMode, @Nullable ImportInfo importI
264265
log.debug("Restored properties and child nodes of {} from {} (mode: {}).", path, tmpNode.getPath(), importMode);
265266

266267
if (shouldWarn) {
267-
String message = String.format("Stashed node recovery for %s done (%d child nodes, elapsed %s).", path,
268+
String message = String.format(Locale.ENGLISH, "Stashed node recovery for %s done (%d child nodes, elapsed %s).", path,
268269
childNodeCount, Duration.ofMillis(System.currentTimeMillis() - start));
269270
log.warn(message);
270271
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@
2222
import java.io.IOException;
2323
import java.io.InputStream;
2424
import java.io.StringWriter;
25+
import java.time.ZoneOffset;
2526
import java.util.Calendar;
2627
import java.util.Collection;
2728
import java.util.HashSet;
29+
import java.util.Locale;
2830
import java.util.Properties;
2931
import java.util.Set;
32+
import java.util.TimeZone;
3033
import java.util.jar.Attributes;
3134
import java.util.jar.JarFile;
3235
import java.util.jar.Manifest;
@@ -223,7 +226,7 @@ public void export(VaultFile parent, boolean noClose)
223226
mgr.startTracking(tracker == null ? null : tracker.getListener());
224227
if (!noMetaInf) {
225228
// update properties
226-
setProperty(MetaInf.CREATED, Calendar.getInstance());
229+
setProperty(MetaInf.CREATED, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT));
227230
setProperty(MetaInf.CREATED_BY, mgr.getUserId());
228231
setProperty(MetaInf.GENERATOR, generator);
229232
setProperty(MetaInf.PACKAGE_FORMAT_VERSION, String.valueOf(MetaInf.FORMAT_VERSION_2));
@@ -241,7 +244,7 @@ public void export(VaultFile parent, boolean noClose)
241244

242245
// check for package type
243246
if (!properties.containsKey(NAME_PACKAGE_TYPE)) {
244-
properties.setProperty(NAME_PACKAGE_TYPE, detectPackageType(filter).name().toLowerCase());
247+
properties.setProperty(NAME_PACKAGE_TYPE, detectPackageType(filter).name().toLowerCase(Locale.ROOT));
245248
}
246249

247250
// write Manifest

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
package org.apache.jackrabbit.vault.fs.io;
1919

20+
import java.util.Locale;
21+
2022
import javax.jcr.RepositoryException;
2123
import javax.jcr.Session;
2224
import javax.jcr.nodetype.ConstraintViolationException;
@@ -169,7 +171,7 @@ public void save(@Nullable Session session, boolean isIntermediate) throws Repos
169171
// TODO: how can session be null here?
170172
if (session != null) {
171173
if (debugFailEach > 0 && debugSaveCount > 0 && debugSaveCount%debugFailEach == 0) {
172-
String msg = String.format("Debugging provoked failure after %s saves.", debugSaveCount);
174+
String msg = String.format(Locale.ENGLISH, "Debugging provoked failure after %s saves.", debugSaveCount);
173175
log.error(msg);
174176
throw new RepositoryException(msg);
175177
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.LinkedHashMap;
3434
import java.util.LinkedList;
3535
import java.util.List;
36+
import java.util.Locale;
3637
import java.util.Map;
3738
import java.util.Optional;
3839
import java.util.Properties;
@@ -1211,10 +1212,10 @@ public void checkinNodes(Session session) {
12111212
Node node = session.getNode(path);
12121213
try {
12131214
if (opts.isDryRun()) {
1214-
track("V", String.format("%s (---)", path));
1215+
track("V", String.format(Locale.ENGLISH, "%s (---)", path));
12151216
} else {
12161217
Version v = node.checkin();
1217-
track("V", String.format("%s (%s)", path, v.getName()));
1218+
track("V", String.format(Locale.ENGLISH, "%s (%s)", path, v.getName()));
12181219
}
12191220
} catch (RepositoryException e) {
12201221
log.error("Error while checkin node {}: {}",path, e.toString());
@@ -1242,7 +1243,7 @@ public void applyMemberships(Session session) {
12421243
if (!opts.isDryRun()) {
12431244
userManagement.addMembers(session, id, members);
12441245
}
1245-
track("U", String.format("%s", authPath));
1246+
track("U", String.format(Locale.ENGLISH, "%s", authPath));
12461247
}
12471248
}
12481249
if (!autoSave.isDisabled()) {

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

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

2020
import java.io.IOException;
2121
import java.io.InputStream;
22+
import java.time.ZoneOffset;
2223
import java.util.Calendar;
24+
import java.util.Locale;
25+
import java.util.TimeZone;
2326

2427
import javax.jcr.Binary;
2528
import javax.jcr.Node;
@@ -140,7 +143,7 @@ public void writeFile(VaultFile file, String relPath)
140143
}
141144
break;
142145
}
143-
Calendar now = Calendar.getInstance();
146+
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT);
144147
if (a.getLastModified() >= 0) {
145148
now.setTimeInMillis(a.getLastModified());
146149
}
@@ -163,7 +166,7 @@ public void writeFile(InputStream in, String relPath) throws IOException {
163166
}
164167
Binary b = content.getSession().getValueFactory().createBinary(in);
165168
content.setProperty(JcrConstants.JCR_DATA, b);
166-
content.setProperty(JcrConstants.JCR_LASTMODIFIED, Calendar.getInstance());
169+
content.setProperty(JcrConstants.JCR_LASTMODIFIED, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT));
167170
if (!content.hasProperty(JcrConstants.JCR_MIMETYPE)){
168171
content.setProperty(JcrConstants.JCR_MIMETYPE, "application/octet-stream");
169172
}

vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/SubPackageHandling.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Collections;
2020
import java.util.LinkedList;
2121
import java.util.List;
22+
import java.util.Locale;
2223

2324
import org.apache.jackrabbit.util.Text;
2425

@@ -146,7 +147,7 @@ public static SubPackageHandling fromString(String str) {
146147
Option opt = Option.INSTALL;
147148
if (opts.length > 1) {
148149
try {
149-
opt = Option.valueOf(opts[1].toUpperCase());
150+
opt = Option.valueOf(opts[1].toUpperCase(Locale.ROOT));
150151
} catch (IllegalArgumentException e) {
151152
// ignore
152153
}
@@ -197,7 +198,7 @@ public String getString() {
197198
}
198199
sb.append(e.getGroupName()).append(":").append(e.getPackageName());
199200
if (e.option != Option.INSTALL) {
200-
sb.append(';').append(e.option.toString().toLowerCase());
201+
sb.append(';').append(e.option.toString().toLowerCase(Locale.ROOT));
201202
}
202203
}
203204
return sb.toString();

0 commit comments

Comments
 (0)