diff options
author | cbateman | 2008-04-23 21:57:03 +0000 |
---|---|---|
committer | cbateman | 2008-04-23 21:57:03 +0000 |
commit | 76f4149a89abc7ca527a65ace346056728eee7da (patch) | |
tree | c4e2428a3c2d8156c6578bc84132a4ed49626ba5 | |
parent | 0237eab065093a59f2bce4677c42a2732e0c5160 (diff) | |
download | webtools.jsf-76f4149a89abc7ca527a65ace346056728eee7da.tar.gz webtools.jsf-76f4149a89abc7ca527a65ace346056728eee7da.tar.xz webtools.jsf-76f4149a89abc7ca527a65ace346056728eee7da.zip |
Fix NPE in meta-data loading when an invalid source file is specified.
4 files changed, 45 insertions, 17 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java index f40660540..eef593724 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java +++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; +import org.osgi.framework.Bundle; /** * Default implementation of StandardMetaDataSourceFileLocator that will locate standard metadata files @@ -47,11 +48,17 @@ public class PluginRelativeStandardMetaDataSourceFileLocator extends StandardMet throw new FileNotFoundException("Metadata file not found: "+ fileName); } - /** - * @return URL to metadata source. Must not be null. + /* (non-Javadoc) + * @see org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataSourceFileLocator#getURL() */ public URL getURL() { - return FileLocator.find(Platform.getBundle(fileInfo.getBundleId()), Path.fromOSString(fileInfo.getLocation()), null); + final Bundle bundle = Platform.getBundle(fileInfo.getBundleId()); + if (bundle == null) + { + return null; + } + final IPath fromOSString = Path.fromOSString(fileInfo.getLocation()); + return FileLocator.find(bundle, fromOSString, null); } diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileInfo.java index 5dfb331df..5e6489d66 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileInfo.java +++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileInfo.java @@ -16,9 +16,9 @@ package org.eclipse.jst.jsf.common.metadata.internal; */ public final class StandardMetaDataFileInfo implements IStandardMetaDataSourceInfo{ - private String fileLocation; - private String fileLocatorClassname; - private String bundleId; + private final String fileLocation; + private final String fileLocatorClassname; + private final String bundleId; /** * Constructor diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java index 1bc90c07e..4cb134e33 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java +++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java @@ -133,14 +133,35 @@ class StandardMetaDataFilesProvider implements IMetaDataSourceModelProvider { } - private URI getMDFileURI(){ - try { - return URI.createURI(getFileLocator().getURL().toURI().toString()); - } catch (URISyntaxException e) { - JSFCommonPlugin.log(IStatus.ERROR, "Metadata File Load Error: "+getFileLocator().getFileInfo().toString()+": URISyntaxException: "+e.getMessage()); - } - return null; - } + private URI getMDFileURI() + { + try + { + StandardMetaDataSourceFileLocator fileLocator2 = getFileLocator(); + if (fileLocator2 != null) + { + final URL url = fileLocator2.getURL(); + if (url == null) + { + JSFCommonPlugin.log(new RuntimeException(), + "Couldn't locate meta-data file for " + + fileLocator2.getFileInfo() + .getLocation()); + return null; + } + + java.net.URI uri = url.toURI(); + return URI.createURI(uri.toString()); + } + } + catch (URISyntaxException e) + { + JSFCommonPlugin.log(IStatus.ERROR, "Metadata File Load Error: " + + getFileLocator().getFileInfo().toString() + + ": URISyntaxException: " + e.getMessage()); + } + return null; + } /* (non-Javadoc) * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider#getSourceModel() @@ -153,7 +174,7 @@ class StandardMetaDataFilesProvider implements IMetaDataSourceModelProvider { try { URI uri = getMDFileURI(); inputStream = getInputStream(); - if (inputStream != null){ + if (inputStream != null && uri != null){ EList contents = StandardModelFactory.getInstance().loadStandardFileResource(inputStream, this, uri); //check to see if this is a Model if (contents != null && !contents.isEmpty() && diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java index a6a5e04ed..e65d0dab2 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java +++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java @@ -58,8 +58,8 @@ public abstract class StandardMetaDataSourceFileLocator { /** * Return URL to the meta-data source file. - * Must not be null. - * @return URL + + * @return URL or null if cannot find a the file for getFileInfo */ public abstract URL getURL(); |