Call to a member function saveXml()

Our nginx+php-fpm configuration have died.
in 3.2.0-1 OJS we’re unable to deposit doi. or download xml.
also problem with doaj export plugin.

we’re using xampp.

Apache Version Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.3
Loaded Modules core mod_win32 mpm_winnt http_core mod_so mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dav_lock mod_dir mod_env mod_headers mod_include mod_info mod_isapi mod_log_config mod_cache_disk mod_mime mod_negotiation mod_proxy mod_proxy_ajp mod_rewrite mod_setenvif mod_socache_shmcb mod_ssl mod_status mod_version mod_xml2enc mod_php7

[27-Mar-2020 10:25:38 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to a member function saveXml() on null in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php:372
Stack trace:
#0 D:\xampp2\htdocs\plugins\importexport\crossref\CrossRefExportPlugin.inc.php(219): PubObjectsExportPlugin->exportXML(Array, ‘article=>crossr…’, Object(Journal), true)
#1 D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php(176): CrossRefExportPlugin->executeExportAction(Object(Request), Array, ‘article=>crossr…’, ‘exportSubmissio…’, ‘articles’, true)
#2 D:\xampp2\htdocs\classes\plugins\DOIPubIdExportPlugin.inc.php(29): PubObjectsExportPlugin->display(Array, Object(Request))
#3 D:\xampp2\htdocs\lib\pkp\pages\management\PKPToolsHandler.inc.php(104): DOIPubIdExportPlugin->display(Array, Object(Request))
#4 D:\xampp2\htdocs\lib\pkp\classes\core\PKPRouter.inc.php(391): PKPToolsHandler->importexport(Array, Object(Request))
#5 D:\xampp2\htdocs\lib\pkp\classes\core\PKPPageRouter.inc.php(231): PKPRouter->_authorizeInitializeAndCallRequest(Array, Object(Reque in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php on line 372

[27-Mar-2020 10:31:28 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to a member function saveXml() on null in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php:372
Stack trace:
#0 D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php(195): PubObjectsExportPlugin->exportXML(Array, ‘article=>doaj-x…’, Object(Journal), true)
#1 D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php(196): PubObjectsExportPlugin->executeExportAction(Object(Request), Array, ‘article=>doaj-x…’, ‘exportSubmissio…’, ‘articles’, true)
#2 D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php(176): DOAJExportPlugin->executeExportAction(Object(Request), Array, ‘article=>doaj-x…’, ‘exportSubmissio…’, ‘articles’, true)
#3 D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php(52): PubObjectsExportPlugin->display(Array, Object(Request))
#4 D:\xampp2\htdocs\lib\pkp\pages\management\PKPToolsHandler.inc.php(104): DOAJExportPlugin->display(Array, Object(Request))
#5 D:\xampp2\htdocs\lib\pkp\classes\core\PKPRouter.inc.php(3 in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php on line 372

in what way should i look to fix this problem?

1 Like

can this errors be, because i use 7.4 php instead of 7.3 or 7.2?

1 Like

The error seems to indicate that when the plugin tried to export a specific object, it ultimately couldn’t load that object. Then, when it tried to use the object, it was null, so the method saveXml() could not be called.

This is unlikely to be a PHP version issue. Rather, it will be a data/code issue. Specifically, the code is initially identifying an object (galley, submission, issue) to be exported, but then when it actually goes to export it, the object doesn’t load (perhaps because of inconsistent or invalid data).

My next step in this situation would be to identify which object was causing the problem, either by exporting one-by-one, or by debugging the code. Then, look carefully at the metadata properties for that galley/submission/issue. Is there anything odd about it?

In addition to @ctgraham’s comments here, I’ll mention that ultimately, the XML object that tries to get saved here is returned from the execute() method in lib/pkp/classes/filter/Filter.inc.php. You could try looking at the object there, or the $preliminaryOutput variable there, to see what you’ve got. As Clinton mentioned, if the resulting XML isn’t valid, you’ll get a null object.

Cheers,
Jason

@ctgraham thanks for your reply.

As i understand if i use clean code of OJS 3.2.0-1, i should search database, and lookup where no data? Updating from 3.1.2.-4 was made by php-cli command.

I wouldn’t have an immediate guess of what to look for directly within the database.

If you are comfortable debugging PHP, you can use step-through debugging or error_log() statements to evaluate the variables along the call stack described in the error message, especially the XML @jnugent mentions.

If you are not familiar with debugging PHP, export the objects one-by-one in the interface until you encounter the error. Then, examine whichever object created the error directly within the submission system. Does anything stand out?

@ctgraham

i’m not sure that i’m good debugger.

i have enable in config.inc.php
show_stacktrace = On
display_errors = On

i tryied from 1-st step, - creating and publishing issue.

i can create new issue, but when i try to publish it i receive:
[27-Mar-2020 18:52:32 Europe/Berlin] ojs2: Unrecognized DAO PublishedArticleDAO!

but when i change in DB setting “published” to “1” it became published.

I have create submission. it’s status is “Scheduled” but not “published”
my submission haven’t “locale” setting in “submission” table. i need to set it manualy. it has “null” before i change. also i change “status” from 5 to 3. and finaly it became published.

screenshot for null setting in locale: image

Hi all,

There’s currently an issue in the ORCID plugin that interferes with publishing an issue. See: [OJS] ORCID Profile Plugin prevents article publication · Issue #5572 · pkp/pkp-lib · GitHub

For the moment, I’d recommend disabling that plugin before publishing an issue (and re-enabling afterwards if you like). There will be an updated version of the plugin available soon in the plugin gallery.

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like

already disabled. issue can be published. but i think that smth in DB is missed for submission, and that’s the problem of deposition to OJS.

unfortunatly nothing helped.

but i catch popup message for depositing to doaj

Deposit was not successful! The DOAJ API returned an error: ‘1 - {“status”: “bad_request”, “error”: “Supplied data was not valid JSON (ref: 733e2f80-705d-11ea-a91b-6ac132d54a90)”}’.

and when i try to export XML
Stack trace:
#0 D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php(195): PubObjectsExportPlugin->exportXML(Array, ‘article=>doaj-x…’, Object(Journal), true)
#1 D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php(196): PubObjectsExportPlugin->executeExportAction(Object(Request), Array, ‘article=>doaj-x…’, ‘exportSubmissio…’, ‘articles’, true)
#2 D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php(176): DOAJExportPlugin->executeExportAction(Object(Request), Array, ‘article=>doaj-x…’, ‘exportSubmissio…’, ‘articles’, true)
#3 D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php(52): PubObjectsExportPlugin->display(Array, Object(Request))
#4 D:\xampp2\htdocs\lib\pkp\pages\management\PKPToolsHandler.inc.php(104): DOAJExportPlugin->display(Array, Object(Request))
#5 D:\xampp2\htdocs\lib\pkp\classes\core\PKPRouter.inc.php(3 in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php on line 372

and for 3.1.2.4 all works fine

Hi @redukr,

There should be a line above “Stack trace:” that shows the actual error message.

Regards,
Alec Smecher
Public Knowledge Project Team

@asmecher

[27-Mar-2020 20:01:59 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to a member function saveXml() on null in D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php:372

save as in 1-st post :frowning:

i know that my hands grow from my ass… but i will lost my mind :frowning:

1 Like

Hi @redukr,

i know that my hands grow from my ass

That is a beautiful phrase and I will borrow it :slight_smile:

What do you get for the following SQL query?

 select * from filter_groups where symbolic like 'article=>crossref-xml';

Regards,
Alec Smecher
Public Knowledge Project Team

@asmecher
6 article=>crossref-xml plugins.importexport.crossref.displayName plugins.importexport.crossref.description class::classes.article.Article[] xml::schema(https://www.crossref.org/schemas/crossref4.3.6.xsd)

image

and a minute of humor: Hands-ass deity
image

Hi @redukr,

I think that reference to Article is the problem – it changed starting with OJS 3.2.0 but it appears to not have been updated. Could you try the following two queries?

UPDATE filter_groups SET input_type = 'class::classes.submission.Submission[]' WHERE input_type = 'class::classes.article.Article[]';
UPDATE filter_groups SET output_type = 'class::classes.submission.Submission[]' WHERE output_type = 'class::classes.article.Article[]'

Please confirm whether that works and I’ll get it added to GitHub for the next release.

Regards,
Alec Smecher
Public Knowledge Project Team

UPDATE filter_groups SET input_type = ‘class::classes.submission.Submission[]’ WHERE input_type = ‘class::classes.article.Article[]’

Affected rows: 5
Time: 0,037s

UPDATE filter_groups SET output_type = ‘class::classes.submission.Submission[]’ WHERE output_type = ‘class::classes.article.Article[]’

Affected rows: 1
Time: 0,003s

YOHOOOOOOOO

For crossref

  1. Registration successful!
  2. downloading of XML successful to

for doaj:
Deposit was not successful! The DOAJ API returned an error: ‘1 - {“status”: “bad_request”, “error”: “Supplied data was not valid JSON (ref: bc1caeaa-7076-11ea-a926-6ac132d54a90)”}’.

and when i try to download xml:

    Warning: DOMDocument::schemaValidate(): Invalid Schema in D:\xampp2\htdocs\lib\pkp\classes\xslt\XMLTypeDescription.inc.php on line 134
Validation errors:
element decl. 'language', attribute 'type': The QName value '{http://www.doaj.org/schemas/iso_639-2b/1.0}LanguageCodeType' does not resolve to a(n) type definition.

attribute decl. 'language', attribute 'type': The QName value '{http://www.doaj.org/schemas/iso_639-2b/1.0}LanguageCodeType' does not resolve to a(n) simple type definition.

attribute decl. 'language', attribute 'type': The QName value '{http://www.doaj.org/schemas/iso_639-2b/1.0}LanguageCodeType' does not resolve to a(n) simple type definition.

attribute decl. 'language', attribute 'type': The QName value '{http://www.doaj.org/schemas/iso_639-2b/1.0}LanguageCodeType' does not resolve to a(n) simple type definition.

Invalid XML:
<?xml version="1.0" encoding="utf-8"?>
<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://doaj.org/static/doaj/doajArticles.xsd">
  <record>
    <language>eng</language>
    <publisher>Ukrainian Association of Researchers of Religion</publisher>
    <journalTitle>Українське Релігієзнавство</journalTitle>
    <issn>2306-3548</issn>
    <eissn>2617-9792</eissn>
    <publicationDate>2020-03-26</publicationDate>
    <issue>90</issue>
    <doi>10.32420/2020.90.2095</doi>
    <publisherRecordId>2049</publisherRecordId>
    <title language="eng">3.2.1-1 testing ojs</title>
    <title language="rus">3.2.1-1 testing ojs</title>
    <title language="ukr">3.2.1-1 testing ojs</title>
    <authors>
      <author>
        <name>Georgii  Fylypovych</name>
      </author>
    </authors>
    <abstract language="eng">
3.2.1-1 testing ojs
</abstract>
    <abstract language="rus">
3.2.1-1 testing ojs
</abstract>
    <abstract language="ukr">
3.2.1-1 testing ojs
</abstract>
    <fullTextUrl format="html">http://192.168.1.59/index.php/uars/article/view/2095</fullTextUrl>
    <keywords language="eng">
      <keyword>3.2.1-1 testing ojs</keyword>
    </keywords>
    <keywords language="rus">
      <keyword>3.2.1-1 testing ojs</keyword>
    </keywords>
    <keywords language="ukr">
      <keyword>3.2.1-1 testing ojs</keyword>
    </keywords>
  </record>
</records>
Could not convert selected objects.
Stack Trace:
File: D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php line 377
Function: ImportExportPlugin->displayXMLValidationErrors(Array(4), "<?xml version="1.0" encoding="utf-8"?> <records xmlns:xsi="http:...")

File: D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php line 195
Function: PubObjectsExportPlugin->exportXML(Array(1), "article=>doaj-xml", Object(Journal), False)

File: D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php line 196
Function: PubObjectsExportPlugin->executeExportAction(Object(Request), Array(1), "article=>doaj-xml", "exportSubmissions-tab", "articles", False)

File: D:\xampp2\htdocs\classes\plugins\PubObjectsExportPlugin.inc.php line 176
Function: DOAJExportPlugin->executeExportAction(Object(Request), Array(1), "article=>doaj-xml", "exportSubmissions-tab", "articles", False)

File: D:\xampp2\htdocs\plugins\importexport\doaj\DOAJExportPlugin.inc.php line 52
Function: PubObjectsExportPlugin->display(Array(0), Object(Request))

File: D:\xampp2\htdocs\lib\pkp\pages\management\PKPToolsHandler.inc.php line 104
Function: DOAJExportPlugin->display(Array(1), Object(Request))

File: D:\xampp2\htdocs\lib\pkp\classes\core\PKPRouter.inc.php line 391
Function: PKPToolsHandler->importexport(Array(1), Object(Request))

File: D:\xampp2\htdocs\lib\pkp\classes\core\PKPPageRouter.inc.php line 231
Function: PKPRouter->_authorizeInitializeAndCallRequest(Array(2), Object(Request), Array(3), False)

File: D:\xampp2\htdocs\lib\pkp\classes\core\Dispatcher.inc.php line 143
Function: PKPPageRouter->route(Object(Request))

File: D:\xampp2\htdocs\lib\pkp\classes\core\PKPApplication.inc.php line 278
Function: Dispatcher->dispatch(Object(Request))

File: D:\xampp2\htdocs\index.php line 68
Function: PKPApplication->execute()

Hi @redukr,

Great! I’ve filed and fixed the CrossRef issue here:

For the DOAJ issue, I think you’re encountering a firewall problem or something similar that’s preventing OJS from contacting the DOAJ website for part of the schema description. See this thread: OJS3 XML doc error

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like

@asmecher why doaj export works fine for 3.1.2-4 ?

Hi @redukr,

It may be that there are two problems here:

  • One with the DOAJ deposit process (Supplied data was not valid JSON), which I haven’t looked at yet, and
  • Another with the export XML (the invalid XML problem).

Can you confirm that you’re able to successfully perform both processes in OJS 3.1.2? Is your server behind a proxy, and if so, is it configured in your config.inc.php configuration file?

Regards,
Alec Smecher
Public Knowledge Project Team

Hi @redukr,

Ah, I’ve found the problem – DOAJ appears to have bumped one of the schema files on its server to a newer, incompatible version. I’ve filed this at DOAJ XML exports fail to validate · Issue #5682 · pkp/pkp-lib · GitHub and will look into a fix.

Regards,
Alec Smecher
Public Knowledge Project Team