jabref icon indicating copy to clipboard operation
jabref copied to clipboard

IllegalArgumentException: URI is not absolute

Open ytzemih opened this issue 1 year ago β€’ 31 comments

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)

  • [x] I made a backup of my libraries before testing the latest development version.
  • [x] I have tested the latest development version and the problem persists

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

ytzemih avatar Nov 12 '24 07:11 ytzemih

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

Siedlerchr avatar Nov 12 '24 10:11 Siedlerchr

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 avatar Nov 12 '24 13:11 ytzemih

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.

ytzemih avatar Nov 13 '24 07:11 ytzemih

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

koppor avatar Nov 16 '24 23:11 koppor

/assign-me

yash-agrawal03 avatar Nov 23 '24 19:11 yash-agrawal03

πŸ‘‹ Hey @yash-agrawal03, thank you for your interest in this issue! πŸŽ‰

We're excited to have you on board. Start by exploring our Contributing guidelines, and don't forget to check out our workspace setup guidelines to get started smoothly.

In case you encounter failing tests during development, please check our developer FAQs!

Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on JabRef's Gitter chat. And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.

Happy coding! πŸš€

⏳ Please note, you will be automatically unassigned if the issue isn't closed within 90 days (by 21 February 2025). A maintainer can also add the "πŸ“Œ Pinned"" label to prevent automatic unassignment.

github-actions[bot] avatar Nov 23 '24 19:11 github-actions[bot]

@koppor by when is the pr #12156 expected to close? I have to wait for that PR to get closed right?

yash-agrawal03 avatar Nov 25 '24 17:11 yash-agrawal03

@yash-agrawal03 I worked on it, it is merged now.

koppor avatar Nov 25 '24 21:11 koppor

Thank-You koppor, I will start working on this issue.

yash-agrawal03 avatar Nov 26 '24 17:11 yash-agrawal03

/unassign @yash-agrawal03

koppor avatar Dec 10 '24 13:12 koppor

πŸ‘‹ Hey @yash-agrawal03, you've been automatically unassigned from this issue due to inactivity.

[!NOTE] If you'd like to be re-assigned, just leave another comment or ask a maintainer to assign you again. If you're still actively working on the issue, let us know by commenting, and we can pin it to prevent automatic unassignment.

github-actions[bot] avatar Dec 10 '24 13:12 github-actions[bot]

/assign-me

Please give me another chance to complete this request

yash-agrawal03 avatar Jan 01 '25 13:01 yash-agrawal03

Hi, I am Yash , a student at King's College London working with @LinusDietz. Could I work on this task?

yshukla01 avatar Feb 06 '25 17:02 yshukla01

/assign @yshukla01

Siedlerchr avatar Feb 06 '25 18:02 Siedlerchr

πŸ‘‹ Hey @yshukla01, thank you for your interest in this issue! πŸŽ‰

We're excited to have you on board. Start by exploring our Contributing guidelines, and don't forget to check out our workspace setup guidelines to get started smoothly.

In case you encounter failing tests during development, please check our developer FAQs!

Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on JabRef's Gitter chat. And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.

Happy coding! πŸš€

⏳ Please note, you will be automatically unassigned if the issue isn't closed within 90 days (by 07 May 2025). A maintainer can also add the "πŸ“Œ Pinned"" label to prevent automatic unassignment.

github-actions[bot] avatar Feb 06 '25 18:02 github-actions[bot]

πŸ“‹ Assignment Update

Hi @yshukla01, you are no longer assigned to this issue.

Next steps

If you still want to work on this:

  • Comment with /assign-me to request reassignment
  • Ask a maintainer to assign you again
  • If you're making progress, a maintainer can add the pin label to prevent future automatic unassignment

github-actions[bot] avatar Mar 17 '25 12:03 github-actions[bot]

Hello, @koppor I am Fahad can you assign me this task, please?

sfahaddev avatar Mar 21 '25 21:03 sfahaddev

πŸ‘‹ Hey @sfahaddev, looks like you’re eager to work on this issueβ€”great! πŸŽ‰ It also looks like you skipped reading our CONTRIBUTING.md, which explains exactly how to participate. No worries, it happens to the best of us. Give it a read, and you’ll discover the ancient wisdom of assigning issues to yourself. Trust me, it’s worth it. πŸš€

github-actions[bot] avatar Mar 21 '25 21:03 github-actions[bot]

/assign-me

sfahaddev avatar Mar 21 '25 21:03 sfahaddev

πŸ‘‹ Hey @sfahaddev, thank you for your interest in this issue! πŸŽ‰

We're excited to have you on board. Start by exploring our Contributing guidelines, and don't forget to check out our workspace setup guidelines to get started smoothly.

In case you encounter failing tests during development, please check our developer FAQs!

Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on JabRef's Gitter chat. And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.

Happy coding! πŸš€

⏳ Please note, you will be automatically unassigned if there is not a (draft) pull request within 14 days (by 04 April 2025).

github-actions[bot] avatar Mar 21 '25 21:03 github-actions[bot]

/assign me

pranav0510s avatar May 01 '25 01:05 pranav0510s

⚠️ Issue Already Assigned

Hi @pranav0510s, this issue is currently assigned to @sfahaddev.

[!NOTE] If no progress is made within 14 days, the issue will be automatically unassigned.

Options for contributors
  • Wait for availability: The issue may become available if auto-unassigned
  • Collaborate: You can ask the assignee if they want help
  • Maintainer assistance: A maintainer can add you as co-assignee if appropriate

github-actions[bot] avatar May 01 '25 01:05 github-actions[bot]

/assign-me

jenilpatel264 avatar Jun 04 '25 10:06 jenilpatel264

⚠️ Assignment Limit Reached

Hi @jenilpatel264, you've reached the maximum number of 3 concurrent assignments.

[!NOTE] Please complete or unassign from your current issues before taking on new ones.

Current options
  • Complete one of your assigned issues and close it
  • Use /unassign-me on an issue you're no longer working on
  • Ask a maintainer for an exception if this is a special case

github-actions[bot] avatar Jun 04 '25 10:06 github-actions[bot]

/assign-me

jenilpatel264 avatar Jun 04 '25 10:06 jenilpatel264

πŸ‘‹ Hey @jenilpatel264, thank you for your interest in this issue! πŸŽ‰

We're excited to have you on board. Start by exploring our Contributing guidelines, and don't forget to check out our workspace setup guidelines to get started smoothly.

For questions on JabRef functionality and the code base, you can consult the JabRef Guru or ask on our Gitter chat.

In case you encounter failing tests during development, please check our developer FAQs!

Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on JabRef's Gitter chat. And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.

Happy coding! πŸš€

github-actions[bot] avatar Jun 04 '25 10:06 github-actions[bot]

⏰ Assignment Reminder

Hi @jenilpatel264, this is a friendly reminder about your assignment to this issue.

[!WARNING] This issue will be automatically unassigned in 11 days if there's no activity.

Remember that you can ask the JabRef Guru or DeepWiki about anything regarding JabRef. Additionally, our contributing guide has hints on creating a pull request and a link to our Gitter chat.

How to keep your assignment


If you are working on it, you can prevent automatic unassignment by:

  • Submitting a draft pull request with your progress within 11 days
  • Asking for the πŸ“Œ Pinned label if you need more time

We appreciate your contribution and are here to help if needed!

github-actions[bot] avatar Jun 14 '25 12:06 github-actions[bot]

We think that this issue was fixed. Please head to https://builds.jabref.org/main to download a development build and try it out.

For any feedback, add a comment to the pull request at https://github.com/JabRef/jabref/pull/13337.

github-actions[bot] avatar Jun 17 '25 20:06 github-actions[bot]

Should we keep this issue open? Or a refined one is needed (ref. https://github.com/JabRef/jabref/pull/13337#pullrequestreview-2938191896)? @koppor

subhramit avatar Jun 18 '25 08:06 subhramit

Reopened, the referring pr was just making the error message more clear but maybe did not fix the issue itself. Further testing and investigation required

calixtus avatar Jun 18 '25 10:06 calixtus