You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by am...@apache.org on 2026/05/01 07:19:39 UTC
(aries-rsa) 03/07: ARIES-2204 Fix EventAdmin event properties not spec-compliant
This is an automated email from the ASF dual-hosted git repository.
amichair pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit e5bd3cc85414591dff2c38304697d20d0e42e00d
Author: Amichai Rothman <am...@apache.org>
AuthorDate: Thu Apr 30 01:41:12 2026 +0300
ARIES-2204 Fix EventAdmin event properties not spec-compliant
---
.../aries/rsa/core/event/EventAdminSender.java | 64 ++++++++++++++++------
1 file changed, 48 insertions(+), 16 deletions(-)
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventAdminSender.java b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventAdminSender.java
index 724362e1..9c8ce797 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventAdminSender.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventAdminSender.java
@@ -20,15 +20,19 @@ package org.apache.aries.rsa.core.event;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.security.cert.X509Certificate;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.ExportReference;
import org.osgi.service.remoteserviceadmin.ImportReference;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent;
@@ -73,32 +77,60 @@ public class EventAdminSender {
notifyEventAdmins(event);
}
- private Map<String, Object> createProps(RemoteServiceAdminEvent rsaEvent) {
+ private static <K, V> void putIfNotNull(Map<K, V> map, K key, V val) {
+ if (val != null) {
+ map.put(key, val);
+ }
+ }
+
+ private Map<String, Object> createProps(RemoteServiceAdminEvent rsae) {
Map<String, Object> props = new HashMap<>();
- Bundle bundle = rsaEvent.getSource();
+ // bundle properties
+ Bundle bundle = rsae.getSource();
props.put("bundle", bundle);
props.put("bundle.id", bundle.getBundleId());
props.put("bundle.symbolicname", bundle.getSymbolicName());
- props.put("bundle.version", bundle.getVersion());
- props.put("bundle.signer", ""); // TODO What to put here
- Throwable exception = rsaEvent.getException();
+
+ String version = bundle.getHeaders().get("Bundle-Version");
+ Version v = version != null ? new Version(version) : Version.emptyVersion;
+ putIfNotNull(props, "bundle.version", v);
+
+ Map<X509Certificate, List<X509Certificate>> signers = bundle.getSignerCertificates(Bundle.SIGNERS_ALL);
+ if (signers != null) {
+ String[] names = signers.keySet().stream()
+ .map(cert -> cert.getSubjectX500Principal().getName())
+ .filter(s -> s != null && !s.isEmpty())
+ .toArray(String[]::new);
+ if (names.length > 0) {
+ props.put("bundle.signer", names);
+ }
+ }
+
+ // exception properties
+ Throwable exception = rsae.getException();
if (exception != null) {
props.put("exception", exception);
props.put("exception.class", exception.getClass().getName());
- props.put("exception.message", exception.getMessage());
- }
- if (rsaEvent.getExportReference() != null) {
- EndpointDescription endpoint = rsaEvent.getExportReference().getExportedEndpoint();
- props.put("endpoint.framework.uuid", endpoint.getFrameworkUUID());
- props.put("endpoint.id", endpoint.getId());
- props.put("objectClass", endpoint.getInterfaces());
+ putIfNotNull(props, "exception.message", exception.getMessage());
}
- ImportReference importReference = rsaEvent.getImportReference();
- if (importReference != null && importReference.getImportedEndpoint() != null) {
- props.put("service.imported.configs", importReference.getImportedEndpoint().getConfigurationTypes());
+
+ // endpoint properties
+ ImportReference importReference = rsae.getImportReference();
+ ExportReference exportReference = rsae.getExportReference();
+ EndpointDescription endpoint = importReference == null ? null : importReference.getImportedEndpoint();
+ endpoint = endpoint == null && exportReference != null ? exportReference.getExportedEndpoint() : endpoint;
+ if (endpoint != null) {
+ putIfNotNull(props, "endpoint.service.id", endpoint.getServiceId());
+ putIfNotNull(props, "endpoint.framework.uuid", endpoint.getFrameworkUUID());
+ putIfNotNull(props, "endpoint.id", endpoint.getId());
+ props.put("objectClass", endpoint.getInterfaces().toArray(new String[0]));
+ putIfNotNull(props, "service.imported.configs", endpoint.getConfigurationTypes());
}
+
+ // general properties
props.put("timestamp", System.currentTimeMillis());
- props.put("event", rsaEvent);
+ props.put("event", rsae);
+
return props;
}
}