Hello, I want to add the ability to add CrossRef as a new DOI provider. I wrote some code (mainly inspired by the DataCite code), but I encountered one problem - after creating the dataset, Dataverse calls the 'reserveIdentifier' method, which in the case of DataCite reserves the DOI number, which is impossible in the case of CrossRef (CrossRef does not provide the option to reserve DOI). How can I deal with this problem?
I would also like to ask if I should create some kind of draft pull request where I can show my code?
Hi @Konrad Perłowski and welcome! :wave:
Heads up that there are plans to make PID providers pluggable as we now enabled for exporters. How urgent is your development? Are you fine with sticking to a fork for now? (I somewhat doubt a PR to add a CrossRef provider would make it into upstream soon, but let's ask @Philip Durbin to verify that)
Back to your original problem (and please let's stick to that in this topic, please create a new topic for the fork vs plugin thing):
Dataverse calls the 'reserveIdentifier' method
Are you referring to DOIDataCiteServiceBean.createIdentifier(DvObject dvObject) here? I'm not aware of a "reserveIdentifier" method coming from the interface GlobalIdServiceBean.
Maybe better examples to learn from are https://github.com/IQSS/dataverse/blob/develop/src/main/java/edu/harvard/iq/dataverse/pidproviders/PermaLinkPidProviderServiceBean.java and https://github.com/IQSS/dataverse/blob/develop/src/main/java/edu/harvard/iq/dataverse/pidproviders/FakePidProviderServiceBean.java
The DataCite Provider is quite messy... :see_no_evil:
Yes, that is the method calling reserveIdentifier. The problem is if I don't post any doi to CrossRef after creating new draft dataset, this doi could be taken later on by some other dataset, but I can't post draft dataset as published one
Who would take that?
Which way of PID generation are you planning to use?
Dataverse will take care of not creating a PID again for two different entities for you.
(For a very long time, you could not reserve DOIs at DataCite as well.)
Yes, we should check with Jim Myers (qqmyers) about refactoring the PID code. He has made a lot of progress recently and I just left a comment about this here: https://github.com/IQSS/dataverse/issues/8581#issuecomment-1755100912
I guess that we can handle it with Konrad our problem (the discussion helped me to better understand the issue). But we are very interested in pluggable PID's since we are hosting repositories for 6 Universities, and were forced by DataCite policy to use 6 different doi's - so we have to run 6 instances, and then harvest them. But still, DV only supports DataCite as a provider, so support for Crossref should be useful.
What is the roadmap for these plugged PID providers?
I'm not sure. I don't see anything on the roadmap or the backlog board.
Well it will probably not be this year... And probably putting money in the game will push things forward...
I feel like there's an issue about multiple DOI authorities in a single installation.
Ah ha. Found it: Support flexible option for DOI and Handle registration, in same installation #3623
And it's currently tagged as a 6.1 proposal.
@Andrzej Zemla I left a comment with your use case.
@Konrad Perłowski hi! We've been leaving comments on your PR #10235. It has merge conflicts and we created a new PR #10803. We'd love to hear what you think. Also, we'd like to make sure you get credit somehow, if you want it, for kicking this off!
Last updated: Nov 01 2025 at 14:11 UTC