Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-12291

Blueprint error: "name is already instanciated as null and cannot be removed"

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.19.4, 2.20.2
    • 2.19.5, 2.20.3, 2.21.0
    • camel-blueprint
    • None
    • Mac OSX, Karaf 4.2.5

    Description

      The error "name is already instanciated (sic) as null and cannot be removed" is thrown when configuring a component in Blueprint using property placeholders.

      I noticed when trying to migrate my project to Camel 2.20.2 (from 2.17.4) 
      Example:

      <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:camel="http://camel.apache.org/schema/blueprint"
      xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
      xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
      xsi:schemaLocation="
                    http://www.osgi.org/xmlns/blueprint/v1.0.0 
           https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd”>
       
      <cm:property-placeholder 
         persistent-id="audit.log"
         update-strategy="reload” 
         placeholder-prefix="#{" placeholder-suffix="}">
      
         <cm:default-properties>
            <cm:property name="audit-log.reaper.cron" value="0 0/30 * * * ?" />
            <cm:property name="startDelaySeconds" value="600" />
         </cm:default-properties>
      </cm:property-placeholder>
      
       <bean id="audit-log-reaper-quartz" 
             class="org.apache.camel.component.quartz2.QuartzComponent">
      
          <property name="startDelayedSeconds" value="#{startDelaySeconds}" />
      </bean>

       
      The bean is referenced in a Camel route:

      <route id="reaper-scheduler">
           <from uri="[audit-log-reaper-quartz://reaper?cron=\{{cron}}]" />
      

      Throws exception:

      org.osgi.service.blueprint.container.ComponentDefinitionException: Name audit-log-reaper-quartz is already instanciated as null and cannot be removed.
      at org.apache.aries.blueprint.container.BlueprintRepository.removeRecipe(BlueprintRepository.java:131) [38:org.apache.aries.blueprint.core:1.8.3]
      at org.apache.aries.blueprint.container.BlueprintContainerImpl.updateUninstantiatedRecipes(BlueprintContainerImpl.java:572) [38:org.apache.aries.blueprint.core:1.8.3]
      at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:559) [38:org.apache.aries.blueprint.core:1.8.3]
      at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:394) [38:org.apache.aries.blueprint.core:1.8.3]
      at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:275) [38:org.apache.aries.blueprint.core:1.8.3]

       
       
      Removing the property placeholder fixes the issue:
       

      <bean id="audit-log-reaper-quartz" 
            class="org.apache.camel.component.quartz2.QuartzComponent">
        
            <property name="startDelayedSeconds" value="600" />
      </bean>
      

       
      According to Guillaume Nodet, this seems to have been introduced by this pull request:

      https://github.com/apache/camel/commit/a4e94f036d02943814c84195d73837cf607c8c20

      Solution proposed by Guillaume Nodet is to change line 1056 of /camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java

      to

       if (camelContext.getComponent(component, false) == null) {
      

      I tested this change locally and it seems to work, however I don't know if this can cause other problems.

      Attachments

        Issue Links

          Activity

            People

              davsclaus Claus Ibsen
              alex.soto Alex Soto
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: