Error during Crossref DOI registration in OMP 3.4.0-9: Deposited XML is not well-formed or does not validate

Hi All,
I would like to thank everyone involved in the development of OMP once again.
I would also like to thank @ajnyga for allowing us to use the Crossref OMP DOI plugin.

Please tell us what happens and what you expected to happen:

I am using this plugin with OMP 3.4.0-9 to register DOIs for books and book chapters.
While I can register DOIs for book chapters without any problems,

if there is an & symbol in the references section of monographs, it gives an error during DOI registration.

When I manually remove the & symbol from the references section and try again, the registration is successful. However, removing the & symbol from the references of each book is quite a laborious process.

Since I am not a software expert, I cannot determine whether this error originates from OMP itself or the DOI plugin.
What can I do to fix this problem? Could you please guide me?
Best Regards,

Steps I took leading up to the issue

  1. Complete submission of a monograph, fill the references into the relevant are, add the publishing format and publish it. The system assigns a valid DOI. Then go to DOIs tab.
  2. Check the box for the submission, Click on the arrow right to the submission’s number, and Click to Send DOIs. Wait for the process to complete.
  3. Scroll down to message box and click See Error Message.
  4. The error message says: Deposited XML is not well-formed or does not validate: Error on line 67: The entity name must immediately follow the ‘&’ in the entity reference.

What application are you using?
OMP 3.4.0-9

Additional information
Sample Error message and references from a book:

Crossref Error Message:

<?xml version="1.0" encoding="UTF-8"?>
<doi_batch_diagnostic status="completed" sp="ip-10-4-2-147.ec2.internal">
   <submission_id>1742115802</submission_id>
   <batch_id>_1776327875</batch_id>
   <record_diagnostic status="Failure" msg_id="29">
      <doi />
      <msg>Deposited XML is not well-formed or does not validate: Error on line 86: The entity name must immediately follow the '&' in the entity reference.: Error on line 86: The entity name must immediately follow the '&' in the entity reference.</msg>
   </record_diagnostic>
   <batch_data>
      <record_count>1</record_count>
      <success_count>0</success_count>
      <warning_count>0</warning_count>
      <failure_count>1</failure_count>
   </batch_data>
</doi_batch_diagnostic>

Stack Trace:

Deposited XML is not well-formed or does not validate: Error on line 86: The entity name must immediately follow the '&' in the entity reference.
	at org.crossref.ds.metadata.AbstractMetadataProcessor.buildDocument(AbstractMetadataProcessor.java:123)
	at org.crossref.ds.metadata.MetadataProcessorImpl.processMetadata(MetadataProcessorImpl.java:129)
	at org.crossref.ds.controllers.SynchronousDepositController.handleRequest(SynchronousDepositController.java:187)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
	at org.crossref.common.spring.servlet.CrossRefDispatcherServlet$1.handle(CrossRefDispatcherServlet.java:140)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:555)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.crossref.common.servlet.RequestCaptureFilter.doFilter(RequestCaptureFilter.java:139)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.crossref.qs.controllers.CorsFilter.doFilterInternal(CorsFilter.java:27)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:937)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1793)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.lang.Thread.run(Thread.java:750)
Caused by: org.jdom.input.JDOMParseException: Error on line 86: The entity name must immediately follow the '&' in the entity reference.
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:533)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:946)
	at org.crossref.common.xml.CrossrefDocumentBuilder.build(CrossrefDocumentBuilder.java:28)
	at org.crossref.common.util.JDomUtil.buildDocument(JDomUtil.java:232)
	at org.crossref.ds.metadata.AbstractMetadataProcessor.buildDocument(AbstractMetadataProcessor.java:120)
	... 42 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 86; columnNumber: 221; The entity name must immediately follow the '&' in the entity reference.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:399)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:326)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1466)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1845)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3060)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:601)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:504)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:642)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	... 46 more

References of that monograph

Skisprungschanzen. Erzurum Kiremitliktepe Türk Telekom Ski Jumping Tower 20 Ekim 2021 [Available from: https://tr.wikipedia.org/wiki/Kiremitliktepe_Kayakla_Atlama_Kuleleri#cite_note-sss-1.
Skisprungschanzen. Kiremitlik Tepe Atlama Kuleleri Genel Bilgiler 2011 [Available from: https://www.skisprungschanzen.com/EN/Ski+Jumps/TUR-Turkey/Erzurum/0444-Kiremitliktepe/.
FIS-SKI. Ev sahipliği yaptığı bazı uluslararası turnuvalar 2024 [Available from: https://www.fis-ski.com/DB/ski-jumping/calendar-results.html?eventselection=&place=&sectorcode=JP&seasoncode=2018&categorycode=&disciplinecode=&gendercode=&racedate=&racecodex=&nationcode=tur&seasonmonth=X-2018&saveselection=-1&seasonselection=.
FIS-SKI. Kiremitlik Tepe Atlama Kuleleri Homologosyonları 2017 [Available from: https://www.fis-ski.com/DB/ski-jumping/homologations.html?place=Erzurum+-+Kandili&disciplinecode=&nationcode=&gendercode=&homid=2111&homologationtype=DET&sectorcode=JP&homologationlevel=&homologationcategory.

hi,

It is probably some sort of escaping issue. I will check what the OJS plugin does for references that the OMP plugin does not.

Hi @ajnyga
Thank you for your kind reply.

I use referencesForChapters plugin for the chapter references, and as as I mentioned earlier, no error occurs during registration of chapter DOIs, eventhough they contain any kind of that characters.

Best regards,

Hi everyone,

I’m experiencing the same issue, but in my case it occurs in OJS 3.4.0.7. When registering DOIs, the process results in an error.