You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by tj...@apache.org on 2021/01/12 18:29:11 UTC
[felix-dev] branch scrR8 updated (f343822 -> 2de0937)
This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a change to branch scrR8
in repository https://gitbox.apache.org/repos/asf/felix-dev.git.
from f343822 Merge branch 'master' into scrR8
add 5758834 FELIX-6308 : Revert changes
add 4c826f0 Format according to the rest of SCR codebase
add 462bfe2 FELIX-6361 - Avoid IllegalArgumentException for calls to getLogger
add d2f25bf FELIX-6362 Utils ResourceBuilder does not allow java.* imports
add cf18cb6 Merge pull request #62 from bosschaert/FELIX-6362
add 964413a [maven-release-plugin] prepare release org.apache.felix.utils-1.11.6
add 7be69de [maven-release-plugin] prepare for next development iteration
add e5e5bf1 FELIX-6364 Security vulnerability CVE-2020-27216 ,update jetty (#63)
add 4169566 [maven-release-plugin] prepare release org.apache.felix.http.jetty-4.1.4
add a1dfca9 [maven-release-plugin] prepare for next development iteration
add 7d91f8c FELIX-6363 : Simplify updating of OSGi configurations through REST API
add 7fb5984 FELIX-6366 1.0.3 < jQuery <3.4.0 is vulnerable to CVE-2020-11023 (#64)
add c09718b Update webconsole changelog
add d3fd46a Update changelog
add 6499084 FELIX-6222: Support for os.name Capability is missing for Windows Server 2019
add bf1af68 Update changelog
add 67cd796 Update changelog and dependencies
add b006c4f Update changelogs, dependencies, and prepare for release
add 25f6f7d [maven-release-plugin] prepare release org.apache.felix.resolver-2.0.2
add 4099d2c [maven-release-plugin] prepare for next development iteration
add 758ee60 Update to developer release version
add 7d666fb Update dependencies for release
add d3e64c2 [maven-release-plugin] prepare release org.apache.felix.framework-6.0.4
add 7f88824 [maven-release-plugin] prepare for next development iteration
add 797c0fc Update dependencies after release
add 3033457 Update dependencies for release
add c4eb148 [maven-release-plugin] prepare release org.apache.felix.main-6.0.4
add 93d68d1 [maven-release-plugin] prepare for next development iteration
add 1e86095 Update dependencies after release
add f12f258 Update dependencies for release
add 8362398 [maven-release-plugin] prepare release org.apache.felix.main.distribution-6.0.4
add 4fff6e4 [maven-release-plugin] prepare for next development iteration
add 00be08c FELIX-6370 : Provide a User interface for checks within plugins
add 814d8ca Update .gitignore
add 5b50cf0 FELIX-6370 : Provide a User interface for checks within plugins
add 51a8628 [maven-release-plugin] prepare release org.apache.felix.webconsole-4.6.0
add f9e5a42 [maven-release-plugin] prepare for next development iteration
add 69cfc5c Fix javadoc errors and warnings with Java 8
add 54a9590 [maven-release-plugin] prepare release org.apache.felix.eventadmin-1.6.0
add 31fa52b [maven-release-plugin] prepare for next development iteration
new 9ab0150 Merge branch 'master' into scrR8
new c107424 Force Java 8 compiler
new 5d167e2 Add support for Optional<ServiceType> to be injected
add 8bccf4d FELIX-6369: Implement R8 core spec
add a1ec804 Merge pull request #65 from apache/frameworkR8
add af8cf08 FELIX-6294: add a slash to urls for directories
add 425655e Merge pull request #66 from apache/issues/FELIX-6294
add 2e18682 FELIX-6163: do not use System.currentTimeMillis() to check timeouts
add 945008d Merge pull request #67 from apache/issues/FELIX-6163
add 0cd499d Update dependencies to released versions
add 55b5fe2 Update changelogs
add 8f5117c [maven-release-plugin] prepare release org.apache.felix.framework-7.0.0
add 89bcce8 [maven-release-plugin] prepare for next development iteration
add 5edad1f [maven-release-plugin] prepare release org.apache.felix.framework.security-2.8.0
add 2564eab [maven-release-plugin] prepare for next development iteration
add 3eab73e [maven-release-plugin] prepare release org.apache.felix.main-7.0.0
add e602f1a [maven-release-plugin] prepare for next development iteration
add 4337c59 Update dependency for release
add 4a4c7a1 [maven-release-plugin] prepare release org.apache.felix.main.distribution-7.0.0
add 3bd444d [maven-release-plugin] prepare for next development iteration
add bf58c61 [maven-release-plugin] prepare release org.apache.felix.configadmin-1.9.20
add 7eac0ab [maven-release-plugin] prepare for next development iteration
add 1fd72ff FELIX-6373 : Wrong provide capability header
add 6334163 [maven-release-plugin] prepare release org.apache.felix.eventadmin-1.6.2
add 72ab8ae [maven-release-plugin] prepare for next development iteration
new 2de0937 Merge branch 'master' into scrR8
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.gitignore | 1 +
configadmin/changelog.txt | 1 -
configadmin/pom.xml | 2 +-
.../felix/cm/file/FilePersistenceManager.java | 12 +-
eventadmin/impl/changelog.txt | 6 +
eventadmin/impl/pom.xml | 7 +-
.../apache/felix/eventadmin/impl/Activator.java | 2 +-
.../felix/eventadmin/impl/Configuration.java | 20 +-
.../eventadmin/impl/adapter/AbstractAdapter.java | 2 +-
.../impl/adapter/BundleEventAdapter.java | 6 +-
.../impl/adapter/FrameworkEventAdapter.java | 6 +-
.../eventadmin/impl/adapter/LogEventAdapter.java | 20 +-
.../impl/adapter/ServiceEventAdapter.java | 6 +-
.../eventadmin/impl/handler/EventAdminImpl.java | 27 +-
.../eventadmin/impl/handler/EventHandlerProxy.java | 11 +-
.../impl/handler/EventHandlerTracker.java | 4 +-
.../impl/security/EventAdminSecurityDecorator.java | 20 +-
.../eventadmin/impl/security/PermissionsUtil.java | 8 +-
.../impl/security/SecureEventAdminFactory.java | 22 +-
.../eventadmin/impl/tasks/AsyncDeliverTasks.java | 1 +
.../eventadmin/impl/tasks/DefaultThreadPool.java | 4 +
.../felix/eventadmin/impl/tasks/DenylistLatch.java | 2 +-
.../felix/eventadmin/impl/tasks/HandlerTask.java | 1 +
.../eventadmin/impl/tasks/SyncDeliverTasks.java | 7 +-
.../felix/eventadmin/impl/tasks/SyncThread.java | 1 +
.../felix/eventadmin/impl/util/LogWrapper.java | 18 +-
framework.security/doc/changelog.txt | 6 +
framework.security/pom.xml | 7 +-
.../org/apache/felix/framework/FakeBundle.java | 10 -
.../felix/framework/security/util/Permissions.java | 19 +-
framework/doc/changelog.txt | 24 +
framework/pom.xml | 47 +-
.../src/main/appended-resources/META-INF/NOTICE | 2 +-
.../org/apache/felix/framework/BundleImpl.java | 44 +-
.../felix/framework/BundleProtectionDomain.java | 13 +-
.../apache/felix/framework/BundleRevisionImpl.java | 40 +
.../apache/felix/framework/BundleWiringImpl.java | 88 +-
.../org/apache/felix/framework/DTOFactory.java | 5 +
.../apache/felix/framework/ExtensionManager.java | 117 +-
.../java/org/apache/felix/framework/Felix.java | 81 +-
.../apache/felix/framework/FrameworkFactory.java | 10 +-
.../felix/framework/FrameworkWiringImpl.java | 3 -
.../felix/framework/ServiceRegistrationImpl.java | 23 +-
.../apache/felix/framework/StatefulResolver.java | 18 +-
.../org/apache/felix/framework/URLHandlers.java | 60 +-
.../framework/URLHandlersBundleURLConnection.java | 14 +-
.../framework/URLHandlersStreamHandlerProxy.java | 3 +-
.../org/apache/felix/framework/WovenClassImpl.java | 54 +-
.../felix/framework/cache/BundleArchive.java | 43 +-
.../apache/felix/framework/cache/BundleCache.java | 30 +-
.../framework/cache/ConnectContentContent.java | 224 +++
...DirectoryRevision.java => ConnectRevision.java} | 63 +-
.../org/apache/felix/framework/cache/Content.java | 14 +
.../framework/cache/ContentDirectoryContent.java | 64 +-
.../felix/framework/cache/DirectoryContent.java | 54 +-
.../felix/framework/cache/DirectoryRevision.java | 2 +-
.../apache/felix/framework/cache/JarContent.java | 31 +-
.../apache/felix/framework/cache/JarRevision.java | 2 +-
.../framework/capabilityset/CapabilitySet.java | 2 +-
.../framework/capabilityset/SimpleFilter.java | 1 -
.../framework/ext/ClassPathExtenderFactory.java | 10 +-
.../felix/framework/util/MultiReleaseContent.java | 49 +-
.../apache/felix/framework/util/SecureAction.java | 234 ++-
.../apache/felix/framework/util/ThreadGate.java | 6 +-
.../java/org/apache/felix/framework/util/Util.java | 148 +-
.../util/manifestparser/ManifestParser.java | 70 +-
.../util/manifestparser/NativeLibraryClause.java | 5 +
.../framework/wiring/BundleCapabilityImpl.java | 75 +-
.../framework/wiring/BundleRequirementImpl.java | 4 +-
framework/src/main/java/org/osgi/dto/DTO.java | 2 +-
.../src/main/java/org/osgi/dto/package-info.java | 2 +-
.../java/org/osgi/framework/BundlePermission.java | 6 +-
.../org/osgi/framework/CapabilityPermission.java | 6 +-
.../main/java/org/osgi/framework/Constants.java | 12 +-
.../main/java/org/osgi/framework/FilterImpl.java | 1385 ++++++++++++++
.../java/org/osgi/framework/FrameworkEvent.java | 13 +-
.../java/org/osgi/framework/FrameworkUtil.java | 2017 +++++---------------
.../java/org/osgi/framework/PackagePermission.java | 6 +-
.../osgi/framework/PrototypeServiceFactory.java | 2 +-
.../java/org/osgi/framework/ServiceObjects.java | 2 +-
.../java/org/osgi/framework/ServicePermission.java | 6 +-
.../java/org/osgi/framework/ServiceReference.java | 59 +-
.../org/osgi/framework/connect/ConnectContent.java | 218 +++
.../framework/connect/ConnectFrameworkFactory.java | 79 +
.../org/osgi/framework/connect/ConnectModule.java | 47 +
.../framework/connect/FrameworkUtilHelper.java | 48 +
.../osgi/framework/connect/ModuleConnector.java | 105 +
.../{hooks/resolver => connect}/package-info.java | 13 +-
.../java/org/osgi/framework/dto/BundleDTO.java | 2 +-
.../java/org/osgi/framework/dto/FrameworkDTO.java | 2 +-
.../osgi/framework/dto/ServiceReferenceDTO.java | 9 +-
.../java/org/osgi/framework/dto/package-info.java | 2 +-
.../osgi/framework/hooks/bundle/package-info.java | 2 +-
.../framework/hooks/resolver/package-info.java | 2 +-
.../osgi/framework/hooks/service/package-info.java | 2 +-
.../framework/hooks/weaving/WeavingException.java | 7 +-
.../osgi/framework/hooks/weaving/WeavingHook.java | 21 +-
.../hooks/weaving/WovenClassListener.java | 2 +-
.../osgi/framework/hooks/weaving/package-info.java | 2 +-
.../java/org/osgi/framework/launch/Framework.java | 35 +-
.../osgi/framework/launch/FrameworkFactory.java | 5 +-
.../org/osgi/framework/launch/package-info.java | 4 +-
.../osgi/framework/namespace/HostNamespace.java | 20 +-
.../framework/namespace/IdentityNamespace.java | 14 +-
.../osgi/framework/namespace/NativeNamespace.java | 8 +-
.../org/osgi/framework/namespace/package-info.java | 8 +-
.../main/java/org/osgi/framework/package-info.java | 10 +-
.../startlevel/dto/BundleStartLevelDTO.java | 2 +-
.../startlevel/dto/FrameworkStartLevelDTO.java | 2 +-
.../framework/startlevel/dto/package-info.java | 2 +-
.../osgi/framework/startlevel/package-info.java | 2 +-
.../framework/wiring/dto/BundleRevisionDTO.java | 2 +-
.../osgi/framework/wiring/dto/BundleWireDTO.java | 2 +-
.../osgi/framework/wiring/dto/BundleWiringDTO.java | 2 +-
.../osgi/framework/wiring/dto/package-info.java | 2 +-
.../org/osgi/framework/wiring/package-info.java | 2 +-
.../java/org/osgi/resource/dto/CapabilityDTO.java | 2 +-
.../org/osgi/resource/dto/CapabilityRefDTO.java | 2 +-
.../java/org/osgi/resource/dto/RequirementDTO.java | 2 +-
.../org/osgi/resource/dto/RequirementRefDTO.java | 2 +-
.../java/org/osgi/resource/dto/ResourceDTO.java | 2 +-
.../main/java/org/osgi/resource/dto/WireDTO.java | 2 +-
.../main/java/org/osgi/resource/dto/WiringDTO.java | 2 +-
.../java/org/osgi/resource/dto/package-info.java | 2 +-
.../main/java/org/osgi/resource/package-info.java | 2 +-
.../java/org/osgi/service/condition/Condition.java | 0
.../dto => service/condition}/package-info.java | 15 +-
.../osgi/service/packageadmin/package-info.java | 2 +-
.../org/osgi/service/startlevel/package-info.java | 2 +-
.../java/org/osgi/service/url/package-info.java | 2 +-
.../java/org/osgi/util/tracker/ServiceTracker.java | 5 +-
.../java/org/osgi/util/tracker/package-info.java | 2 +-
.../native-image.properties | 5 +
.../org.apache.felix.framework/reflect-config.json | 27 +
.../resource-config.json | 9 +
....osgi.framework.connect.ConnectFrameworkFactory | 1 +
framework/src/main/resources/default.properties | 22 +-
.../org/apache/felix/framework/util/accessor.bytes | Bin 0 -> 816 bytes
.../org/apache/felix/framework/util/accessor.src} | 19 +-
.../apache/felix/framework/CollisionHookTest.java | 4 +-
.../org/apache/felix/framework/ConnectTest.java | 369 ++++
.../org/apache/felix/framework/LaunchTest.java | 156 ++
.../felix/framework/MultiReleaseVersionTest.java | 2 +-
.../felix/framework/ResourceLoadingTest.java | 76 +-
.../felix/framework/cache/BundleCacheTest.java | 10 +-
.../util/manifestparser/ManifestParserTest.java | 30 +-
http/jetty/pom.xml | 4 +-
http/sslfilter/pom.xml | 2 +-
main.distribution/NOTICE | 2 +-
main.distribution/doc/changelog.txt | 16 +
main.distribution/doc/changelog_framework.txt | 24 +
main.distribution/doc/changelog_gogo.command.txt | 46 +-
main.distribution/doc/changelog_gogo.runtime.txt | 89 +-
main.distribution/doc/changelog_main.txt | 16 +
main.distribution/doc/changelog_resolver.txt | 7 +
main.distribution/pom.xml | 17 +-
main/doc/changelog.txt | 16 +
main/pom.xml | 17 +-
main/src/main/appended-resources/META-INF/NOTICE | 2 +-
resolver/doc/changelog.txt | 7 +
resolver/pom.xml | 1 +
.../src/main/appended-resources/META-INF/NOTICE | 2 +-
scr/pom.xml | 3 +
.../apache/felix/scr/impl/inject/ValueUtils.java | 14 +-
.../felix/scr/impl/inject/field/FieldHandler.java | 45 +-
.../felix/scr/impl/inject/internal/ClassUtils.java | 3 +
.../inject/internal/ComponentConstructorImpl.java | 10 +-
.../apache/felix/scr/impl/logger/BundleLogger.java | 6 +-
.../felix/scr/impl/logger/ComponentLogger.java | 5 +-
.../felix/scr/impl/logger/ExtLogManager.java | 77 +-
.../felix/scr/impl/logger/InternalLogger.java | 152 +-
.../apache/felix/scr/impl/logger/LogManager.java | 422 ++--
.../felix/scr/impl/logger/ScrLogManager.java | 570 +++---
.../apache/felix/scr/impl/logger/ScrLogger.java | 19 +-
.../scr/integration/ComponentOptionalTest.java | 170 ++
.../components/ConstructorSingleReference.java | 12 +
.../components/InjectOptionalComponent.java | 162 ++
.../resources/integration_test_inject_optional.xml | 121 ++
utils/pom.xml | 5 +-
.../felix/utils/resource/ResourceBuilder.java | 7 +-
.../felix/utils/resource/ResourceBuilderTest.java | 33 +
webconsole/changelog.txt | 4 +
webconsole/pom.xml | 27 +-
.../res/lib/{jquery-3.4.1.js => jquery-3.5.1.js} | 1238 +++++++-----
...ry-migrate-3.1.0.js => jquery-migrate-3.3.0.js} | 292 ++-
.../java/org/apache/felix/webconsole/User.java | 53 +
.../webconsole/WebConsoleSecurityProvider.java | 2 +-
.../felix/webconsole/bundleinfo/package-info.java | 21 +-
.../apache/felix/webconsole/i18n/package-info.java | 21 +-
.../internal/configuration/ConfigAdminSupport.java | 24 +-
.../internal/configuration/ConfigManager.java | 3 +-
.../webconsole/internal/servlet/OsgiManager.java | 121 +-
.../internal/servlet/OsgiManagerHttpContext.java | 80 +-
.../org/apache/felix/webconsole/package-info.java | 21 +-
.../src/main/resources/res/lib/jquery-3.4.1.js | 2 -
.../src/main/resources/res/lib/jquery-3.5.1.js | 2 +
.../main/resources/res/lib/jquery-migrate-3.1.0.js | 2 -
.../main/resources/res/lib/jquery-migrate-3.3.0.js | 2 +
.../src/main/resources/templates/main_header.html | 4 +-
.../servlet/OsgiManagerHttpContextTest.java | 4 +-
.../internal/servlet/OsgiManagerTest.java | 5 +-
201 files changed, 7343 insertions(+), 3704 deletions(-)
create mode 100644 framework/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
copy framework/src/main/java/org/apache/felix/framework/cache/{DirectoryRevision.java => ConnectRevision.java} (61%)
create mode 100755 framework/src/main/java/org/osgi/framework/FilterImpl.java
create mode 100644 framework/src/main/java/org/osgi/framework/connect/ConnectContent.java
create mode 100644 framework/src/main/java/org/osgi/framework/connect/ConnectFrameworkFactory.java
create mode 100644 framework/src/main/java/org/osgi/framework/connect/ConnectModule.java
create mode 100644 framework/src/main/java/org/osgi/framework/connect/FrameworkUtilHelper.java
create mode 100644 framework/src/main/java/org/osgi/framework/connect/ModuleConnector.java
copy framework/src/main/java/org/osgi/framework/{hooks/resolver => connect}/package-info.java (75%)
copy {scr/src/test => framework/src/main}/java/org/osgi/service/condition/Condition.java (100%)
mode change 100644 => 100755
copy framework/src/main/java/org/osgi/{resource/dto => service/condition}/package-info.java (75%)
mode change 100644 => 100755
create mode 100644 framework/src/main/resources/META-INF/native-image/org.apache.felix/org.apache.felix.framework/native-image.properties
create mode 100644 framework/src/main/resources/META-INF/native-image/org.apache.felix/org.apache.felix.framework/reflect-config.json
create mode 100644 framework/src/main/resources/META-INF/native-image/org.apache.felix/org.apache.felix.framework/resource-config.json
create mode 100644 framework/src/main/resources/META-INF/services/org.osgi.framework.connect.ConnectFrameworkFactory
create mode 100644 framework/src/main/resources/org/apache/felix/framework/util/accessor.bytes
copy framework/src/main/{java/org/apache/felix/framework/FrameworkFactory.java => resources/org/apache/felix/framework/util/accessor.src} (72%)
create mode 100644 framework/src/test/java/org/apache/felix/framework/ConnectTest.java
create mode 100644 framework/src/test/java/org/apache/felix/framework/LaunchTest.java
create mode 100644 scr/src/test/java/org/apache/felix/scr/integration/ComponentOptionalTest.java
create mode 100644 scr/src/test/java/org/apache/felix/scr/integration/components/InjectOptionalComponent.java
create mode 100644 scr/src/test/resources/integration_test_inject_optional.xml
create mode 100644 utils/src/test/java/org/apache/felix/utils/resource/ResourceBuilderTest.java
rename webconsole/src/main/debug-resources/res/lib/{jquery-3.4.1.js => jquery-3.5.1.js} (91%)
mode change 100755 => 100644
rename webconsole/src/main/debug-resources/res/lib/{jquery-migrate-3.1.0.js => jquery-migrate-3.3.0.js} (70%)
mode change 100755 => 100644
create mode 100644 webconsole/src/main/java/org/apache/felix/webconsole/User.java
copy scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogger.java => webconsole/src/main/java/org/apache/felix/webconsole/bundleinfo/package-info.java (73%)
copy scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogger.java => webconsole/src/main/java/org/apache/felix/webconsole/i18n/package-info.java (73%)
copy scr/src/main/java/org/apache/felix/scr/impl/logger/ScrLogger.java => webconsole/src/main/java/org/apache/felix/webconsole/package-info.java (73%)
delete mode 100755 webconsole/src/main/resources/res/lib/jquery-3.4.1.js
create mode 100644 webconsole/src/main/resources/res/lib/jquery-3.5.1.js
delete mode 100755 webconsole/src/main/resources/res/lib/jquery-migrate-3.1.0.js
create mode 100644 webconsole/src/main/resources/res/lib/jquery-migrate-3.3.0.js
[felix-dev] 04/04: Merge branch 'master' into scrR8
Posted by tj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a commit to branch scrR8
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit 2de0937ac71de5595ea39cb6db552bbf27284364
Merge: 5d167e2 72ab8ae
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Tue Jan 12 12:25:11 2021 -0600
Merge branch 'master' into scrR8
configadmin/pom.xml | 2 +-
eventadmin/impl/changelog.txt | 6 +
eventadmin/impl/pom.xml | 4 +-
framework.security/doc/changelog.txt | 6 +
framework.security/pom.xml | 7 +-
.../org/apache/felix/framework/FakeBundle.java | 10 -
.../felix/framework/security/util/Permissions.java | 19 +-
framework/doc/changelog.txt | 13 +
framework/pom.xml | 46 +-
.../org/apache/felix/framework/BundleImpl.java | 44 +-
.../felix/framework/BundleProtectionDomain.java | 13 +-
.../apache/felix/framework/BundleRevisionImpl.java | 40 +
.../apache/felix/framework/BundleWiringImpl.java | 88 +-
.../org/apache/felix/framework/DTOFactory.java | 5 +
.../apache/felix/framework/ExtensionManager.java | 117 +-
.../java/org/apache/felix/framework/Felix.java | 81 +-
.../apache/felix/framework/FrameworkFactory.java | 10 +-
.../felix/framework/FrameworkWiringImpl.java | 3 -
.../felix/framework/ServiceRegistrationImpl.java | 23 +-
.../apache/felix/framework/StatefulResolver.java | 18 +-
.../org/apache/felix/framework/URLHandlers.java | 60 +-
.../framework/URLHandlersBundleURLConnection.java | 14 +-
.../framework/URLHandlersStreamHandlerProxy.java | 3 +-
.../org/apache/felix/framework/WovenClassImpl.java | 54 +-
.../felix/framework/cache/BundleArchive.java | 43 +-
.../apache/felix/framework/cache/BundleCache.java | 30 +-
.../framework/cache/ConnectContentContent.java | 224 +++
...DirectoryRevision.java => ConnectRevision.java} | 63 +-
.../org/apache/felix/framework/cache/Content.java | 14 +
.../framework/cache/ContentDirectoryContent.java | 64 +-
.../felix/framework/cache/DirectoryContent.java | 54 +-
.../felix/framework/cache/DirectoryRevision.java | 2 +-
.../apache/felix/framework/cache/JarContent.java | 31 +-
.../apache/felix/framework/cache/JarRevision.java | 2 +-
.../framework/capabilityset/CapabilitySet.java | 2 +-
.../framework/capabilityset/SimpleFilter.java | 1 -
.../framework/ext/ClassPathExtenderFactory.java | 10 +-
.../felix/framework/util/MultiReleaseContent.java | 49 +-
.../apache/felix/framework/util/SecureAction.java | 234 ++-
.../apache/felix/framework/util/ThreadGate.java | 6 +-
.../java/org/apache/felix/framework/util/Util.java | 148 +-
.../util/manifestparser/ManifestParser.java | 70 +-
.../framework/wiring/BundleCapabilityImpl.java | 75 +-
.../framework/wiring/BundleRequirementImpl.java | 4 +-
framework/src/main/java/org/osgi/dto/DTO.java | 2 +-
.../src/main/java/org/osgi/dto/package-info.java | 2 +-
.../java/org/osgi/framework/BundlePermission.java | 6 +-
.../org/osgi/framework/CapabilityPermission.java | 6 +-
.../main/java/org/osgi/framework/Constants.java | 12 +-
.../main/java/org/osgi/framework/FilterImpl.java | 1385 ++++++++++++++
.../java/org/osgi/framework/FrameworkEvent.java | 13 +-
.../java/org/osgi/framework/FrameworkUtil.java | 2017 +++++---------------
.../java/org/osgi/framework/PackagePermission.java | 6 +-
.../osgi/framework/PrototypeServiceFactory.java | 2 +-
.../java/org/osgi/framework/ServiceObjects.java | 2 +-
.../java/org/osgi/framework/ServicePermission.java | 6 +-
.../java/org/osgi/framework/ServiceReference.java | 59 +-
.../org/osgi/framework/connect/ConnectContent.java | 218 +++
.../framework/connect/ConnectFrameworkFactory.java | 79 +
.../org/osgi/framework/connect/ConnectModule.java | 47 +
.../framework/connect/FrameworkUtilHelper.java | 48 +
.../osgi/framework/connect/ModuleConnector.java | 105 +
.../url => framework/connect}/package-info.java | 13 +-
.../java/org/osgi/framework/dto/BundleDTO.java | 2 +-
.../java/org/osgi/framework/dto/FrameworkDTO.java | 2 +-
.../osgi/framework/dto/ServiceReferenceDTO.java | 9 +-
.../java/org/osgi/framework/dto/package-info.java | 2 +-
.../osgi/framework/hooks/bundle/package-info.java | 2 +-
.../framework/hooks/resolver/package-info.java | 2 +-
.../osgi/framework/hooks/service/package-info.java | 2 +-
.../framework/hooks/weaving/WeavingException.java | 7 +-
.../osgi/framework/hooks/weaving/WeavingHook.java | 21 +-
.../hooks/weaving/WovenClassListener.java | 2 +-
.../osgi/framework/hooks/weaving/package-info.java | 2 +-
.../java/org/osgi/framework/launch/Framework.java | 35 +-
.../osgi/framework/launch/FrameworkFactory.java | 5 +-
.../org/osgi/framework/launch/package-info.java | 4 +-
.../osgi/framework/namespace/HostNamespace.java | 20 +-
.../framework/namespace/IdentityNamespace.java | 14 +-
.../osgi/framework/namespace/NativeNamespace.java | 8 +-
.../org/osgi/framework/namespace/package-info.java | 8 +-
.../main/java/org/osgi/framework/package-info.java | 10 +-
.../startlevel/dto/BundleStartLevelDTO.java | 2 +-
.../startlevel/dto/FrameworkStartLevelDTO.java | 2 +-
.../framework/startlevel/dto/package-info.java | 2 +-
.../osgi/framework/startlevel/package-info.java | 2 +-
.../framework/wiring/dto/BundleRevisionDTO.java | 2 +-
.../osgi/framework/wiring/dto/BundleWireDTO.java | 2 +-
.../osgi/framework/wiring/dto/BundleWiringDTO.java | 2 +-
.../osgi/framework/wiring/dto/package-info.java | 2 +-
.../org/osgi/framework/wiring/package-info.java | 2 +-
.../java/org/osgi/resource/dto/CapabilityDTO.java | 2 +-
.../org/osgi/resource/dto/CapabilityRefDTO.java | 2 +-
.../java/org/osgi/resource/dto/RequirementDTO.java | 2 +-
.../org/osgi/resource/dto/RequirementRefDTO.java | 2 +-
.../java/org/osgi/resource/dto/ResourceDTO.java | 2 +-
.../main/java/org/osgi/resource/dto/WireDTO.java | 2 +-
.../main/java/org/osgi/resource/dto/WiringDTO.java | 2 +-
.../java/org/osgi/resource/dto/package-info.java | 2 +-
.../main/java/org/osgi/resource/package-info.java | 2 +-
.../java/org/osgi/service/condition/Condition.java | 77 +
.../dto => service/condition}/package-info.java | 15 +-
.../osgi/service/packageadmin/package-info.java | 2 +-
.../org/osgi/service/startlevel/package-info.java | 2 +-
.../java/org/osgi/service/url/package-info.java | 2 +-
.../java/org/osgi/util/tracker/ServiceTracker.java | 5 +-
.../java/org/osgi/util/tracker/package-info.java | 2 +-
.../native-image.properties | 5 +
.../org.apache.felix.framework/reflect-config.json | 27 +
.../resource-config.json | 9 +
....osgi.framework.connect.ConnectFrameworkFactory | 1 +
framework/src/main/resources/default.properties | 21 +-
.../org/apache/felix/framework/util/accessor.bytes | Bin 0 -> 816 bytes
.../org/apache/felix/framework/util/accessor.src} | 19 +-
.../apache/felix/framework/CollisionHookTest.java | 4 +-
.../org/apache/felix/framework/ConnectTest.java | 369 ++++
.../org/apache/felix/framework/LaunchTest.java | 156 ++
.../felix/framework/MultiReleaseVersionTest.java | 2 +-
.../felix/framework/ResourceLoadingTest.java | 76 +-
.../felix/framework/cache/BundleCacheTest.java | 10 +-
.../util/manifestparser/ManifestParserTest.java | 30 +-
main.distribution/doc/changelog.txt | 6 +
main.distribution/doc/changelog_framework.txt | 13 +
main.distribution/doc/changelog_main.txt | 6 +
main.distribution/pom.xml | 4 +-
main/doc/changelog.txt | 6 +
main/pom.xml | 4 +-
127 files changed, 4628 insertions(+), 2278 deletions(-)
[felix-dev] 02/04: Force Java 8 compiler
Posted by tj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a commit to branch scrR8
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit c10742419e8b4b71713794aa522bb79aa91f0a13
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Tue Jan 12 12:22:15 2021 -0600
Force Java 8 compiler
---
scr/pom.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/scr/pom.xml b/scr/pom.xml
index 729cd7e..2890720 100644
--- a/scr/pom.xml
+++ b/scr/pom.xml
@@ -78,6 +78,9 @@
${bundle.build.name}/${project.build.finalName}.jar
</bundle.file.name>
<felix.ca.version>1.9.0</felix.ca.version>
+ <felix.java.version>8</felix.java.version>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ <maven.compiler.target>1.8</maven.compiler.target>
</properties>
[felix-dev] 01/04: Merge branch 'master' into scrR8
Posted by tj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a commit to branch scrR8
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit 9ab0150bda3a033d12e14a3bd8778fa5e570edfb
Merge: f343822 31fa52b
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Tue Dec 15 09:38:19 2020 -0600
Merge branch 'master' into scrR8
.gitignore | 1 +
configadmin/changelog.txt | 1 -
.../felix/cm/file/FilePersistenceManager.java | 12 +-
eventadmin/impl/pom.xml | 5 +-
.../apache/felix/eventadmin/impl/Activator.java | 2 +-
.../felix/eventadmin/impl/Configuration.java | 20 +-
.../eventadmin/impl/adapter/AbstractAdapter.java | 2 +-
.../impl/adapter/BundleEventAdapter.java | 6 +-
.../impl/adapter/FrameworkEventAdapter.java | 6 +-
.../eventadmin/impl/adapter/LogEventAdapter.java | 20 +-
.../impl/adapter/ServiceEventAdapter.java | 6 +-
.../eventadmin/impl/handler/EventAdminImpl.java | 27 +-
.../eventadmin/impl/handler/EventHandlerProxy.java | 11 +-
.../impl/handler/EventHandlerTracker.java | 4 +-
.../impl/security/EventAdminSecurityDecorator.java | 20 +-
.../eventadmin/impl/security/PermissionsUtil.java | 8 +-
.../impl/security/SecureEventAdminFactory.java | 22 +-
.../eventadmin/impl/tasks/AsyncDeliverTasks.java | 1 +
.../eventadmin/impl/tasks/DefaultThreadPool.java | 4 +
.../felix/eventadmin/impl/tasks/DenylistLatch.java | 2 +-
.../felix/eventadmin/impl/tasks/HandlerTask.java | 1 +
.../eventadmin/impl/tasks/SyncDeliverTasks.java | 7 +-
.../felix/eventadmin/impl/tasks/SyncThread.java | 1 +
.../felix/eventadmin/impl/util/LogWrapper.java | 18 +-
framework/doc/changelog.txt | 11 +
framework/pom.xml | 1 +
.../src/main/appended-resources/META-INF/NOTICE | 2 +-
.../util/manifestparser/NativeLibraryClause.java | 5 +
framework/src/main/resources/default.properties | 1 +
http/jetty/pom.xml | 4 +-
http/sslfilter/pom.xml | 2 +-
main.distribution/NOTICE | 2 +-
main.distribution/doc/changelog.txt | 10 +
main.distribution/doc/changelog_framework.txt | 11 +
main.distribution/doc/changelog_gogo.command.txt | 46 +-
main.distribution/doc/changelog_gogo.runtime.txt | 89 +-
main.distribution/doc/changelog_main.txt | 10 +
main.distribution/doc/changelog_resolver.txt | 7 +
main.distribution/pom.xml | 15 +-
main/doc/changelog.txt | 10 +
main/pom.xml | 13 +-
main/src/main/appended-resources/META-INF/NOTICE | 2 +-
resolver/doc/changelog.txt | 7 +
resolver/pom.xml | 1 +
.../src/main/appended-resources/META-INF/NOTICE | 2 +-
.../apache/felix/scr/impl/logger/BundleLogger.java | 6 +-
.../felix/scr/impl/logger/ComponentLogger.java | 5 +-
.../felix/scr/impl/logger/ExtLogManager.java | 77 +-
.../felix/scr/impl/logger/InternalLogger.java | 152 +--
.../apache/felix/scr/impl/logger/LogManager.java | 422 ++++---
.../felix/scr/impl/logger/ScrLogManager.java | 570 +++++----
.../apache/felix/scr/impl/logger/ScrLogger.java | 19 +-
utils/pom.xml | 5 +-
.../felix/utils/resource/ResourceBuilder.java | 7 +-
.../felix/utils/resource/ResourceBuilderTest.java | 33 +
webconsole/changelog.txt | 4 +
webconsole/pom.xml | 27 +-
.../res/lib/{jquery-3.4.1.js => jquery-3.5.1.js} | 1238 ++++++++++++--------
...ry-migrate-3.1.0.js => jquery-migrate-3.3.0.js} | 292 +++--
.../java/org/apache/felix/webconsole/User.java | 53 +
.../webconsole/WebConsoleSecurityProvider.java | 2 +-
.../felix/webconsole/bundleinfo/package-info.java | 21 +-
.../apache/felix/webconsole/i18n/package-info.java | 21 +-
.../internal/configuration/ConfigAdminSupport.java | 24 +-
.../internal/configuration/ConfigManager.java | 3 +-
.../webconsole/internal/servlet/OsgiManager.java | 121 +-
.../internal/servlet/OsgiManagerHttpContext.java | 80 +-
.../org/apache/felix/webconsole/package-info.java | 21 +-
.../src/main/resources/res/lib/jquery-3.4.1.js | 2 -
.../src/main/resources/res/lib/jquery-3.5.1.js | 2 +
.../main/resources/res/lib/jquery-migrate-3.1.0.js | 2 -
.../main/resources/res/lib/jquery-migrate-3.3.0.js | 2 +
.../src/main/resources/templates/main_header.html | 4 +-
.../servlet/OsgiManagerHttpContextTest.java | 4 +-
.../internal/servlet/OsgiManagerTest.java | 5 +-
75 files changed, 2268 insertions(+), 1414 deletions(-)
[felix-dev] 03/04: Add support for Optional to be
injected
Posted by tj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tjwatson pushed a commit to branch scrR8
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit 5d167e215e240ae5a779023c0f7e6b24f9c6b425
Author: Thomas Watson <tj...@us.ibm.com>
AuthorDate: Tue Jan 12 12:24:45 2021 -0600
Add support for Optional<ServiceType> to be injected
This is only supported for unary (0..1, 1..1) cardinality injection to
fields and constructor. Method injection is not supported for Optional
type injection.
---
.../apache/felix/scr/impl/inject/ValueUtils.java | 14 +-
.../felix/scr/impl/inject/field/FieldHandler.java | 45 ++++--
.../felix/scr/impl/inject/internal/ClassUtils.java | 3 +
.../inject/internal/ComponentConstructorImpl.java | 10 +-
.../scr/integration/ComponentOptionalTest.java | 170 +++++++++++++++++++++
.../components/ConstructorSingleReference.java | 12 ++
.../components/InjectOptionalComponent.java | 162 ++++++++++++++++++++
.../resources/integration_test_inject_optional.xml | 121 +++++++++++++++
8 files changed, 523 insertions(+), 14 deletions(-)
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java b/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java
index 2e29a3c..4f2af5c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java
@@ -23,6 +23,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Map;
+import java.util.Optional;
import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
import org.apache.felix.scr.impl.inject.internal.Annotations;
@@ -54,7 +55,8 @@ public class ValueUtils {
ref_serviceObjects, // reference (field, constructor, method)
ref_serviceType, // reference (field, constructor, method)
ref_map, // reference (field, constructor, method)
- ref_tuple // reference (field, constructor ??) // TDODO
+ ref_tuple, // reference (field, constructor ??) // TDODO
+ ref_optional // reference (field, constructor, XX)
}
/** Empty array. */
@@ -148,6 +150,14 @@ public class ValueUtils {
{
return ValueType.ref_formatterLogger;
}
+ // 1.5 Optional
+ else if (typeClass == ClassUtils.OPTIONAL_CLASS)
+ {
+ // Note that the first check for "typeClass.isAssignableFrom(referenceType)"
+ // will handle case where they want an actual Optional service type.
+
+ valueType = ValueType.ref_optional;
+ }
else
{
if ( field != null )
@@ -320,6 +330,8 @@ public class ValueUtils {
case ref_logger :
case ref_formatterLogger : value = getLogger(componentType, targetType, componentContext, refPair);
break;
+ case ref_optional : value = Optional.ofNullable(refPair.getServiceObject(componentContext));
+ break;
default: value = null;
}
return value;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java
index ce6f926..a5d25bd 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java
@@ -25,6 +25,7 @@ import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -129,23 +130,32 @@ public class FieldHandler
}
if ( fieldType == ClassUtils.LIST_CLASS )
{
- this.setFieldValue(componentInstance, new CopyOnWriteArrayList<>());
+ this.setFieldValue(componentInstance,
+ new CopyOnWriteArrayList<>());
}
else
{
- this.setFieldValue(componentInstance, new CopyOnWriteArraySet<>());
+ this.setFieldValue(componentInstance,
+ new CopyOnWriteArraySet<>());
}
}
}
}
else
{
- // only optional field need initialization
- if ( metadata.isOptional() )
- {
- // null the field if optional and unary
- this.setFieldValue(componentInstance, null);
- }
+ // only optional field need initialization
+ if (metadata.isOptional())
+ {
+ if (valueType == ValueType.ref_optional)
+ {
+ this.setFieldValue(componentInstance, Optional.empty());
+ }
+ else
+ {
+ // null the field if optional and unary
+ this.setFieldValue(componentInstance, null);
+ }
+ }
}
}
catch ( final InvocationTargetException ite)
@@ -182,7 +192,7 @@ public class FieldHandler
{
// unary references
- // unbind needs only be done, if reference is dynamic and optional
+ // unbind needs only be done, if reference is dynamic and optional
if ( mType == METHOD_TYPE.UNBIND )
{
if ( this.metadata.isOptional() && !this.metadata.isStatic() )
@@ -190,7 +200,15 @@ public class FieldHandler
// we only reset if it was previously set with this value
if ( bp.getComponentContext().getBoundValues(metadata.getName()).size() == 1 )
{
- this.setFieldValue(componentInstance, null);
+ if (valueType == ValueType.ref_optional)
+ {
+ this.setFieldValue(componentInstance, Optional.empty());
+ }
+ else
+ {
+ // null the field if optional and unary
+ this.setFieldValue(componentInstance, null);
+ }
}
}
bp.getComponentContext().getBoundValues(metadata.getName()).remove(refPair);
@@ -518,8 +536,11 @@ public class FieldHandler
//??? this resolves which we need.... better way?
if (rawParameter.getRefPair().getServiceObject(rawParameter.getComponentContext()) == null
&& handler.fieldExists( rawParameter.getComponentContext().getLogger() )
- && (handler.valueType == ValueType.ref_serviceType || handler.valueType == ValueType.ref_tuple
- || handler.valueType == ValueType.ref_logger || handler.valueType == ValueType.ref_formatterLogger) )
+ && (handler.valueType == ValueType.ref_serviceType //
+ || handler.valueType == ValueType.ref_tuple
+ || handler.valueType == ValueType.ref_logger
+ || handler.valueType == ValueType.ref_formatterLogger
+ || handler.valueType == ValueType.ref_optional))
{
return rawParameter.getRefPair().getServiceObject(rawParameter.getComponentContext(), context);
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ClassUtils.java b/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ClassUtils.java
index dcdd6b7..04b7a36 100755
--- a/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ClassUtils.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ClassUtils.java
@@ -21,6 +21,7 @@ package org.apache.felix.scr.impl.inject.internal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.apache.felix.scr.impl.logger.ComponentLogger;
import org.apache.felix.scr.impl.logger.InternalLogger.Level;
@@ -55,6 +56,8 @@ public class ClassUtils
public static final Class<?> COLLECTION_CLASS = Collection.class;
public static final Class<?> LIST_CLASS = List.class;
+ public static final Class<?> OPTIONAL_CLASS = Optional.class;
+
public static final Class<?> COMPONENT_CONTEXT_CLASS = ComponentContext.class;
public static final Class<?> BUNDLE_CONTEXT_CLASS = BundleContext.class;
public static final Class<?> INTEGER_CLASS = Integer.class;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ComponentConstructorImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ComponentConstructorImpl.java
index 0e44eb0..5d9fc5a 100755
--- a/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ComponentConstructorImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/inject/internal/ComponentConstructorImpl.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.felix.scr.impl.inject.ComponentConstructor;
@@ -279,7 +280,8 @@ public class ComponentConstructorImpl<S> implements ComponentConstructor<S>
&& (constructorArgTypes[i] == ValueType.ref_serviceType
|| constructorArgTypes[i] == ValueType.ref_tuple
|| constructorArgTypes[i] == ValueType.ref_logger
- || constructorArgTypes[i] == ValueType.ref_formatterLogger) )
+ || constructorArgTypes[i] == ValueType.ref_formatterLogger
+ || constructorArgTypes[i] == ValueType.ref_optional))
{
refPair.getServiceObject(componentContext, componentContext.getBundleContext());
}
@@ -294,6 +296,12 @@ public class ComponentConstructorImpl<S> implements ComponentConstructor<S>
}
}
}
+ // check for optional ref type; if null then use empty Optional
+ if (ref == null && constructorArgTypes[i] == ValueType.ref_optional)
+ {
+ ref = Optional.empty();
+ }
+
if ( !refMetadata.isMultiple())
{
if (ref == null && !refMetadata.isOptional())
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/ComponentOptionalTest.java b/scr/src/test/java/org/apache/felix/scr/integration/ComponentOptionalTest.java
new file mode 100644
index 0000000..efd13e7
--- /dev/null
+++ b/scr/src/test/java/org/apache/felix/scr/integration/ComponentOptionalTest.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.scr.integration;
+
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.felix.scr.integration.components.ConstructorSingleReference;
+import org.apache.felix.scr.integration.components.InjectOptionalComponent;
+import org.apache.felix.scr.integration.components.InjectOptionalComponent.Mode;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+
+
+@RunWith(PaxExam.class)
+public class ComponentOptionalTest extends ComponentTestBase
+{
+
+ static
+ {
+ // use different components
+ descriptorFile = "/integration_test_inject_optional.xml";
+
+ // uncomment to enable debugging of this test class
+ // paxRunnerVmOption = DEBUG_VM_OPTION;
+ }
+
+ static final String SINGLE_REFERENCE1 = "SingleReference1";
+ static final String SINGLE_REFERENCE2 = "SingleReference2";
+
+ private void doTest(Mode mode) throws Exception
+ {
+ final String componentname = mode.name();
+ ComponentConfigurationDTO cc = getDisabledConfigurationAndEnable(componentname,
+ mode.getInitialState());
+ assertEquals(mode.getInitCount(), cc.description.init);
+
+ InjectOptionalComponent cmp1 = null;
+ if (!mode.isMandatory())
+ {
+ cmp1 = this.getServiceFromConfiguration(cc, InjectOptionalComponent.class);
+ cmp1.checkMode(mode, null);
+ }
+
+ ComponentConfigurationDTO ref1DTO = getDisabledConfigurationAndEnable(
+ SINGLE_REFERENCE1,
+ mode.isDynamic() && !mode.isMandatory()//
+ ? ComponentConfigurationDTO.ACTIVE
+ : ComponentConfigurationDTO.SATISFIED);
+ ConstructorSingleReference ref1Service = getServiceFromConfiguration(ref1DTO,
+ ConstructorSingleReference.class);
+
+ cc = findComponentConfigurationByName(componentname, mode.getSecondState());
+ InjectOptionalComponent cmp2 = this.getServiceFromConfiguration(cc,
+ InjectOptionalComponent.class);
+
+ if (!mode.isMandatory())
+ {
+ assertEquals(cmp1, cmp2);
+ }
+
+ if (mode.isMandatory() || mode.isDynamic())
+ {
+ cmp2.checkMode(mode, ref1Service);
+ }
+ else
+ {
+ cmp2.checkMode(mode, null);
+ }
+
+ ComponentConfigurationDTO ref2DTO = getDisabledConfigurationAndEnable(
+ SINGLE_REFERENCE2, ComponentConfigurationDTO.SATISFIED);
+
+ ConstructorSingleReference ref2Service = getServiceFromConfiguration(ref2DTO,
+ ConstructorSingleReference.class);
+
+ if (mode.isMandatory() || mode.isDynamic())
+ {
+ cmp2.checkMode(mode, ref1Service);
+ }
+ else
+ {
+ cmp2.checkMode(mode, null);
+ }
+
+ disableAndCheck(ref1DTO);
+
+ if (mode.isDynamic())
+ {
+ cmp2.checkMode(mode, ref2Service);
+ }
+ else if (mode.isMandatory())
+ {
+ cc = findComponentConfigurationByName(componentname,
+ ComponentConfigurationDTO.SATISFIED);
+ InjectOptionalComponent cmp3 = this.getServiceFromConfiguration(cc,
+ InjectOptionalComponent.class);
+ cmp3.checkMode(mode, ref2Service);
+ }
+ else // is optional
+ {
+ cmp2.checkMode(mode, null);
+ }
+
+ disableAndCheck(cc);
+
+ cc = getDisabledConfigurationAndEnable(componentname,
+ ComponentConfigurationDTO.SATISFIED);
+ assertEquals(mode.getInitCount(), cc.description.init);
+ cmp1 = this.getServiceFromConfiguration(cc, InjectOptionalComponent.class);
+
+ cmp1.checkMode(mode, ref2Service);
+
+ disableAndCheck(cc);
+ }
+
+ @Test
+ public void test_field_static_optional() throws Exception
+ {
+ doTest(Mode.FIELD_STATIC_OPTIONAL);
+ }
+
+ @Test
+ public void test_field_dynamic_optional() throws Exception
+ {
+ doTest(Mode.FIELD_DYNAMIC_OPTIONAL);
+ }
+
+ @Test
+ public void test_field_static_mandatory() throws Exception
+ {
+ doTest(Mode.FIELD_STATIC_MANDATORY);
+ }
+
+ @Test
+ public void test_field_dynamic_mandatory() throws Exception
+ {
+ doTest(Mode.FIELD_DYNAMIC_MANDATORY);
+ }
+
+ @Test
+ public void test_constructor_mandatory() throws Exception
+ {
+ doTest(Mode.CONSTRUCTOR_MANDATORY);
+ }
+
+ @Test
+ public void test_constructor_optional() throws Exception
+ {
+ doTest(Mode.CONSTRUCTOR_OPTIONAL);
+ }
+}
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/components/ConstructorSingleReference.java b/scr/src/test/java/org/apache/felix/scr/integration/components/ConstructorSingleReference.java
index 0905f8e..96e0e37 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/components/ConstructorSingleReference.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/components/ConstructorSingleReference.java
@@ -18,8 +18,14 @@
*/
package org.apache.felix.scr.integration.components;
+import java.util.concurrent.atomic.AtomicLong;
+
public class ConstructorSingleReference
{
+ private static final AtomicLong instances = new AtomicLong();
+
+ private final long instanceID = instances.incrementAndGet();
+
public @interface Config
{
String name();
@@ -37,4 +43,10 @@ public class ConstructorSingleReference
{
return this.name;
}
+
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + '-' + instanceID;
+ }
}
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/components/InjectOptionalComponent.java b/scr/src/test/java/org/apache/felix/scr/integration/components/InjectOptionalComponent.java
new file mode 100644
index 0000000..90cbd1d
--- /dev/null
+++ b/scr/src/test/java/org/apache/felix/scr/integration/components/InjectOptionalComponent.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.scr.integration.components;
+
+
+import java.util.Map;
+import java.util.Optional;
+
+import org.osgi.service.component.ComponentConstants;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+
+public class InjectOptionalComponent
+{
+ public enum Mode
+ {
+ FIELD_STATIC_MANDATORY(1, false, true), //
+ FIELD_DYNAMIC_MANDATORY(1, true, true), //
+ FIELD_STATIC_OPTIONAL(1, false, false), //
+ FIELD_DYNAMIC_OPTIONAL(1, true, false), //
+ CONSTRUCTOR_MANDATORY(2, false, true), //
+ CONSTRUCTOR_OPTIONAL(2, false, false);
+
+ final int initCount;
+ final int initialState;
+ final int secondState;
+ final boolean isMandatory;
+ final boolean isDynamic;
+
+ Mode(int initCount, boolean isDynamic, boolean isMandatory)
+ {
+ this.initCount = initCount;
+ this.initialState = isMandatory
+ ? ComponentConfigurationDTO.UNSATISFIED_REFERENCE
+ : ComponentConfigurationDTO.SATISFIED;
+ this.secondState = isMandatory ? ComponentConfigurationDTO.SATISFIED
+ : ComponentConfigurationDTO.ACTIVE;
+ this.isMandatory = isMandatory;
+ this.isDynamic = isDynamic;
+ }
+
+ public int getInitCount()
+ {
+ return initCount;
+ }
+
+ public int getInitialState()
+ {
+ return initialState;
+ }
+
+ public int getSecondState()
+ {
+ return secondState;
+ }
+
+ public final boolean isMandatory()
+ {
+ return isMandatory;
+ }
+
+ public final boolean isDynamic()
+ {
+ return isDynamic;
+ }
+
+ }
+
+ private final Mode mode;
+
+ private final Optional<ConstructorSingleReference> refConstructor;
+ private Optional<ConstructorSingleReference> refFieldStatic = null;
+ private volatile Optional<ConstructorSingleReference> refFieldDynamic = null;
+
+ public InjectOptionalComponent(Map<String, Object> props, Optional<ConstructorSingleReference> single)
+ {
+ this.mode = getMode(props);
+ this.refConstructor = single;
+ }
+
+ public InjectOptionalComponent(Map<String, Object> props)
+ {
+ this(props, null);
+ }
+
+ private Mode getMode(Map<String, Object> props)
+ {
+ return Mode.valueOf((String) props.get(ComponentConstants.COMPONENT_NAME));
+ }
+
+ public boolean checkMode(Mode mode, ConstructorSingleReference expected)
+ {
+ if (this.mode != mode)
+ {
+ throw new AssertionError(
+ "Wrong mode, expected \"" + mode + "\" but was\"" + this.mode);
+ }
+ Optional<ConstructorSingleReference> optional = getOptional();
+ if (expected != null)
+ {
+ return optional.map((c) -> checkExpected(expected, c)).orElseGet(
+ () -> throwAssertionError(
+ "FAILED - expected: " + expected + " but got empty optional."));
+ }
+ else
+ {
+ return optional.map(
+ (c) -> throwAssertionError(
+ "FAILED - expected empty optional but got: " + c)).orElse(true);
+ }
+ }
+
+ private boolean throwAssertionError(String message)
+ {
+ throw new AssertionError(message);
+ }
+
+ private boolean checkExpected(ConstructorSingleReference expected,
+ ConstructorSingleReference actual)
+ {
+ if (expected == actual)
+ {
+ return true;
+ }
+ throw new AssertionError(
+ "FAILED - expected: " + expected + " bug got: " + actual);
+ }
+
+ private Optional<ConstructorSingleReference> getOptional()
+ {
+ switch (mode)
+ {
+ case CONSTRUCTOR_MANDATORY:
+ case CONSTRUCTOR_OPTIONAL:
+ return refConstructor;
+ case FIELD_DYNAMIC_MANDATORY:
+ case FIELD_DYNAMIC_OPTIONAL:
+ return refFieldDynamic;
+ case FIELD_STATIC_MANDATORY:
+ case FIELD_STATIC_OPTIONAL:
+ return refFieldStatic;
+ default:
+ throw new UnsupportedOperationException(String.valueOf(mode));
+ }
+ }
+
+}
diff --git a/scr/src/test/resources/integration_test_inject_optional.xml b/scr/src/test/resources/integration_test_inject_optional.xml
new file mode 100644
index 0000000..a40be9d
--- /dev/null
+++ b/scr/src/test/resources/integration_test_inject_optional.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.4.0">
+
+ <!-- Static Field -->
+ <scr:component name="FIELD_STATIC_MANDATORY" enabled="false"
+ init="1">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference
+ name="refFieldStatic"
+ interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ field="refFieldStatic"
+ cardinality="1..1"
+ />
+ </scr:component>
+
+ <scr:component name="FIELD_STATIC_OPTIONAL" enabled="false"
+ init="1">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference
+ name="refFieldStatic"
+ interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ field="refFieldStatic"
+ cardinality="0..1"
+ />
+ </scr:component>
+
+ <!-- Dynamic Field -->
+ <scr:component name="FIELD_DYNAMIC_MANDATORY" enabled="false"
+ init="1">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference
+ name="refFieldDynamic"
+ interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ field="refFieldDynamic"
+ cardinality="1..1"
+ policy="dynamic"
+ />
+ </scr:component>
+
+ <scr:component name="FIELD_DYNAMIC_OPTIONAL" enabled="false"
+ init="1">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference
+ name="refFieldDynamic"
+ interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ field="refFieldDynamic"
+ cardinality="0..1"
+ policy="dynamic"
+ />
+ </scr:component>
+
+ <!-- mandatory constructor -->
+ <scr:component name="CONSTRUCTOR_MANDATORY" enabled="false"
+ init="2">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ cardinality="1..1"
+ parameter="1"/>
+ </scr:component>
+
+ <!-- optional constructor -->
+ <scr:component name="CONSTRUCTOR_OPTIONAL" enabled="false"
+ init="2">
+ <implementation class="org.apache.felix.scr.integration.components.InjectOptionalComponent" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.InjectOptionalComponent"/>
+ </service>
+ <reference interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"
+ cardinality="0..1"
+ parameter="1"/>
+ </scr:component>
+
+ <scr:component name="SingleReference1" enabled="false" activate="activator">
+ <implementation class="org.apache.felix.scr.integration.components.ConstructorSingleReference" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"/>
+ </service>
+ <property name="name" value="single"/>
+ </scr:component>
+
+ <scr:component name="SingleReference2" enabled="false" activate="activator">
+ <implementation class="org.apache.felix.scr.integration.components.ConstructorSingleReference" />
+ <service factory="false">
+ <provide interface="org.apache.felix.scr.integration.components.ConstructorSingleReference"/>
+ </service>
+ <property name="name" value="single"/>
+ </scr:component>
+</components>