Skip to content

Commit de82439

Browse files
chore: merge main into release [skip ci]
2 parents 738b18d + 04feb0e commit de82439

4 files changed

Lines changed: 29 additions & 21 deletions

File tree

microsphere-java-core/src/main/java/io/microsphere/classloading/ArtifactDetector.java

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import io.microsphere.lang.Prioritized;
77
import io.microsphere.logging.Logger;
88

9-
import java.io.File;
109
import java.net.URL;
1110
import java.util.Iterator;
1211
import java.util.LinkedHashSet;
@@ -15,9 +14,7 @@
1514

1615
import static io.microsphere.collection.CollectionUtils.size;
1716
import static io.microsphere.collection.ListUtils.newArrayList;
18-
import static io.microsphere.lang.function.ThrowableSupplier.execute;
1917
import static io.microsphere.logging.LoggerFactory.getLogger;
20-
import static io.microsphere.net.URLUtils.resolveArchiveFile;
2118
import static io.microsphere.util.ClassLoaderUtils.findAllClassPathURLs;
2219
import static io.microsphere.util.ClassLoaderUtils.getClassLoader;
2320
import static io.microsphere.util.ClassLoaderUtils.getClassResource;
@@ -52,9 +49,9 @@
5249
*
5350
* <pre>{@code
5451
* public class CustomArtifactResolver implements ArtifactResourceResolver {
55-
* public Artifact resolve(URL resourceURL) {
56-
* if (resourceURL.getProtocol().equals("file")) {
57-
* return new FileArtifact(resourceURL); // hypothetical custom artifact
52+
* public Artifact resolve(URL classPathURL) {
53+
* if (classPathURL.getProtocol().equals("file")) {
54+
* return new FileArtifact(classPathURL); // hypothetical custom artifact
5855
* }
5956
* return null;
6057
* }
@@ -112,14 +109,14 @@ public List<Artifact> detect(boolean includedJdkLibraries) {
112109

113110
@Nonnull
114111
@Immutable
115-
public List<Artifact> detect(@Nullable Set<URL> resourceURLs) {
116-
int size = size(resourceURLs);
112+
public List<Artifact> detect(@Nullable Set<URL> classPathURLs) {
113+
int size = size(classPathURLs);
117114
if (size < 1) {
118115
return emptyList();
119116
}
120117
List<Artifact> artifactList = newArrayList(size);
121-
for (URL resourceURL : resourceURLs) {
122-
Artifact artifact = detect(resourceURL);
118+
for (URL classPathURL : classPathURLs) {
119+
Artifact artifact = detect(classPathURL);
123120
if (artifact != null) {
124121
artifactList.add(artifact);
125122
break;
@@ -135,15 +132,7 @@ public Artifact detect(@Nonnull Class<?> classInResource) {
135132
}
136133

137134
@Nullable
138-
public Artifact detect(@Nonnull URL resourceURL) {
139-
File archiveFile = resolveArchiveFile(resourceURL);
140-
if (archiveFile == null) {
141-
if (logger.isTraceEnabled()) {
142-
logger.trace("The URL[{}] is not an archive file, no artifact was found!", resourceURL);
143-
}
144-
return null;
145-
}
146-
URL classPathURL = execute(archiveFile.toURI()::toURL);
135+
public Artifact detect(@Nonnull URL classPathURL) {
147136
Artifact artifact = null;
148137
for (ArtifactResourceResolver artifactResourceResolver : artifactResourceResolvers) {
149138
artifact = artifactResourceResolver.resolve(classPathURL);

microsphere-java-core/src/main/java/io/microsphere/util/Version.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import static io.microsphere.util.Version.Operator.GT;
4949
import static io.microsphere.util.Version.Operator.LE;
5050
import static io.microsphere.util.Version.Operator.LT;
51+
import static io.microsphere.util.VersionUtils.CURRENT_JAVA_VERSION;
5152
import static java.lang.Integer.compare;
5253
import static java.lang.Integer.parseInt;
5354

@@ -620,12 +621,20 @@ public static Version ofVersion(String version) {
620621
*
621622
* @param classInResource the class contained in the artifact whose version is to be detected
622623
* @return a new {@link Version} instance
624+
* @throws IllegalArgumentException if the version can't be resolved
623625
*/
624626
public static Version ofVersion(@Nonnull Class<?> classInResource) {
625627
assertNotNull(classInResource, () -> "The 'classInResource' argument must not be null!");
626628
ClassLoader classLoader = classInResource.getClassLoader();
629+
if (classLoader == null) { // Bootstrap ClassLoader
630+
return CURRENT_JAVA_VERSION;
631+
}
627632
ArtifactDetector detector = new ArtifactDetector(classLoader);
628633
Artifact artifact = detector.detect(classInResource);
634+
if (artifact == null) {
635+
String errorMessage = format("The version can't be resolved by the {}", classInResource);
636+
throw new IllegalArgumentException(errorMessage);
637+
}
629638
String version = artifact.getVersion();
630639
return ofVersion(version);
631640
}

microsphere-java-core/src/test/java/io/microsphere/classloading/ArtifactDetectorTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ void testDetectOnClassInResource() {
6868
@Test
6969
void testDetectOnResourceURL() {
7070
ArtifactDetector instance = new ArtifactDetector();
71-
assertThrows(NullPointerException.class, () -> instance.detect((URL) null));
72-
71+
assertNull(instance.detect((URL) null));
7372
URL url = ofURL("file:///not-found");
7473
Artifact artifact = instance.detect(url);
7574
assertNull(artifact);

microsphere-java-core/src/test/java/io/microsphere/util/VersionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@
3232
import static io.microsphere.util.Version.getVersion;
3333
import static io.microsphere.util.Version.of;
3434
import static io.microsphere.util.Version.ofVersion;
35+
import static io.microsphere.util.VersionUtils.CURRENT_JAVA_VERSION;
3536
import static org.junit.jupiter.api.Assertions.assertEquals;
3637
import static org.junit.jupiter.api.Assertions.assertFalse;
3738
import static org.junit.jupiter.api.Assertions.assertNotNull;
39+
import static org.junit.jupiter.api.Assertions.assertSame;
3840
import static org.junit.jupiter.api.Assertions.assertThrows;
3941
import static org.junit.jupiter.api.Assertions.assertTrue;
4042

@@ -123,6 +125,15 @@ void testOfWithVersion() {
123125
void testOfVersionOnClassInResource() {
124126
Version version = ofVersion(Nullable.class);
125127
assertEquals("3.0.2", version.toString());
128+
129+
// The Class loaded by Bootstrap ClassLoader
130+
version = ofVersion(String.class);
131+
assertSame(CURRENT_JAVA_VERSION, version);
132+
}
133+
134+
@Test
135+
void testOfVersionOnIllegalArgumentException() {
136+
assertThrows(IllegalArgumentException.class, () -> ofVersion(Version.class));
126137
}
127138

128139
@Test

0 commit comments

Comments
 (0)