JabRef / jabref

Graphical Java application for managing BibTeX and biblatex (.bib) databases
https://devdocs.jabref.org
MIT License
3.64k stars 2.59k forks source link

IllegalArgumentException: URI is not absolute #12186

Open ytzemih opened 1 week ago

ytzemih commented 1 week ago

JabRef version

Latest development branch build (please note build date below)

Operating system

GNU / Linux

Details on version and operating system

JabRef 6.0--2024-11-05--4705977 Linux 6.1.0-26-amd64 amd64 Java 21.0.5 JavaFX 23.0.1+4

Checked with the latest development build (copy version output from About dialog)

Steps to reproduce the behaviour

  1. I've just been using global search.

Unfortunately, I can't quite reproduce this issue, although I've had this exception a few times already. It appears to be related to when I use search, the entry list when a group is selected. Also, it seems to happen after JR has been running for a while.

Appendix

...

Log File ``` java.lang.IllegalArgumentException: URI is not absolute at java.base/java.net.URL.of(Unknown Source) at java.base/java.net.URI.toURL(Unknown Source) at org.jabref@6.0.6556/org.jabref.logic.importer.util.FileFieldParser.convert(Unknown Source) at org.jabref@6.0.6556/org.jabref.logic.importer.util.FileFieldParser.parse(Unknown Source) at org.jabref@6.0.6556/org.jabref.logic.importer.util.FileFieldParser.parse(Unknown Source) at java.base/java.util.Optional.map(Unknown Source) at com.tobiasdiez.easybind@2.2.1-SNAPSHOT/com.tobiasdiez.easybind.optional.PreboundOptionalBinding$1.computeValue(Unknown Source) at com.tobiasdiez.easybind@2.2.1-SNAPSHOT/com.tobiasdiez.easybind.optional.PreboundOptionalBinding$1.computeValue(Unknown Source) at javafx.base@23.0.1/javafx.beans.binding.ObjectBinding.get(Unknown Source) at javafx.base@23.0.1/javafx.beans.binding.ObjectExpression.getValue(Unknown Source) at com.tobiasdiez.easybind@2.2.1-SNAPSHOT/com.tobiasdiez.easybind.optional.PreboundOptionalBinding$3.computeValue(Unknown Source) at javafx.base@23.0.1/javafx.beans.binding.ObjectBinding.get(Unknown Source) at javafx.base@23.0.1/javafx.beans.binding.ObjectExpression.getValue(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.TableCell.updateItem(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.TableCell.indexChanged(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.IndexedCell.updateIndex(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.TableRowSkinBase.updateCells(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.TableRowSkinBase.checkState(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.TableRowSkinBase.computePrefHeight(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.Control.computePrefHeight(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.prefHeight(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.layout.Region.prefHeight(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.resizeCell(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.getCell(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.getOrCreateCellSize(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.getOrCreateCellSize(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.recalculateAndImproveEstimatedSize(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.recalculateAndImproveEstimatedSize(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.recalculateEstimatedSize(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.skin.VirtualFlow.layoutChildren(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Parent.layout(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Scene.doLayoutPass(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.Toolkit.runPulse(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.Toolkit.firePulse(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.gtk.GtkApplication.enterNestedEventLoopImpl(Native Method) at javafx.graphics@23.0.1/com.sun.glass.ui.gtk.GtkApplication._enterNestedEventLoop(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.Application.enterNestedEventLoop(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.EventLoop.enter(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(Unknown Source) at javafx.graphics@23.0.1/javafx.stage.Stage.showAndWait(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.HeavyweightDialog.showAndWait(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.Dialog.showAndWait(Unknown Source) at org.jabref@6.0.6556/org.jabref.gui.JabRefDialogService.showConfirmationDialogAndWait(Unknown Source) at org.jabref@6.0.6556/org.jabref.gui.search.GlobalSearchBar.lambda$initSearchModifierButtons$8(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(Unknown Source) at javafx.base@23.0.1/javafx.beans.property.BooleanPropertyBase.fireValueChangedEvent(Unknown Source) at javafx.base@23.0.1/javafx.beans.property.BooleanPropertyBase.markInvalid(Unknown Source) at javafx.base@23.0.1/javafx.beans.property.BooleanPropertyBase.set(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.ToggleButton.setSelected(Unknown Source) at org.jabref@6.0.6556/org.jabref.gui.search.GlobalSearchBar.lambda$initSearchModifierButtons$14(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.collections.SetListenerHelper$Generic.fireValueChangedEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.collections.SetListenerHelper.fireValueChangedEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.collections.ObservableSetWrapper.callObservers(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.collections.ObservableSetWrapper.remove(Unknown Source) at org.jabref@6.0.6556/org.jabref.logic.search.SearchPreferences.setSearchFlag(Unknown Source) at org.jabref@6.0.6556/org.jabref.gui.search.GlobalSearchBar.lambda$initSearchModifierButtons$9(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base@23.0.1/javafx.event.Event.fireEvent(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Node.fireEvent(Unknown Source) at javafx.controls@23.0.1/javafx.scene.control.ToggleButton.fire(Unknown Source) at javafx.controls@23.0.1/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source) at javafx.controls@23.0.1/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at javafx.base@23.0.1/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at javafx.base@23.0.1/javafx.event.Event.fireEvent(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Scene$MouseHandler.process(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Scene.processMouseEvent(Unknown Source) at javafx.graphics@23.0.1/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) at javafx.graphics@23.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.View.handleMouseEvent(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.View.notifyMouse(Unknown Source) at javafx.graphics@23.0.1/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at javafx.graphics@23.0.1/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) ```
Siedlerchr commented 1 week ago

It seems to be related to a value in the file field somewhere that cannot be parsed to an URL

ytzemih commented 1 week ago

That makes sense, though, I haven't seen these exceptions before. Perhaps, the URI parser is now less relaxed? Ok, I'll try to check the file fields and see whether I can find something odd.

ytzemih commented 1 week ago

Alright, I can replicate this exception with the following MWE:

@InProceedings{Test,
  author       = {Test},
  title        = {Test},
  file         = {A test:www.yahoo.com/abc/cde.htm:URL},
}

It is derived from an entry existing in my DB, so not constructed. The repair amounts to adding a http://.

Alternatively, you can stimulate this exception with:

  1. Edit the file field of an entry
  2. Add file link
  3. Copy the URL from the snippet into the "Link" field
  4. Choose filetype URL
  5. Press "add"

I suppose that the exception will pop up wherever the URL parser is used. I've had some incomplete URLs in my DB files, but JR 6 now complains.

koppor commented 5 days ago

After https://github.com/JabRef/jabref/pull/12156/ is merged, we can work on this.