[ https://issues.apache.org/jira/browse/FELIX-5912?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Karl Pauls closed FELIX-5912. ----------------------------- > Handle empty package definitions in system package definitions more gracefully > ------------------------------------------------------------------------------ > > Key: FELIX-5912 > URL: https://issues.apache.org/jira/browse/FELIX-5912 > Project: Felix > Issue Type: Improvement > Components: Framework > Affects Versions: framework-6.0.1 > Reporter: Tom Rutchik > Assignee: Karl Pauls > Priority: Minor > Fix For: framework-6.0.2 > > Original Estimate: 0.5h > Remaining Estimate: 0.5h > > A felix initiation error can occur if one adds extra > "org.osgi.framework.system.package.extras". > The error produced is caused by a empty package name. > The problem occurs in the class ExtensionManager in the update(Map configMap) > method. > It contains the following line: > syspkgs = ((pkgextra == {color:#000080}null{color}) || > (pkgextra.trim().length() == {color:#0000ff}0{color})) > ? syspkgs : syspkgs + (pkgextra.trim().startsWith({color:#008000}","{color}) > ? pkgextra : {color:#008000}"," {color}+ pkgextra); > When syspkgs has the value "" (the empty string) the result is ",pkgextra". > Syspkgs then gets stored in m_headerMap. When that header gets parsed later > that comma at the beginning of the string gets interpreted as a blank package > name and the class ManifestParser method normalizeExportClauses Method throws > an exception: > {color:#000080}else if {color}(pkgName.length() == {color:#0000ff}0{color}) > { > {color:#000080}throw new {color}BundleException( > {color:#008000}"Exported package names cannot be zero length."{color}); > } > The result is that the remaining extra packages are not exported. Other > bundles that need these extra packages of course will not be resolved as a > result of this exception, and its easy to miss the fact that the exception > was thrown during initialization . > There are two easy solutions to the problem: > 1.) in the ExtensionManager update manager make the following change (add one > line of code): > syspkgs = ((pkgextra == {color:#000080}null{color}) || > (pkgextra.trim().length() == {color:#0000ff}0{color})) > ? syspkgs : syspkgs + (pkgextra.trim().startsWith({color:#008000}","{color}) > ? pkgextra : {color:#008000}"," {color}+ pkgextra); > {color:#000080}if {color}(syspkgs.startsWith({color:#008000}","{color})) > syspkgs = syspkgs.substring({color:#0000ff}1{color}); > 2.) log an error instead of throwing an exception in the ManifestParser > {color:#333333}normalizeExportClauses {color}method and just ignore the blank > package name, since it doesn't really cause a problem. > I've test solution 1 and it solves the problem, but solution 2 is probably a > more robust and forgiving solution. > Note: this problem doesn't occur if syspkgs is not the empty string. So the > problem only occurs under certain configurations. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)