You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Hugh Rodgers (JIRA)" <ji...@apache.org> on 2012/08/01 20:15:02 UTC

[jira] [Created] (KARAF-1701) Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console

Hugh Rodgers created KARAF-1701:
-----------------------------------

             Summary: Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
                 Key: KARAF-1701
                 URL: https://issues.apache.org/jira/browse/KARAF-1701
             Project: Karaf
          Issue Type: Bug
          Components: karaf-feature
    Affects Versions: 2.2.7
         Environment: Windows 7
            Reporter: Hugh Rodgers


I have a feature where the configuration is embedded in it like follows:


<feature name="custom-mimetype-resolver" version="1.0"
		description=Custom MimeTypes Resolver.">
		<bundle start-level='75'>mvn:ddf.mime/custom-mime-type-resolver/1.0</bundle>
		<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
		    name = NITF Content Resolver
		    priority = 10
		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
		</config>
	</feature>

The bundle in this feature has a metatype XML file describing the Admin Console interface to configure it. This metatype XML includes an attribute with a cardinality="100", hence a text field will be displayed on the console with +/- buttons to add extra text fields for more values up to a max of 100.

<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">

  <OCD description="DDF Custom Mime Types" name="DDF Custom Mime Types"
    id="DDF_Custom_Mime_Type_Resolver">    
     
    <AD name="Resolver Name" id="name" required="false"
      type="String" />
           
    <AD name="Priority" id="priority" required="true"
      type="Integer" />
       
    <AD name="File Extensions to Mime Types" id="customMimeTypes" required="true"
      type="String" cardinality="100"
      description="List of key/value pairs where key is the file extension and value is the mime type, e.g., nitf=image/nitf"/>  

  </OCD>

  <Designate pid="DDF_Custom_Mime_Type_Resolver" factoryPid="DDF_Custom_Mime_Type_Resolver">
    <Object ocdref="DDF_Custom_Mime_Type_Resolver" />
  </Designate>
  
  </metatype:MetaData>

When karaf comes up and instantiates the bundle in this feature and applies the configuration (thus creating an instance of the DDF_Custom_Mime_Type_Resolver managed service factory), the customMimeTypes are displayed in one field as nitf=image/nitf,ntf=image/nitf rather than 2 separate fields with their values delimited by the comma as I had hoped. However, the setCustomMimeTypes(String[] mimeTypes) method in the managed service instance is called with a String[] as expected.

But if I add another mime type mapping via the Admin Console, say xyz=image/xyz, when the setCustomMimeTypes(String[]) method is called it no longer trats the "," as a delimiter for the "nitf=image/nitf,ntf=image/nitf" entry and treats this as a single mime type mapping.

Here is a log trace of what happens:

For:

<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
		    name = NITF Content Resolver
		    priority = 10
		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
</config>

Get:

ENTERING: setCustomMimeTypes
nitf=image/nitf
Creating fileExtensions array for mime type: image/nitf
Adding file extension: nitf for mime type: image/nitf
ntf=image/nitf
Adding file extension: ntf for mime type: image/nitf
customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf}
customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf]}
EXITING: setCustomMimeTypes

Add a new mime type xyz=image/xyz via Admin Console:

ENTERING: setCustomMimeTypes
nitf=image/nitf,ntf=image/nitf
Creating fileExtensions array for mime type: image/nitf,ntf
Adding file extension: nitf for mime type: image/nitf,ntf
xyz=image/xyz
Creating fileExtensions array for mime type: image/xyz
Adding file extension: xyz for mime type: image/xyz
customFileExtensionsToMimeTypesMap = {nitf=image/nitf,ntf, xyz=image/xyz}
customMimeTypesToFileExtensionsMap = {image/xyz=[xyz], image/nitf,ntf=[nitf]}
EXITING: setCustomMimeTypes

If I cut/paste the ntf=image/nitf from the entry with "nitf=image/nitf,ntf=image/nitf" 
into its own text field (by hitting "+" button) I get (which is correct):

ENTERING: setCustomMimeTypes
nitf=image/nitf
Creating fileExtensions array for mime type: image/nitf
Adding file extension: nitf for mime type: image/nitf
xyz=image/xyz
Creating fileExtensions array for mime type: image/xyz
Adding file extension: xyz for mime type: image/xyz
ntf=image/nitf
Adding file extension: ntf for mime type: image/nitf
customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf, xyz=image/xyz}
customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf], image/xyz=[xyz]}
EXITING: setCustomMimeTypes

Tried this variation on the <config> in the feature but it did not work:

<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
		    name = NITF Content Resolver
		    priority = 10
		    customMimeTypes = nitf=image/nitf
			customMimeTypes = ntf=image/nitf
</config>

And only the last customMimeTypes was added (ntf=image/nitf).

Here is the setCustomMimeTypes(String[]) method being called:

    public void setCustomMimeTypes( String[] customMimeTypes )
    {
        logger.info( "ENTERING: setCustomMimeTypes" );
        
        this.customMimeTypes = customMimeTypes;
        this.customFileExtensionsToMimeTypesMap = new HashMap<String, String>();
        this.customMimeTypesToFileExtensionsMap = new HashMap<String, List<String>>();
        
        for ( String mimeTypeMapping : this.customMimeTypes )
        {
            logger.info( mimeTypeMapping );
            
            // mimeTypeMapping is of the form <file extension>=<mime type>
            // Example: nitf=image/nitf
            // where: customParts[0] = file extension
            //        customParts[1] = mime type
            String[] customParts = mimeTypeMapping.split( "=" );
            customFileExtensionsToMimeTypesMap.put( customParts[0], customParts[1] );
            List<String> fileExtensions = (List<String>) customMimeTypesToFileExtensionsMap.get( customParts[1] );
            if ( fileExtensions == null )
            {
                logger.info( "Creating fileExtensions array for mime type: " + customParts[1] );
                fileExtensions = new ArrayList<String>();
            }
            logger.info( "Adding file extension: " + customParts[0] + " for mime type: " + customParts[1] );
            fileExtensions.add( customParts[0] );
            customMimeTypesToFileExtensionsMap.put( customParts[1], fileExtensions );
        }
        logger.info( "customFileExtensionsToMimeTypesMap = " + customFileExtensionsToMimeTypesMap );
        logger.info( "customMimeTypesToFileExtensionsMap = " + customMimeTypesToFileExtensionsMap );
        
        logger.info( "EXITING: setCustomMimeTypes" );
    }


So there seems to be a disconnect between the <config> specification and the Admin Console. I also reproduced the problem using a .cfg file dropped in the karaf /etc directory.

If needed I can attach screen shots of the Admin Console.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (KARAF-1701) Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console

Posted by "Jean-Baptiste Onofré (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/KARAF-1701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré updated KARAF-1701:
----------------------------------------

    Fix Version/s: 3.0.0
                   2.3.0
                   2.2.9
    
> Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: KARAF-1701
>                 URL: https://issues.apache.org/jira/browse/KARAF-1701
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature
>    Affects Versions: 2.2.7
>         Environment: Windows 7
>            Reporter: Hugh Rodgers
>             Fix For: 2.2.9, 2.3.0, 3.0.0
>
>         Attachments: DDF_Custom_Mime_Type_Resolver.png
>
>
> I have a feature where the configuration is embedded in it like follows:
> <feature name="custom-mimetype-resolver" version="1.0"
> 		description=Custom MimeTypes Resolver.">
> 		<bundle start-level='75'>mvn:ddf.mime/custom-mime-type-resolver/1.0</bundle>
> 		<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> 		</config>
> 	</feature>
> The bundle in this feature has a metatype XML file describing the Admin Console interface to configure it. This metatype XML includes an attribute with a cardinality="100", hence a text field will be displayed on the console with +/- buttons to add extra text fields for more values up to a max of 100.
> <metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
>   <OCD description="DDF Custom Mime Types" name="DDF Custom Mime Types"
>     id="DDF_Custom_Mime_Type_Resolver">    
>      
>     <AD name="Resolver Name" id="name" required="false"
>       type="String" />
>            
>     <AD name="Priority" id="priority" required="true"
>       type="Integer" />
>        
>     <AD name="File Extensions to Mime Types" id="customMimeTypes" required="true"
>       type="String" cardinality="100"
>       description="List of key/value pairs where key is the file extension and value is the mime type, e.g., nitf=image/nitf"/>  
>   </OCD>
>   <Designate pid="DDF_Custom_Mime_Type_Resolver" factoryPid="DDF_Custom_Mime_Type_Resolver">
>     <Object ocdref="DDF_Custom_Mime_Type_Resolver" />
>   </Designate>
>   
>   </metatype:MetaData>
> When karaf comes up and instantiates the bundle in this feature and applies the configuration (thus creating an instance of the DDF_Custom_Mime_Type_Resolver managed service factory), the customMimeTypes are displayed in one field as nitf=image/nitf,ntf=image/nitf rather than 2 separate fields with their values delimited by the comma as I had hoped. However, the setCustomMimeTypes(String[] mimeTypes) method in the managed service instance is called with a String[] as expected.
> But if I add another mime type mapping via the Admin Console, say xyz=image/xyz, when the setCustomMimeTypes(String[]) method is called it no longer trats the "," as a delimiter for the "nitf=image/nitf,ntf=image/nitf" entry and treats this as a single mime type mapping.
> Here is a log trace of what happens:
> For:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> </config>
> Get:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf]}
> EXITING: setCustomMimeTypes
> Add a new mime type xyz=image/xyz via Admin Console:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf,ntf=image/nitf
> Creating fileExtensions array for mime type: image/nitf,ntf
> Adding file extension: nitf for mime type: image/nitf,ntf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf,ntf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/xyz=[xyz], image/nitf,ntf=[nitf]}
> EXITING: setCustomMimeTypes
> If I cut/paste the ntf=image/nitf from the entry with "nitf=image/nitf,ntf=image/nitf" 
> into its own text field (by hitting "+" button) I get (which is correct):
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf], image/xyz=[xyz]}
> EXITING: setCustomMimeTypes
> Tried this variation on the <config> in the feature but it did not work:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf
> 			customMimeTypes = ntf=image/nitf
> </config>
> And only the last customMimeTypes was added (ntf=image/nitf).
> Here is the setCustomMimeTypes(String[]) method being called:
>     public void setCustomMimeTypes( String[] customMimeTypes )
>     {
>         logger.info( "ENTERING: setCustomMimeTypes" );
>         
>         this.customMimeTypes = customMimeTypes;
>         this.customFileExtensionsToMimeTypesMap = new HashMap<String, String>();
>         this.customMimeTypesToFileExtensionsMap = new HashMap<String, List<String>>();
>         
>         for ( String mimeTypeMapping : this.customMimeTypes )
>         {
>             logger.info( mimeTypeMapping );
>             
>             // mimeTypeMapping is of the form <file extension>=<mime type>
>             // Example: nitf=image/nitf
>             // where: customParts[0] = file extension
>             //        customParts[1] = mime type
>             String[] customParts = mimeTypeMapping.split( "=" );
>             customFileExtensionsToMimeTypesMap.put( customParts[0], customParts[1] );
>             List<String> fileExtensions = (List<String>) customMimeTypesToFileExtensionsMap.get( customParts[1] );
>             if ( fileExtensions == null )
>             {
>                 logger.info( "Creating fileExtensions array for mime type: " + customParts[1] );
>                 fileExtensions = new ArrayList<String>();
>             }
>             logger.info( "Adding file extension: " + customParts[0] + " for mime type: " + customParts[1] );
>             fileExtensions.add( customParts[0] );
>             customMimeTypesToFileExtensionsMap.put( customParts[1], fileExtensions );
>         }
>         logger.info( "customFileExtensionsToMimeTypesMap = " + customFileExtensionsToMimeTypesMap );
>         logger.info( "customMimeTypesToFileExtensionsMap = " + customMimeTypesToFileExtensionsMap );
>         
>         logger.info( "EXITING: setCustomMimeTypes" );
>     }
> So there seems to be a disconnect between the <config> specification and the Admin Console. I also reproduced the problem using a .cfg file dropped in the karaf /etc directory.
> If needed I can attach screen shots of the Admin Console.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] [Updated] (KARAF-1701) Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console

Posted by "Jean-Baptiste Onofré (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/KARAF-1701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré updated KARAF-1701:
----------------------------------------

    Fix Version/s:     (was: 2.3.0)
                       (was: 3.0.0)
                   3.0.1
                   2.3.1
    
> Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: KARAF-1701
>                 URL: https://issues.apache.org/jira/browse/KARAF-1701
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature
>    Affects Versions: 2.2.7
>         Environment: Windows 7
>            Reporter: Hugh Rodgers
>             Fix For: 2.2.10, 2.3.1, 3.0.1
>
>         Attachments: DDF_Custom_Mime_Type_Resolver.png
>
>
> I have a feature where the configuration is embedded in it like follows:
> <feature name="custom-mimetype-resolver" version="1.0"
> 		description=Custom MimeTypes Resolver.">
> 		<bundle start-level='75'>mvn:ddf.mime/custom-mime-type-resolver/1.0</bundle>
> 		<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> 		</config>
> 	</feature>
> The bundle in this feature has a metatype XML file describing the Admin Console interface to configure it. This metatype XML includes an attribute with a cardinality="100", hence a text field will be displayed on the console with +/- buttons to add extra text fields for more values up to a max of 100.
> <metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
>   <OCD description="DDF Custom Mime Types" name="DDF Custom Mime Types"
>     id="DDF_Custom_Mime_Type_Resolver">    
>      
>     <AD name="Resolver Name" id="name" required="false"
>       type="String" />
>            
>     <AD name="Priority" id="priority" required="true"
>       type="Integer" />
>        
>     <AD name="File Extensions to Mime Types" id="customMimeTypes" required="true"
>       type="String" cardinality="100"
>       description="List of key/value pairs where key is the file extension and value is the mime type, e.g., nitf=image/nitf"/>  
>   </OCD>
>   <Designate pid="DDF_Custom_Mime_Type_Resolver" factoryPid="DDF_Custom_Mime_Type_Resolver">
>     <Object ocdref="DDF_Custom_Mime_Type_Resolver" />
>   </Designate>
>   
>   </metatype:MetaData>
> When karaf comes up and instantiates the bundle in this feature and applies the configuration (thus creating an instance of the DDF_Custom_Mime_Type_Resolver managed service factory), the customMimeTypes are displayed in one field as nitf=image/nitf,ntf=image/nitf rather than 2 separate fields with their values delimited by the comma as I had hoped. However, the setCustomMimeTypes(String[] mimeTypes) method in the managed service instance is called with a String[] as expected.
> But if I add another mime type mapping via the Admin Console, say xyz=image/xyz, when the setCustomMimeTypes(String[]) method is called it no longer trats the "," as a delimiter for the "nitf=image/nitf,ntf=image/nitf" entry and treats this as a single mime type mapping.
> Here is a log trace of what happens:
> For:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> </config>
> Get:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf]}
> EXITING: setCustomMimeTypes
> Add a new mime type xyz=image/xyz via Admin Console:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf,ntf=image/nitf
> Creating fileExtensions array for mime type: image/nitf,ntf
> Adding file extension: nitf for mime type: image/nitf,ntf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf,ntf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/xyz=[xyz], image/nitf,ntf=[nitf]}
> EXITING: setCustomMimeTypes
> If I cut/paste the ntf=image/nitf from the entry with "nitf=image/nitf,ntf=image/nitf" 
> into its own text field (by hitting "+" button) I get (which is correct):
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf], image/xyz=[xyz]}
> EXITING: setCustomMimeTypes
> Tried this variation on the <config> in the feature but it did not work:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf
> 			customMimeTypes = ntf=image/nitf
> </config>
> And only the last customMimeTypes was added (ntf=image/nitf).
> Here is the setCustomMimeTypes(String[]) method being called:
>     public void setCustomMimeTypes( String[] customMimeTypes )
>     {
>         logger.info( "ENTERING: setCustomMimeTypes" );
>         
>         this.customMimeTypes = customMimeTypes;
>         this.customFileExtensionsToMimeTypesMap = new HashMap<String, String>();
>         this.customMimeTypesToFileExtensionsMap = new HashMap<String, List<String>>();
>         
>         for ( String mimeTypeMapping : this.customMimeTypes )
>         {
>             logger.info( mimeTypeMapping );
>             
>             // mimeTypeMapping is of the form <file extension>=<mime type>
>             // Example: nitf=image/nitf
>             // where: customParts[0] = file extension
>             //        customParts[1] = mime type
>             String[] customParts = mimeTypeMapping.split( "=" );
>             customFileExtensionsToMimeTypesMap.put( customParts[0], customParts[1] );
>             List<String> fileExtensions = (List<String>) customMimeTypesToFileExtensionsMap.get( customParts[1] );
>             if ( fileExtensions == null )
>             {
>                 logger.info( "Creating fileExtensions array for mime type: " + customParts[1] );
>                 fileExtensions = new ArrayList<String>();
>             }
>             logger.info( "Adding file extension: " + customParts[0] + " for mime type: " + customParts[1] );
>             fileExtensions.add( customParts[0] );
>             customMimeTypesToFileExtensionsMap.put( customParts[1], fileExtensions );
>         }
>         logger.info( "customFileExtensionsToMimeTypesMap = " + customFileExtensionsToMimeTypesMap );
>         logger.info( "customMimeTypesToFileExtensionsMap = " + customMimeTypesToFileExtensionsMap );
>         
>         logger.info( "EXITING: setCustomMimeTypes" );
>     }
> So there seems to be a disconnect between the <config> specification and the Admin Console. I also reproduced the problem using a .cfg file dropped in the karaf /etc directory.
> If needed I can attach screen shots of the Admin Console.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (KARAF-1701) Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console

Posted by "Jean-Baptiste Onofré (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/KARAF-1701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré updated KARAF-1701:
----------------------------------------

    Fix Version/s:     (was: 2.2.9)
                   2.2.10
    
> Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: KARAF-1701
>                 URL: https://issues.apache.org/jira/browse/KARAF-1701
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature
>    Affects Versions: 2.2.7
>         Environment: Windows 7
>            Reporter: Hugh Rodgers
>             Fix For: 2.2.10, 2.3.0, 3.0.0
>
>         Attachments: DDF_Custom_Mime_Type_Resolver.png
>
>
> I have a feature where the configuration is embedded in it like follows:
> <feature name="custom-mimetype-resolver" version="1.0"
> 		description=Custom MimeTypes Resolver.">
> 		<bundle start-level='75'>mvn:ddf.mime/custom-mime-type-resolver/1.0</bundle>
> 		<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> 		</config>
> 	</feature>
> The bundle in this feature has a metatype XML file describing the Admin Console interface to configure it. This metatype XML includes an attribute with a cardinality="100", hence a text field will be displayed on the console with +/- buttons to add extra text fields for more values up to a max of 100.
> <metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
>   <OCD description="DDF Custom Mime Types" name="DDF Custom Mime Types"
>     id="DDF_Custom_Mime_Type_Resolver">    
>      
>     <AD name="Resolver Name" id="name" required="false"
>       type="String" />
>            
>     <AD name="Priority" id="priority" required="true"
>       type="Integer" />
>        
>     <AD name="File Extensions to Mime Types" id="customMimeTypes" required="true"
>       type="String" cardinality="100"
>       description="List of key/value pairs where key is the file extension and value is the mime type, e.g., nitf=image/nitf"/>  
>   </OCD>
>   <Designate pid="DDF_Custom_Mime_Type_Resolver" factoryPid="DDF_Custom_Mime_Type_Resolver">
>     <Object ocdref="DDF_Custom_Mime_Type_Resolver" />
>   </Designate>
>   
>   </metatype:MetaData>
> When karaf comes up and instantiates the bundle in this feature and applies the configuration (thus creating an instance of the DDF_Custom_Mime_Type_Resolver managed service factory), the customMimeTypes are displayed in one field as nitf=image/nitf,ntf=image/nitf rather than 2 separate fields with their values delimited by the comma as I had hoped. However, the setCustomMimeTypes(String[] mimeTypes) method in the managed service instance is called with a String[] as expected.
> But if I add another mime type mapping via the Admin Console, say xyz=image/xyz, when the setCustomMimeTypes(String[]) method is called it no longer trats the "," as a delimiter for the "nitf=image/nitf,ntf=image/nitf" entry and treats this as a single mime type mapping.
> Here is a log trace of what happens:
> For:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> </config>
> Get:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf]}
> EXITING: setCustomMimeTypes
> Add a new mime type xyz=image/xyz via Admin Console:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf,ntf=image/nitf
> Creating fileExtensions array for mime type: image/nitf,ntf
> Adding file extension: nitf for mime type: image/nitf,ntf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf,ntf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/xyz=[xyz], image/nitf,ntf=[nitf]}
> EXITING: setCustomMimeTypes
> If I cut/paste the ntf=image/nitf from the entry with "nitf=image/nitf,ntf=image/nitf" 
> into its own text field (by hitting "+" button) I get (which is correct):
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf], image/xyz=[xyz]}
> EXITING: setCustomMimeTypes
> Tried this variation on the <config> in the feature but it did not work:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf
> 			customMimeTypes = ntf=image/nitf
> </config>
> And only the last customMimeTypes was added (ntf=image/nitf).
> Here is the setCustomMimeTypes(String[]) method being called:
>     public void setCustomMimeTypes( String[] customMimeTypes )
>     {
>         logger.info( "ENTERING: setCustomMimeTypes" );
>         
>         this.customMimeTypes = customMimeTypes;
>         this.customFileExtensionsToMimeTypesMap = new HashMap<String, String>();
>         this.customMimeTypesToFileExtensionsMap = new HashMap<String, List<String>>();
>         
>         for ( String mimeTypeMapping : this.customMimeTypes )
>         {
>             logger.info( mimeTypeMapping );
>             
>             // mimeTypeMapping is of the form <file extension>=<mime type>
>             // Example: nitf=image/nitf
>             // where: customParts[0] = file extension
>             //        customParts[1] = mime type
>             String[] customParts = mimeTypeMapping.split( "=" );
>             customFileExtensionsToMimeTypesMap.put( customParts[0], customParts[1] );
>             List<String> fileExtensions = (List<String>) customMimeTypesToFileExtensionsMap.get( customParts[1] );
>             if ( fileExtensions == null )
>             {
>                 logger.info( "Creating fileExtensions array for mime type: " + customParts[1] );
>                 fileExtensions = new ArrayList<String>();
>             }
>             logger.info( "Adding file extension: " + customParts[0] + " for mime type: " + customParts[1] );
>             fileExtensions.add( customParts[0] );
>             customMimeTypesToFileExtensionsMap.put( customParts[1], fileExtensions );
>         }
>         logger.info( "customFileExtensionsToMimeTypesMap = " + customFileExtensionsToMimeTypesMap );
>         logger.info( "customMimeTypesToFileExtensionsMap = " + customMimeTypesToFileExtensionsMap );
>         
>         logger.info( "EXITING: setCustomMimeTypes" );
>     }
> So there seems to be a disconnect between the <config> specification and the Admin Console. I also reproduced the problem using a .cfg file dropped in the karaf /etc directory.
> If needed I can attach screen shots of the Admin Console.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] [Updated] (KARAF-1701) Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console

Posted by "Hugh Rodgers (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/KARAF-1701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hugh Rodgers updated KARAF-1701:
--------------------------------

    Attachment: DDF_Custom_Mime_Type_Resolver.png

Admin Console after feature's <config> loaded.
                
> Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: KARAF-1701
>                 URL: https://issues.apache.org/jira/browse/KARAF-1701
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature
>    Affects Versions: 2.2.7
>         Environment: Windows 7
>            Reporter: Hugh Rodgers
>             Fix For: 2.2.9, 2.3.0, 3.0.0
>
>         Attachments: DDF_Custom_Mime_Type_Resolver.png
>
>
> I have a feature where the configuration is embedded in it like follows:
> <feature name="custom-mimetype-resolver" version="1.0"
> 		description=Custom MimeTypes Resolver.">
> 		<bundle start-level='75'>mvn:ddf.mime/custom-mime-type-resolver/1.0</bundle>
> 		<config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> 		</config>
> 	</feature>
> The bundle in this feature has a metatype XML file describing the Admin Console interface to configure it. This metatype XML includes an attribute with a cardinality="100", hence a text field will be displayed on the console with +/- buttons to add extra text fields for more values up to a max of 100.
> <metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
>   <OCD description="DDF Custom Mime Types" name="DDF Custom Mime Types"
>     id="DDF_Custom_Mime_Type_Resolver">    
>      
>     <AD name="Resolver Name" id="name" required="false"
>       type="String" />
>            
>     <AD name="Priority" id="priority" required="true"
>       type="Integer" />
>        
>     <AD name="File Extensions to Mime Types" id="customMimeTypes" required="true"
>       type="String" cardinality="100"
>       description="List of key/value pairs where key is the file extension and value is the mime type, e.g., nitf=image/nitf"/>  
>   </OCD>
>   <Designate pid="DDF_Custom_Mime_Type_Resolver" factoryPid="DDF_Custom_Mime_Type_Resolver">
>     <Object ocdref="DDF_Custom_Mime_Type_Resolver" />
>   </Designate>
>   
>   </metatype:MetaData>
> When karaf comes up and instantiates the bundle in this feature and applies the configuration (thus creating an instance of the DDF_Custom_Mime_Type_Resolver managed service factory), the customMimeTypes are displayed in one field as nitf=image/nitf,ntf=image/nitf rather than 2 separate fields with their values delimited by the comma as I had hoped. However, the setCustomMimeTypes(String[] mimeTypes) method in the managed service instance is called with a String[] as expected.
> But if I add another mime type mapping via the Admin Console, say xyz=image/xyz, when the setCustomMimeTypes(String[]) method is called it no longer trats the "," as a delimiter for the "nitf=image/nitf,ntf=image/nitf" entry and treats this as a single mime type mapping.
> Here is a log trace of what happens:
> For:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf,ntf=image/nitf
> </config>
> Get:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf]}
> EXITING: setCustomMimeTypes
> Add a new mime type xyz=image/xyz via Admin Console:
> ENTERING: setCustomMimeTypes
> nitf=image/nitf,ntf=image/nitf
> Creating fileExtensions array for mime type: image/nitf,ntf
> Adding file extension: nitf for mime type: image/nitf,ntf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf,ntf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/xyz=[xyz], image/nitf,ntf=[nitf]}
> EXITING: setCustomMimeTypes
> If I cut/paste the ntf=image/nitf from the entry with "nitf=image/nitf,ntf=image/nitf" 
> into its own text field (by hitting "+" button) I get (which is correct):
> ENTERING: setCustomMimeTypes
> nitf=image/nitf
> Creating fileExtensions array for mime type: image/nitf
> Adding file extension: nitf for mime type: image/nitf
> xyz=image/xyz
> Creating fileExtensions array for mime type: image/xyz
> Adding file extension: xyz for mime type: image/xyz
> ntf=image/nitf
> Adding file extension: ntf for mime type: image/nitf
> customFileExtensionsToMimeTypesMap = {nitf=image/nitf, ntf=image/nitf, xyz=image/xyz}
> customMimeTypesToFileExtensionsMap = {image/nitf=[nitf, ntf], image/xyz=[xyz]}
> EXITING: setCustomMimeTypes
> Tried this variation on the <config> in the feature but it did not work:
> <config name="DDF_Custom_Mime_Type_Resolver-DDFCustomMimeTypes">
> 		    name = NITF Content Resolver
> 		    priority = 10
> 		    customMimeTypes = nitf=image/nitf
> 			customMimeTypes = ntf=image/nitf
> </config>
> And only the last customMimeTypes was added (ntf=image/nitf).
> Here is the setCustomMimeTypes(String[]) method being called:
>     public void setCustomMimeTypes( String[] customMimeTypes )
>     {
>         logger.info( "ENTERING: setCustomMimeTypes" );
>         
>         this.customMimeTypes = customMimeTypes;
>         this.customFileExtensionsToMimeTypesMap = new HashMap<String, String>();
>         this.customMimeTypesToFileExtensionsMap = new HashMap<String, List<String>>();
>         
>         for ( String mimeTypeMapping : this.customMimeTypes )
>         {
>             logger.info( mimeTypeMapping );
>             
>             // mimeTypeMapping is of the form <file extension>=<mime type>
>             // Example: nitf=image/nitf
>             // where: customParts[0] = file extension
>             //        customParts[1] = mime type
>             String[] customParts = mimeTypeMapping.split( "=" );
>             customFileExtensionsToMimeTypesMap.put( customParts[0], customParts[1] );
>             List<String> fileExtensions = (List<String>) customMimeTypesToFileExtensionsMap.get( customParts[1] );
>             if ( fileExtensions == null )
>             {
>                 logger.info( "Creating fileExtensions array for mime type: " + customParts[1] );
>                 fileExtensions = new ArrayList<String>();
>             }
>             logger.info( "Adding file extension: " + customParts[0] + " for mime type: " + customParts[1] );
>             fileExtensions.add( customParts[0] );
>             customMimeTypesToFileExtensionsMap.put( customParts[1], fileExtensions );
>         }
>         logger.info( "customFileExtensionsToMimeTypesMap = " + customFileExtensionsToMimeTypesMap );
>         logger.info( "customMimeTypesToFileExtensionsMap = " + customMimeTypesToFileExtensionsMap );
>         
>         logger.info( "EXITING: setCustomMimeTypes" );
>     }
> So there seems to be a disconnect between the <config> specification and the Admin Console. I also reproduced the problem using a .cfg file dropped in the karaf /etc directory.
> If needed I can attach screen shots of the Admin Console.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira