You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Alexander Berger (JIRA)" <ji...@apache.org> on 2009/05/07 07:58:30 UTC
[jira] Created: (FELIX-1130) Bundle.getHeaders() returns a
Dictionary
Bundle.getHeaders() returns a Dictionary<java.util.jar.Attribute.Name,String>
-----------------------------------------------------------------------------
Key: FELIX-1130
URL: https://issues.apache.org/jira/browse/FELIX-1130
Project: Felix
Issue Type: Bug
Components: Framework
Affects Versions: felix-1.6.1
Environment: IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460-20090215_29883 (JIT enabled, AOT enabled)
Reporter: Alexander Berger
Bundle.getHeaders() returns a Dictionary whose key type is java.util.jar.Attribute.Name but the key type should be
java.lang.String. For some unknown reasons (I guess different implementations of equals() and hashCode()) this
causes no problems with SUN's JRE but a lot of trouble with IBM's JRE. Especially bundles that rely on bundle
headers (like for example Felix SCR) do not work on IBM's JRE due to this bug.
The suspicious code is in the getManifestHeader() member of org.apache.felix.framework.cache.JarRevision and DirectoryRevision:
Manifest mf = jarFile.getManifest();
// Create a case insensitive map of manifest attributes.
return new StringMap(mf.getMainAttributes(), false);
So either org.apache.felix.framework.cache.JarRevision and DirectoryRevision should be changed in order for
their getManifestHeader() member to return a Dictionary<String,String>
Manifest mf = jarFile.getManifest();
// Create a case insensitive map of manifest attributes.
final Attributes attributes = mf.getMainAttributes();
final StringMap m = new StringMap(false);
for ( final Object name : attributes.keySet() ) {
final String text = name.toString();
m.put(text, attributes.getValue(text));
}
return m;
or as Richard suggested the org.apache.felix.framework.util.StringMap
class should override putAll(Map) and ensure that all keys are of type String (like StringMap.put(...)) does.
Corresponding mailing list entries:
http://www.mail-archive.com/users@felix.apache.org/msg04248.html
http://www.mail-archive.com/users@felix.apache.org/msg04249.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Resolved: (FELIX-1130) Bundle.getHeaders() returns a
Dictionary
Posted by "Richard S. Hall (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/FELIX-1130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard S. Hall resolved FELIX-1130.
------------------------------------
Resolution: Fixed
Fix Version/s: felix-2.0.0
I committed a patch that overrides putAll() and calls put() on each entry, where put() overrides the super class to do a toString() on each key. Please close this issue if you are satisfied. Thanks for the feedback.
> Bundle.getHeaders() returns a Dictionary<java.util.jar.Attribute.Name,String>
> -----------------------------------------------------------------------------
>
> Key: FELIX-1130
> URL: https://issues.apache.org/jira/browse/FELIX-1130
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: felix-1.6.1
> Environment: IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460-20090215_29883 (JIT enabled, AOT enabled)
> Reporter: Alexander Berger
> Assignee: Richard S. Hall
> Fix For: felix-2.0.0
>
>
> Bundle.getHeaders() returns a Dictionary whose key type is java.util.jar.Attribute.Name but the key type should be
> java.lang.String. For some unknown reasons (I guess different implementations of equals() and hashCode()) this
> causes no problems with SUN's JRE but a lot of trouble with IBM's JRE. Especially bundles that rely on bundle
> headers (like for example Felix SCR) do not work on IBM's JRE due to this bug.
> The suspicious code is in the getManifestHeader() member of org.apache.felix.framework.cache.JarRevision and DirectoryRevision:
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> return new StringMap(mf.getMainAttributes(), false);
> So either org.apache.felix.framework.cache.JarRevision and DirectoryRevision should be changed in order for
> their getManifestHeader() member to return a Dictionary<String,String>
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> final Attributes attributes = mf.getMainAttributes();
> final StringMap m = new StringMap(false);
> for ( final Object name : attributes.keySet() ) {
> final String text = name.toString();
> m.put(text, attributes.getValue(text));
> }
> return m;
> or as Richard suggested the org.apache.felix.framework.util.StringMap
> class should override putAll(Map) and ensure that all keys are of type String (like StringMap.put(...)) does.
> Corresponding mailing list entries:
> http://www.mail-archive.com/users@felix.apache.org/msg04248.html
> http://www.mail-archive.com/users@felix.apache.org/msg04249.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (FELIX-1130) Bundle.getHeaders() returns a
Dictionary
Posted by "Alexander Berger (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/FELIX-1130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alexander Berger closed FELIX-1130.
-----------------------------------
Thanks Richard.
As the patch is very simple and is identically with the one I use for Felix 1.6.1 I close this issue as it works.
> Bundle.getHeaders() returns a Dictionary<java.util.jar.Attribute.Name,String>
> -----------------------------------------------------------------------------
>
> Key: FELIX-1130
> URL: https://issues.apache.org/jira/browse/FELIX-1130
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: felix-1.6.1
> Environment: IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460-20090215_29883 (JIT enabled, AOT enabled)
> Reporter: Alexander Berger
> Assignee: Richard S. Hall
> Fix For: felix-2.0.0
>
>
> Bundle.getHeaders() returns a Dictionary whose key type is java.util.jar.Attribute.Name but the key type should be
> java.lang.String. For some unknown reasons (I guess different implementations of equals() and hashCode()) this
> causes no problems with SUN's JRE but a lot of trouble with IBM's JRE. Especially bundles that rely on bundle
> headers (like for example Felix SCR) do not work on IBM's JRE due to this bug.
> The suspicious code is in the getManifestHeader() member of org.apache.felix.framework.cache.JarRevision and DirectoryRevision:
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> return new StringMap(mf.getMainAttributes(), false);
> So either org.apache.felix.framework.cache.JarRevision and DirectoryRevision should be changed in order for
> their getManifestHeader() member to return a Dictionary<String,String>
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> final Attributes attributes = mf.getMainAttributes();
> final StringMap m = new StringMap(false);
> for ( final Object name : attributes.keySet() ) {
> final String text = name.toString();
> m.put(text, attributes.getValue(text));
> }
> return m;
> or as Richard suggested the org.apache.felix.framework.util.StringMap
> class should override putAll(Map) and ensure that all keys are of type String (like StringMap.put(...)) does.
> Corresponding mailing list entries:
> http://www.mail-archive.com/users@felix.apache.org/msg04248.html
> http://www.mail-archive.com/users@felix.apache.org/msg04249.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Assigned: (FELIX-1130) Bundle.getHeaders() returns a
Dictionary
Posted by "Richard S. Hall (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/FELIX-1130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard S. Hall reassigned FELIX-1130:
--------------------------------------
Assignee: Richard S. Hall
> Bundle.getHeaders() returns a Dictionary<java.util.jar.Attribute.Name,String>
> -----------------------------------------------------------------------------
>
> Key: FELIX-1130
> URL: https://issues.apache.org/jira/browse/FELIX-1130
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: felix-1.6.1
> Environment: IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460-20090215_29883 (JIT enabled, AOT enabled)
> Reporter: Alexander Berger
> Assignee: Richard S. Hall
>
> Bundle.getHeaders() returns a Dictionary whose key type is java.util.jar.Attribute.Name but the key type should be
> java.lang.String. For some unknown reasons (I guess different implementations of equals() and hashCode()) this
> causes no problems with SUN's JRE but a lot of trouble with IBM's JRE. Especially bundles that rely on bundle
> headers (like for example Felix SCR) do not work on IBM's JRE due to this bug.
> The suspicious code is in the getManifestHeader() member of org.apache.felix.framework.cache.JarRevision and DirectoryRevision:
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> return new StringMap(mf.getMainAttributes(), false);
> So either org.apache.felix.framework.cache.JarRevision and DirectoryRevision should be changed in order for
> their getManifestHeader() member to return a Dictionary<String,String>
> Manifest mf = jarFile.getManifest();
> // Create a case insensitive map of manifest attributes.
> final Attributes attributes = mf.getMainAttributes();
> final StringMap m = new StringMap(false);
> for ( final Object name : attributes.keySet() ) {
> final String text = name.toString();
> m.put(text, attributes.getValue(text));
> }
> return m;
> or as Richard suggested the org.apache.felix.framework.util.StringMap
> class should override putAll(Map) and ensure that all keys are of type String (like StringMap.put(...)) does.
> Corresponding mailing list entries:
> http://www.mail-archive.com/users@felix.apache.org/msg04248.html
> http://www.mail-archive.com/users@felix.apache.org/msg04249.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.