[
http://opensource.atlassian.com/projects/hibernate/browse/HBX-1085?page=c...
]
Dmitry Geraskov commented on HBX-1085:
--------------------------------------
Thanks,
changed to:
for (int i = 0; i < packageFragmentRoots.length; i++) {
//search in source folders.
if (packageFragmentRoots[i].getClass() == PackageFragmentRoot.class) {
IPackageFragmentRoot packageFragmentRoot = packageFragmentRoots[i];
IPath path = packageFragmentRoot.getPath().append(file.getValue());
resource = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if (resource != null && resource.exists() &&
elementInResource(consoleConfiguration, resource, element)) return resource;
}
}
resource = null;
Receiving FileNotFoundException when Openning Mapping File in a
multiple-source-folder project
----------------------------------------------------------------------------------------------
Key: HBX-1085
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HBX-1085
Project: Hibernate Tools
Issue Type: Bug
Components: consoleconfiguration
Affects Versions: 3.2LATER
Environment: Windows XP SP3
JDK 1.6.0_01
Eclipse 3.4.0 (Ganymede)
HibernateTools plugin 3.2.4 nightly build (HibernateTools-3.2.4.200808270817-nightly)
Reporter: Thai
I received the following exception when Openning Mapping File from Hibernate
perspective:
java.io.FileNotFoundException:
F:\projects\bizservice\src\main\filtered-resources\org\openbiz\bizservice\domain\User.hbm.xml
(The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at
org.hibernate.eclipse.console.actions.OpenFileActionUtils.getDocument(OpenFileActionUtils.java:233)
at
org.hibernate.eclipse.console.actions.OpenFileActionUtils.rootClassInResource(OpenFileActionUtils.java:98)
at
org.hibernate.eclipse.console.actions.OpenFileActionUtils.elementInResource(OpenFileActionUtils.java:86)
at
org.hibernate.eclipse.console.actions.OpenFileActionUtils.getResource(OpenFileActionUtils.java:282)
at
org.hibernate.eclipse.console.actions.OpenMappingAction.run(OpenMappingAction.java:120)
at
org.hibernate.eclipse.console.actions.OpenMappingAction.run(OpenMappingAction.java:96)
at
org.hibernate.eclipse.console.actions.OpenMappingAction.run(OpenMappingAction.java:71)
at
org.eclipse.ui.actions.BaseSelectionListenerAction.runWithEvent(BaseSelectionListenerAction.java:168)
at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:583)
at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:500)
at
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
I find out the root cause in the following class
org.hibernate.eclipse.console.actions.OpenFileActionUtils (lines 273-282)
for (int i = 0; i <
packageFragmentRoots.length && resource == null; i++) {
//search in source folders.
if (packageFragmentRoots[i].getClass() == PackageFragmentRoot.class) {
IPackageFragmentRoot packageFragmentRoot = packageFragmentRoots[i];
IPath path = packageFragmentRoot.getPath().append(file.getValue());
resource = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
}
}
if (resource != null &&
elementInResource(consoleConfiguration, resource, element)) return resource;
The code assumes that if resource variable is not null, then the corresponding file
exists at that location. In fact, when the file doesn't exist, the method
org.eclipse.core.internal.resources.Container.getFile(..) might still return a not-null
value (see
http://mobius.inria.fr/eclipse-doc/org/eclipse/core/resources/IContainer....).
As a result, a not-null file path will be passed to
OpenFileActionUtils.elementInResource(..), and a FileNotFoundException will be thrown.
* Note that my project contains more than one source folder. This issue may not happen on
one-source-folder project.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira