You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Guillaume Nodet (JIRA)" <ji...@apache.org> on 2015/07/10 12:01:04 UTC

[jira] [Resolved] (ARIES-1350) Namespace handler can't be found even if it's registered correctly

     [ https://issues.apache.org/jira/browse/ARIES-1350?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Nodet resolved ARIES-1350.
------------------------------------
       Resolution: Fixed
    Fix Version/s: blueprint-core-1.4.4

Committing to https://svn.apache.org/repos/asf/aries/trunk ...
	M	blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
Committed r1690235


> Namespace handler can't be found even if it's registered correctly
> ------------------------------------------------------------------
>
>                 Key: ARIES-1350
>                 URL: https://issues.apache.org/jira/browse/ARIES-1350
>             Project: Aries
>          Issue Type: Bug
>          Components: Blueprint
>            Reporter: Grzegorz Grzybek
>            Assignee: Guillaume Nodet
>            Priority: Critical
>             Fix For: blueprint-core-1.4.4
>
>
> {{org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl.NamespaceHandlerSetImpl}} class deals with namespace handlers for single BP container.
> During creation, it takes all already registered handlers from global NS registry.
> After creation it is added to {{sets}} field in the registry to get notified about newly registered NS handlers.
> But when NS handler is registered between the above two steps, BP stays in GRACE_PERIOD state infinitely, because this "case" in BP container impl:
> {code:java}
> case WaitForNamespaceHandlers:
> {
>     List<String> missing = new ArrayList<String>();
>     List<URI> missingURIs = new ArrayList<URI>();
>     for (URI ns : namespaces) {
>         if (handlerSet.getNamespaceHandler(ns) == null) {
> {code}
> won't ever get namespace handler, because it looks in the handler set obtained when {{NamespaceHandlerRegistryImpl.NamespaceHandlerSetImpl}} was constructed.
> This:
> {noformat}
> 10:51 $ git diff
> diff --git a/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java b/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
> index 7688924..d53ea5c 100644
> --- a/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
> +++ b/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/namespace/NamespaceHandlerRegistryImpl.java
> @@ -535,6 +535,9 @@ public class NamespaceHandlerRegistryImpl implements NamespaceHandlerRegistry, S
>          }
>  
>          public NamespaceHandler getNamespaceHandler(URI namespace) {
> +            if (!handlers.containsKey(namespace)) {
> +                findCompatibleNamespaceHandler(namespace);
> +            }
>              return handlers.get(namespace);
>          }
> {noformat}
> fixes the problem



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)