in jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java [1137:1214]
private OSGi<?> waitForExtensionDependencies(
CachingServiceReference<?> reference,
CxfJaxrsServiceRegistrator cxfJaxrsServiceRegistrator,
Consumer<CachingServiceReference<?>> onAddingDependent,
Consumer<CachingServiceReference<?>> onRemovingDependent) {
Map<String, ?> applicationRegistratorProperties =
cxfJaxrsServiceRegistrator.getProperties();
String[] extensionDependencies = canonicalize(
reference.getProperty(JAX_RS_EXTENSION_SELECT));
OSGi<CachingServiceReference<?>> program = just(reference);
if (extensionDependencies.length == 0) {
return program;
}
for (String extensionDependency : extensionDependencies) {
if (_log.isDebugEnabled()) {
_log.debug(
"Extension {} has a dependency on {}",
reference, extensionDependency);
}
try {
String finalExtensionDependency = extensionDependency.replace(
"(objectClass=", "(original.objectClass=");
Filter extensionFilter = _bundleContext.createFilter(
finalExtensionDependency);
if (extensionFilter.match(_runtimeReference) ||
extensionFilter.matches(
applicationRegistratorProperties))
{
continue;
}
program =
once(
cxfJaxrsServiceRegistrator.waitForExtension(
extensionDependency).
effects(
__ -> {},
__ -> onAddingDependent.accept(reference)
)
).effects(
ifDebugEnabled(
_log,
() -> "Extension " + reference +
" dependency " + extensionDependency +
" has been fullfiled"),
ifDebugEnabled(
_log,
() -> "Extension " + reference +
" dependency " + extensionDependency +
" has gone")
).
then(program);
}
catch (InvalidSyntaxException e) {
}
}
program = effects(
() -> onAddingDependent.accept(reference),
() -> onRemovingDependent.accept(reference)).
then(program);
program = program.effects(
__ -> onRemovingDependent.accept(reference),
__ -> {}
);
return program;
}