Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
8c7e55e
Reorder classpath container to have junit container come first
laeubi Mar 1, 2026
c37fbdc
Version bump(s) for 4.40 stream
eclipse-equinox-bot Mar 1, 2026
92cf61f
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Feb 28, 2026
96ba5ab
Set compiler.problem.forbiddenReference to error for all projects
HannesWell Mar 6, 2026
b41ad9a
Version bump(s) for 4.40 stream
eclipse-equinox-bot Mar 6, 2026
df9c55a
Disable the jar creation because the jars are no longer populated
merks Mar 10, 2026
64e5abc
Revert "Disable the jar creation because the jars are no longer popul…
merks Mar 10, 2026
d744195
Set lastModified of empty jars to be really old
merks Mar 11, 2026
fd979b2
Bump json from 2.18.1 to 2.19.2 in /docs
dependabot[bot] Mar 23, 2026
be5262e
Protect against NPE via slf4j.EquinoxLogger
Kummallinen Mar 10, 2026
fab8511
Avoid passing null arg to OSGi logger
Kummallinen Mar 11, 2026
bf9df0e
Correct handling of SLF4J error log calls
Kummallinen Mar 11, 2026
f3d53ac
Wait for STARTED event before adding test listener
tjwatson Mar 31, 2026
c71d914
Version bump(s) for 4.40 stream
eclipse-equinox-bot Mar 31, 2026
e50ec5f
Restore explicit zero dependencies pom.xml for o.e.equinox.supplement
HannesWell Apr 3, 2026
d52d783
Version bump(s) for 4.40 stream
eclipse-equinox-bot Apr 3, 2026
6c65a2d
Revert "Restore explicit zero dependencies pom.xml for
HannesWell Apr 7, 2026
d66ee66
Bump activesupport from 8.0.2 to 8.0.4.1 in /docs
dependabot[bot] Apr 8, 2026
07770b4
Bump emibcn/badge-action from 2.0.3 to 2.0.4
dependabot[bot] Apr 8, 2026
7ba474e
Bump addressable from 2.8.7 to 2.9.0 in /docs
dependabot[bot] Apr 8, 2026
f245096
[Build] Ensure availability guards in macOS native launcher and clean up
HannesWell Apr 4, 2026
e63f61c
Binaries LBv1-1920
eclipse-equinox-bot Apr 8, 2026
17d48df
Correctly wait 1 second on condition
tjwatson Apr 13, 2026
2e7e8a3
[Build] Build macOS native launcher binaries on macOS 15 agents
HeikoKlare Apr 14, 2026
36de39b
Binaries LBv1-1921
eclipse-equinox-bot Apr 14, 2026
429eff3
Add test for concurrent getContent calls
tjwatson Apr 28, 2026
c71d2a6
Cache build-in factories at construction
tjwatson Apr 28, 2026
c74a34a
Improve concurrency test
tjwatson Apr 29, 2026
84add06
Remove ServiceLoader lookups for URLStreamHandlerFactory
tjwatson Apr 29, 2026
399983d
Update tycho-build to 5.0.2
akurtakov Apr 30, 2026
2b81b03
Update bnd-maven-plugin to 7.2.3
akurtakov Apr 30, 2026
641cfdd
Update mockito-core to 5.23.0
akurtakov Apr 30, 2026
a9d18c0
Add apache.commons.commons-fileupload to equinox.server.jetty feature
HannesWell Apr 16, 2026
1028c98
Version bump(s) for 4.40 stream
eclipse-equinox-bot Apr 16, 2026
e9d1950
Bump nokogiri from 1.19.1 to 1.19.3 in /docs
dependabot[bot] May 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
-Dequinox.binaries.loc=${{ github.workspace }}/equinox.binaries
clean verify
- name: Upload native artifacts
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
if: success()
with:
name: ${{ matrix.config.name }} launcher artifacts
Expand All @@ -77,7 +77,7 @@ jobs:
equinox.binaries/org.eclipse.equinox.launcher.${{ matrix.config.ws }}.${{ matrix.config.os }}.x86_64/eclipse_*.${{ matrix.config.native-extension }}
if-no-files-found: error
- name: Upload ${{ matrix.config.name }} Test Results
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: test-results-${{ matrix.config.name }}64
if-no-files-found: error
Expand Down Expand Up @@ -118,7 +118,7 @@ jobs:
-fn
clean verify
- name: Upload TCK Results
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
if: always()
with:
name: tck-results
Expand All @@ -129,7 +129,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Upload
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: Event File
path: ${{ github.event_path }}
2 changes: 1 addition & 1 deletion .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
;;
esac
- name: Create badge of ${{ matrix.tck.name }}
uses: emibcn/badge-action@808173dd03e2f30c980d03ee49e181626088eee8
uses: emibcn/badge-action@f9150fde070fcca0c4e832437611b44838fcd325
with:
# label: ${{ matrix.tck.chapter }} - ${{ matrix.tck.label }} ${{ matrix.tck.suffix }}
label: '${{ fromJSON( steps.test-results.outputs.json ).formatted.stats.tests }} tests'
Expand Down
2 changes: 1 addition & 1 deletion .mvn/extensions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
<extension>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-build</artifactId>
<version>5.0.1</version>
<version>5.0.2</version>
</extension>
</extensions>
10 changes: 6 additions & 4 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@

def runOnNativeBuildAgent(String platform, Closure body) {
def final nativeBuildStageName = 'Perform native launcher build'
// Use x86 agent for aarch64 build to ensure that the baseline macOS SDK (the oldest) is used consistently for all binary builds
if (platform == 'cocoa.macosx.aarch64') {
platform = 'cocoa.macosx.x86_64'
}
def agentLabel = 'native.builder-' + platform
if (platform == 'gtk.linux.x86_64') {
podTemplate(inheritFrom: 'basic' /* inherit general configuration */, containers: [
containerTemplate(name: 'launcherbuild', image: 'eclipse/platformreleng-debian-swtgtk3nativebuild:10',
Expand All @@ -25,12 +30,9 @@ def runOnNativeBuildAgent(String platform, Closure body) {
node(POD_LABEL) { stage(nativeBuildStageName) { container('launcherbuild') { body() } } }
}
} else {
if (platform == 'cocoa.macosx.x86_64') {
platform = 'cocoa.macosx.aarch64'
}
// See the Definition of the RelEng Jenkins instance in
// https://github.com/eclipse-cbi/jiro/tree/master/instances/eclipse.platform.releng
node('native.builder-' + platform) { stage(nativeBuildStageName) { body() } }
node(agentLabel) { stage(nativeBuildStageName) { body() } }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.concurrent
Bundle-Version: 1.3.400.qualifier
Bundle-Version: 1.3.500.qualifier
Bundle-Vendor: %pluginProvider
Bundle-RequiredExecutionEnvironment: JavaSE-17
Import-Package: org.eclipse.core.runtime;common=split;version="3.4.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Bundle-Name: %bundleName
Bundle-Vendor: %bundleVendor
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.equinox.console.jaas.fragment
Bundle-Version: 1.2.100.qualifier
Bundle-Version: 1.2.200.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-17
DynamicImport-Package: org.eclipse.equinox.console.jaas
Fragment-Host: org.apache.sshd.osgi;bundle-version="2.2.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: OSGi service http APIs
Bundle-SymbolicName: org.eclipse.equinox.http.service.api
Bundle-Version: 1.2.102.qualifier
Bundle-Version: 1.2.202.qualifier
Bundle-Vendor: Eclipse.org - Equinox
Automatic-Module-Name: org.eclipse.equinox.http.service.api
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.aarch64;singleton:=true
Bundle-Version: 1.2.1400.qualifier
Bundle-Version: 1.2.1500.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.7.0,1.8.0)"
Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=aarch64) )
Bundle-Localization: launcher.cocoa.macosx.aarch64
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ bin.includes = META-INF/,\
about.html

generateSourceBundle=false
binaryTag=LBv1-1916
binaryTag=LBv1-1921

# Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless
tycho.pomless.parent = ../../launcher-binary-parent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.x86_64;singleton:=true
Bundle-Version: 1.2.1400.qualifier
Bundle-Version: 1.2.1500.qualifier
Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.7.0,1.8.0)"
Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
Bundle-Localization: launcher.cocoa.macosx.x86_64
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ bin.includes = META-INF/,\
about.html

generateSourceBundle=false
binaryTag=LBv1-1916
binaryTag=LBv1-1921

# Maven properties, see https://github.com/eclipse/tycho/wiki/Tycho-Pomless
tycho.pomless.parent = ../../launcher-binary-parent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Equinox security tests
Bundle-SymbolicName: org.eclipse.equinox.security.tests;singleton:=true
Bundle-Version: 1.3.600.qualifier
Bundle-Version: 1.3.700.qualifier
Bundle-Activator: org.eclipse.equinox.internal.security.tests.SecurityTestsActivator
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-Vendor: Eclipse.org
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
2 changes: 1 addition & 1 deletion bundles/org.eclipse.equinox.slf4j/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Bundle-Name: %bundleName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-SymbolicName: org.eclipse.equinox.slf4j
Bundle-Version: 1.0.200.qualifier
Bundle-Version: 1.0.300.qualifier
Import-Package: org.eclipse.equinox.log;version="[1.1.0,2.0.0)",
org.osgi.framework;version="[1.10.0,2.0.0)",
org.osgi.service.log;version="[1.5.0,2.0.0)",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,26 +90,42 @@ protected void handleNormalizedLoggingCall(Level level, Marker marker, String me
if (logger == null) {
return;
}
//Must not pass a null argument to OSGi Logger
Object[] loggerArguments = throwable != null ? new Object[] { throwable } : new Object[0];

if(level == Level.TRACE && logger.isTraceEnabled()) {
String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments);
logger.trace(formattedMessage,throwable);
String formattedMessage = safeBasicArrayFormat(messagePattern, arguments);
logger.trace(formattedMessage, loggerArguments);
}
if(level == Level.DEBUG && logger.isDebugEnabled()) {
String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments);
logger.debug(formattedMessage,throwable);
String formattedMessage = safeBasicArrayFormat(messagePattern, arguments);
logger.debug(formattedMessage, loggerArguments);
}
if(level == Level.WARN && logger.isWarnEnabled()) {
String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments);
logger.warn(formattedMessage,throwable);
String formattedMessage = safeBasicArrayFormat(messagePattern, arguments);
logger.warn(formattedMessage, loggerArguments);
}
if(level == Level.INFO && logger.isInfoEnabled()) {
String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments);
logger.info(formattedMessage, throwable);
String formattedMessage = safeBasicArrayFormat(messagePattern, arguments);
logger.info(formattedMessage, loggerArguments);
}
if(level == Level.ERROR && logger.isInfoEnabled()) {
String formattedMessage = MessageFormatter.basicArrayFormat(messagePattern, arguments);
logger.info(formattedMessage, throwable);
if(level == Level.ERROR && logger.isErrorEnabled()) {
String formattedMessage = safeBasicArrayFormat(messagePattern, arguments);
logger.error(formattedMessage, loggerArguments);
}
}

/**
* Wrapper around SLF4J basicArrayFormat that guards against a null message pattern.
* OSGi does not allow logging a null message
* @param messagePattern
* @param arguments
*/
private String safeBasicArrayFormat(String messagePattern, Object[] arguments) {
if(messagePattern == null) {
return String.valueOf(messagePattern);
} else {
return MessageFormatter.basicArrayFormat(messagePattern, arguments);
}
}

Expand Down
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi.tests/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Core OSGi Tests
Bundle-SymbolicName: org.eclipse.osgi.tests;singleton:=true
Bundle-Version: 3.22.500.qualifier
Bundle-Version: 3.22.600.qualifier
Bundle-Vendor: Eclipse.org
Require-Bundle:
org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)",
Expand Down
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi.tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
</parent>
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.osgi.tests</artifactId>
<version>3.22.500-SNAPSHOT</version>
<version>3.22.600-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.eclipse.equinox.log.SynchronousLogListener;
import org.eclipse.osgi.internal.debug.Debug;
import org.eclipse.osgi.launch.Equinox;
Expand All @@ -39,6 +41,7 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.ServiceReference;
import org.osgi.service.condition.Condition;
import org.osgi.service.log.LogEntry;
Expand Down Expand Up @@ -87,16 +90,28 @@ public void setUp() throws Exception {
Map<String, Object> configuration = new HashMap<>();
configuration.put(Constants.FRAMEWORK_STORAGE, config.getAbsolutePath());
equinox = new Equinox(configuration);
equinox.init();

BundleContext systemContext = equinox.getBundleContext();
CountDownLatch frameworkStarted = new CountDownLatch(1);
systemContext.addFrameworkListener((e) -> {
if (FrameworkEvent.STARTED == e.getType()) {
frameworkStarted.countDown();
}
});

equinox.start();
loggerAdmin = equinox.getBundleContext()
.getService(equinox.getBundleContext().getServiceReference(LoggerAdmin.class));
LogReaderService logReader = equinox.getBundleContext()
.getService(equinox.getBundleContext().getServiceReference(LogReaderService.class));
// Need to wait for the STARTED event before continuing to ensure
// all events are flushed before adding the test log listener
frameworkStarted.await(1, TimeUnit.MINUTES);

loggerAdmin = systemContext.getService(systemContext.getServiceReference(LoggerAdmin.class));
testListener = new TestListener();

LogReaderService logReader = systemContext
.getService(systemContext.getServiceReference(LogReaderService.class));
logReader.addLogListener(testListener);

BundleContext systemContext = equinox.getBundleContext();
debugOptions = systemContext.getService(systemContext.getServiceReference(DebugOptions.class));
}

Expand Down
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi/.classpath
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="osgi/src">
<attributes>
Expand All @@ -25,6 +26,5 @@
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin"/>
</classpath>
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Bundle-Activator: org.eclipse.osgi.internal.framework.SystemBundleActivator
Bundle-Description: %systemBundle
Bundle-Copyright: %copyright
Bundle-Vendor: %eclipse.org
Bundle-Version: 3.24.100.qualifier
Bundle-Version: 3.24.200.qualifier
Bundle-Localization: systembundle
Bundle-DocUrl: http://www.eclipse.org
Eclipse-ExtensibleAPI: true
Expand Down
3 changes: 1 addition & 2 deletions bundles/org.eclipse.osgi/bnd.bnd
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

Require-Capability: \
osgi.serviceloader;osgi.serviceloader="org.osgi.framework.connect.FrameworkUtilHelper", \
osgi.serviceloader;osgi.serviceloader="java.net.ContentHandlerFactory", \
osgi.serviceloader;osgi.serviceloader="java.net.URLStreamHandlerFactory"
osgi.serviceloader;osgi.serviceloader="java.net.ContentHandlerFactory"


Loading
Loading