Call to a member function getSubmissionFilter() on null in DOI submission job

We have (I believe) the same problem: automatic registration is not working, and we have thousands of similar failed jobs. Our job error log of one such job is below.

Some observations we’ve made:

  • We’ve also researched the funding plugin, but it does not seem to be the culprit.
  • When manually registering DOIs (by going to the menu, checking boxes and using the bulk ‘DOI deposit’ option), we’ve found that registration works very inconsistently:
  1. When registering multiple DOI’s at once, most won’t register, but at times one DOI does get registered
  2. When registering only one DOI at a time, the DOI does get deposited correctly every time.
{
    "message": "Call to a member function getSubmissionFilter() on null",
    "code": 0,
    "file": "PATH_TO_OJS_INSTALLATION\/html\/plugins\/generic\/crossref\/CrossrefPlugin.php",
    "line": 294,
    "trace": [
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/jobs\/doi\/DepositSubmission.php",
            "line": 63,
            "function": "depositSubmissions",
            "class": "APP\\plugins\\generic\\crossref\\CrossrefPlugin",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "PKP\\jobs\\doi\\DepositSubmission",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Util.php",
            "line": 41,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/BoundMethod.php",
            "line": 93,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/BoundMethod.php",
            "line": 37,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php",
            "line": 661,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Bus\/Dispatcher.php",
            "line": 128,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Pipeline\/Pipeline.php",
            "line": 141,
            "function": "Illuminate\\Bus\\{closure}",
            "class": "Illuminate\\Bus\\Dispatcher",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Pipeline\/Pipeline.php",
            "line": 116,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Bus\/Dispatcher.php",
            "line": 132,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/CallQueuedHandler.php",
            "line": 124,
            "function": "dispatchNow",
            "class": "Illuminate\\Bus\\Dispatcher",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Pipeline\/Pipeline.php",
            "line": 141,
            "function": "Illuminate\\Queue\\{closure}",
            "class": "Illuminate\\Queue\\CallQueuedHandler",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Pipeline\/Pipeline.php",
            "line": 116,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/CallQueuedHandler.php",
            "line": 126,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/CallQueuedHandler.php",
            "line": 70,
            "function": "dispatchThroughMiddleware",
            "class": "Illuminate\\Queue\\CallQueuedHandler",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Jobs\/Job.php",
            "line": 98,
            "function": "call",
            "class": "Illuminate\\Queue\\CallQueuedHandler",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Worker.php",
            "line": 425,
            "function": "fire",
            "class": "Illuminate\\Queue\\Jobs\\Job",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Worker.php",
            "line": 375,
            "function": "process",
            "class": "Illuminate\\Queue\\Worker",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/lib\/vendor\/laravel\/framework\/src\/Illuminate\/Queue\/Worker.php",
            "line": 326,
            "function": "runJob",
            "class": "Illuminate\\Queue\\Worker",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/lib\/pkp\/classes\/core\/PKPQueueProvider.php",
            "line": 106,
            "function": "runNextJob",
            "class": "Illuminate\\Queue\\Worker",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/html\/lib\/pkp\/classes\/queue\/JobRunner.php",
            "line": 220,
            "function": "runJobInQueue",
            "class": "PKP\\core\\PKPQueueProvider",
            "type": "->"
        },
        {
            "file": "PATH_TO_OJS_INSTALLATION\/lib\/pkp\/classes\/core\/PKPQueueProvider.php",
            "line": 135,
            "function": "processJobs",
            "class": "PKP\\queue\\JobRunner",
            "type": "->"
        },
        {
            "function": "PKP\\core\\{closure}",
            "class": "PKP\\core\\PKPQueueProvider",
            "type": "->"
        }
    ]
}

@KayWP, when you say When registering multiple DOI's at once, most won't register..., do you mean the jobs fail or you get a notification in the DOIs list panel that there was an error depositing the DOIs?

Regards,

Erik
PKP Team

@ewhanson We don’t get a visible error: the doi stays on registered rather than submitted.

I assume that action adds a new failed job to the list, but due to the amount of journals we host and failed jobs mentioning DOIs, it is hard to be certain of the causality there.

EDIT 10/07/2024: I made a mistake in this comment, the DOI stays on ‘submitted’ rather than ‘registered’.

Hi @KayWP,

If the status is registered, then that means as far as OJS knows, the DOIs were successfully deposited. Are you unable to resolve the DOIs? If so you may need to contact Crossref or your DOI registration agency to see if they have your DOIs registered.

For more info, on the meaning of the DOI statuses, you can check the ? symbol next to filters on the DOI page. It will bring up this table of the status and their meaning.

Submitted means the DOI has been queued to be sent to the registration agency but OJS hasn’t heard anything back from the registration agency yet (good or bad). Registered means the item was successfully received by the registration agency. If anything in the language here is confusing, let me know and I can update it to make it more clear.

Hope that helps.

Regards,

Erik
PKP Team

@ewhanson

Apologies, it seems I mixed up the terms when I responded. The DOI’s that don’t work are ‘submitted’. I can ‘deposit’ DOI’s in the relevant menu to make them active and turn them into ‘registered’, but it only consistently works if I deposit one ‘submitted’ DOI at a time, not if I do multiple.

Hi @KayWP, thanks for clarifying. I’ll try and do a bit more digging to see if I can find out what’s going on, but I wanted to first move our conversation to a separate thread just to keep things organized.

Regards,

Erik
PKP Team

@KayWP, are you using the built-in job runner that runs at the end of web requests (job_runner = On in the config.inc.php configuration file) or are you using the dedicated job runner as described in the documentation?

Regards,

Erik
PKP Team

@ewhanson Thank you kindly for looking into this.

We are currently using the built-in job runner.

We’ve discussed moving to the dedicated job runner (in the context of it potentially having a positive impact on this issue too). However, we haven’t found the time to properly research and implement it yet.

Hi @ewhanson,

To follow up on your question above: we were unsure if you were recommending we switch to a dedicated job runner, or if you were recommending we wait with doing so.

Hi @KayWP, the only thing I can think is if the built in job runner is timing out with the total time a PHP request is allowed to run. I wasn’t making any explicit recommendations on which job runner to use, but I think it would probably be worth exploring if you are running into these kinds of issues. One advantage of the dedicated job runner for this context is each submission is processed individually so if there is a timeout issue, using the dedicated job runner should take care of that. I’m not sure if that is the root cause of your issue but it could be worth a test to see if it helps.

Regards,

Erik
PKP Team

Thank you! We’ll go and try to see if it helps. We’ll be sure to report back after.