Config file change for the plugin Generic XML Import

This point can be ignored if the plugin is not in use and thus the output of this command is empty:

xmlstarlet sel -t -c '//catalogue/config[@opacType="intranda_opac_xml"]' -n /opt/digiverso/goobi/config/goobi_opac.xml

In the goobi_opac.xml the searched ID used to be appended to the catalog address, now, for a catalog with the opacType="intranda_opac_xml", it is necessary to write {pv.id} for it. Example:

-    <config description="EAD database" address="https://example.com/opac?id="
+    <config description="EAD database" address="https://example.com/opac?id={pv.id}"

The change allows searching in XML files (address="file:///import/hotfolder/{pv.id}.xml").


The WebAPI is deprecated

The WebAPI is deprecated, instead we recommend the REST-API. The WebAPI is now deactivated by default. It can be reactivated with this option:

echo useWebApi=true >> /opt/digiverso/goobi/config/goobi_config.properties

Modification of the configuration file of the plugin goobi_plugin_administration_data_poller

By updating the plugin, a type="" must be set for each <rule>. The type of existing rules is always filter. For this, type="filter" must be set in each <rule> tag in the config file plugin_intranda_administration_data_poller.xml.


Renaming from the datapoller

The Goobi workflow Plugin: Catalogue Poller has been renamed to Data Poller. Instead of plugin_intranda_administration_catalogue-poller.jar the file is now called plugin_intranda_administration_data-poller.jar and is downloadable from GitHub: https://github.com/intranda/goobi-plugin-administration-catalogue-poller The name of the config file has changed from plugin_intranda_administration_catalogue_poller.xml to plugin_intranda_administration_data_poller.xml.

New Config File goobi_exportValidation.xml

With the new version, goobi_exportValidation.xml must be stored as a new configuration file.

wget https://raw.githubusercontent.com/intranda/goobi-workflow/master/Goobi/install/config/goobi_exportValidation.xml -O /opt/digiverso/goobi/config/goobi_exportValidation.xml


The config option for proxy usage has been renamed

http_useProxy has been renamed to http_proxyEnabled. There is a new option http_proxyIgnoreHost, with the following default:


Apply this change:

sed -e 's|^http_useProxy=|http_proxyEnabled=|' /opt/digiverso/goobi/config/goobi_config.properties -i

Config file change for goobi-plugin-step-createfullpdf

Please adjust the file plugin_intranda_step_createfullpdf.xml accordingly. Old:



    <!-- order of configuration is: 1.) project name and step name matches 2.)
        step name matches and project is * 3.) project name matches and step name
        is * 4.) project name and step name are * -->
        <!-- which projects to use for (can be more then one, otherwise use *) -->
        <!-- which stepss to use for (can be more then one, otherwise use *) -->
        <!-- use images from master or media folder -->
        <!-- if set to true, create single page pdf files first, merge them to a large file -->
        <!-- if set to false, create a pdf for all images, split them afterwards -->
        <pagePdf enabled="true" />
        <!-- keep the full pdf  if set to true, delete it otherwise -->
        <fullPdf enabled="true" />

        <pagePdf enabled="true" />
        <fullPdf enabled="false" />

Change in escaping for LDAP user

In the background something has changed in the escaping. This must be adjusted in the DB.

mysql goobi -NBse 'update benutzer set ldaplogin = replace(ldaplogin, "\\\\,", "\\,") where ldaplogin regexp "\\\\\\\\"'



Check that the tomcat-lib folder is no longer included as PreResources in:

Update of the URN generator required

If used, the urn-generator.jar has to be updated.

Configuration change for goobi-plugin-export-configurable

The options exportFolder and useSubFolderPerProcess are read directly from the project configuration now (Administration -> Projects -> Edit project -> Technical Data). They should be removed from the config file plugin_intranda_export_configurable.xml. The project configuration has to be adjusted: "Export path for XML file" and "Export path for the images" instead of exportFolder, and "Create process directory" instead of useSubFolderPerProcess.

In addition the option includeDerivate was renamed to includeMedia:

sudo sed -i -e 's|includeDerivate|includeMedia|g' /opt/digiverso/goobi/config/plugin_intranda_export_configurable.xml


Changed image display in routing slips

Apply this only if the feature is in use. It is unused, if the result of the following SQL-Queryeine is emtpy: mysql goobi -NBse 'select * from journal where type="file" limit 10'

In the configuration file goobi_rest.xml this block must be present to be able to display the images on dockets:

<endpoint path="/process/image/.*">
    <method name="get">
        <allow netmask=""/>
        <allow netmask="0:0:0:0:0:0:0:1/128"/>

Change the file using xmlstarlet:

xmlstarlet ed --inplace \
  -s 'config[not(endpoint[@path="/process/image/.*"])]' -t elem -n endpoint \
  --var path '$prev' \
  -i '$path' -t attr -n path -v '/process/image/.*' \
  -s '$path' -t elem -n method \
  -i '$prev' -t attr -n name -v 'get' \
  -s '$path/method' -t elem -n allow \
  -i '$prev' -t attr -n netmask -v '' \
  -s '$path/method' -t elem -n allow \
  -i '$prev' -t attr -n netmask -v '0:0:0:0:0:0:0:1/128' \

Move image comments

Apply this only if the feature is in use. Image comments are only in use, if MetsEditorShowImageComments or ShowImageComments in the goobi_config.properties is active (true). In order to move any existing image comments from the previous location to the new location, the following script can be called (adjust folder names if necessary):

find -L /opt/digiverso/goobi/metadata/ -regex '/opt/digiverso/goobi/metadata/[0-9]+/images/master_.*_media/imageComments.json' -execdir mv {} ../comments_master.json \;
find -L /opt/digiverso/goobi/metadata/ -regex '/opt/digiverso/goobi/metadata/[0-9]+/images/.*_media/imageComments.json' -execdir mv {} ../comments_media.json \;

Delete processing queues files

For an ActiveMQ version update, the files from the goobi processing queues should be deleted (if empty, check in Administration -> Processing queues):

find /opt/digiverso/goobi/activemq/ -type f -delete



In the Apache httpd config there may still be obsolete options that prevent websockets from working. Delete these lines:

        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1



The MySQL connector Java library has been updated again:

sed -re 's|(driverClassName=).*|\1"software.aws.rds.jdbc.mysql.Driver"|' /etc/tomcat9/Catalina/localhost/goobi.xml -i


The MySQL connector Java library has been updated:

sed -re 's|(driverClassName=).*|\1"com.mysql.cj.jdbc.Driver"|' /etc/tomcat9/Catalina/localhost/goobi.xml -i


The delivery plugin for Leiden University Library has been renamed. Instead of plugin_intranda_step_file-delivery.jar the file is now called plugin_intranda_step_leiden_file_delivery.jar and is downloadable from GitHub: https://github.com/intranda/goobi-plugin-step-leiden-file-delivery


The rulesets must be adapted for the use of image coordinates. The following metadata elements must be created:

    <language name="de">Koordinaten</language>
    <language name="en">Coordinates</language>
    <language name="de">Form</language>
    <language name="en">Shape</language>

This structural element must be created:

    <language name="de">Region</language>
    <language name="en">Area</language>
    <metadata num="1o">_urn</metadata>
    <metadata num="1o">_COORDS</metadata>
    <metadata num="1o">_SHAPE</metadata>
    <metadata num="1m">physPageNumber</metadata>
    <metadata num="1m">logicalPageNumber</metadata>

And finally, this element must still be allowed within page:

	  <language name="de">Seite</language>
	  <language name="en">Page</language>
+	  <allowedchildtype>area</allowedchildtype>
	  <metadata num="1m">logicalPageNumber</metadata>
	  <metadata num="*">_ucc_id</metadata>
	  <metadata num="1m">physPageNumber</metadata>
	  <metadata num="1o">_urn</metadata>

Also the Metadata _dateDigitization might be missing in the rulesets for some document types. To automate all changes:

for R in /opt/digiverso/goobi/rulesets/*.xml; do

xmlstarlet sel -t -v 'boolean(Preferences/MetadataType/Name="_COORDS")' -n $R | bash ||
xmlstarlet ed --inplace \
 -a 'Preferences/MetadataType[last()]' -t elem -n MetadataType \
 --var pos '$prev' \
 -s '$pos' -t elem -n Name -v _COORDS \
 -s '$pos' -t elem -n language -v Koordinaten \
 -i '$prev' -t attr -n name -v de \
 -s '$pos' -t elem -n language -v Coordinates \
 -i '$prev' -t attr -n name -v en \

xmlstarlet sel -t -v 'boolean(Preferences/MetadataType/Name="_SHAPE")' -n $R | bash ||
xmlstarlet ed --inplace \
 -a 'Preferences/MetadataType[last()]' -t elem -n MetadataType \
 --var pos '$prev' \
 -s '$pos' -t elem -n Name -v _SHAPE \
 -s '$pos' -t elem -n language -v Form \
 -i '$prev' -t attr -n name -v de \
 -s '$pos' -t elem -n language -v Shape \
 -i '$prev' -t attr -n name -v en \

xmlstarlet sel -t -v 'boolean(Preferences/DocStrctType/Name="area")' -n $R | bash ||
xmlstarlet ed --inplace \
 -a 'Preferences/DocStrctType[last()]' -t elem -n DocStrctType \
 --var pos '$prev' \
 -s '$pos' -t elem -n Name -v area \
 -s '$pos' -t elem -n language -v Region \
 -s '$prev' -t attr -n name -v de \
 -s '$pos' -t elem -n language -v Area \
 -s '$prev' -t attr -n name -v en \
 -s '$pos' -t elem -n metadata -v _urn \
 -s '$prev' -t attr -n num -v 1o \
 -s '$pos' -t elem -n metadata -v _COORDS \
 -s '$prev' -t attr -n num -v 1o \
 -s '$pos' -t elem -n metadata -v _SHAPE \
 -s '$prev' -t attr -n num -v 1o \
 -s '$pos' -t elem -n metadata -v physPageNumber \
 -s '$prev' -t attr -n num -v 1m \
 -s '$pos' -t elem -n metadata -v logicalPageNumber \
 -s '$prev' -t attr -n num -v 1m \

xmlstarlet sel -t -v 'boolean(Preferences/DocStrctType[Name="page"]/allowedchildtype="area")' -n $R | bash ||
xmlstarlet ed --inplace \
 -a 'Preferences/DocStrctType[Name="page"]/language[last()]' -t elem -n allowedchildtype -v area \

xmlstarlet ed --inplace \
 -s '//DocStrctType[../MetadataType/Name="_dateDigitization"][@topStruct="true"][not(metadata="_dateDigitization")]' -t elem -n metadata -v _dateDigitization \
 -i '$prev' -t attr -n num -v 1o \



For the archive management plugin (if installed), an additional xq file must be available in the right place. This can be downloaded like this:

sudo -u tomcat wget https://raw.githubusercontent.com/intranda/goobi-plugin-administration-archive-management/master/plugin/src/main/resources/findDb.xq -O /opt/digiverso/basex/webapp/findDb.xq


Line breaks in the configuration file goobi_projects.xml can affect the process title generation when creating new processes. The XML file can be reformatted this way (formatting is lost, especially of multiline comments):

sed -zre 's|\s+| |g' "${CONFIGFILE}" |  python3 -c 'import sys; from xml.dom.minidom import parseString; s=sys.stdin.read(); print(parseString(s).toprettyxml())' | awk NF | sed -re 's/ $//' | xmlstarlet fo -e UTF-8 -s 4 > ${TMPFILE}


The syntax for the configuration file of the editor for configuration files has changed and should be re-installed on the system and adapted for this purpose. The current version of a sample configuration for the file plugin_intranda_administration_config_file_editor.xml can be found here.


goobi-plugin-import-excel: config changes:

The old version:

<!-- prefix path to the image folder. Can be empty or missing if the import doesn't contain images or if the excel field contains absolute path  -->
<!-- define which column contains the image folder name. Can be combined with <imageFolderPath> prefix or an absolute path.
If the field is missing, empty or does not contain an existing directory, no images will be imported -->

<!-- defines, if images are moved from the source folder to the destination (true) or copied (false) -->

Needs to be replaced with:

<importImages failOnMissingImageFiles="true">
    <!-- prefix path to the image folder. Can be empty or missing if the import doesn't contain images or if the excel field contains absolute path  -->
    <!-- define which column contains the image folder name. Can be combined with <imageFolderPath> prefix or an absolute path.
    If the field is missing, empty or does not contain an existing directory, no images will be imported -->
    <!-- Image handling strategy. Valid values are "move", "copy" or "ignore".  -->

Script for this change:


XSL=$(cat << "EOF"
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" encoding="UTF-8" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" version="1.0" indent="yes"/>

    <xsl:template match="config">
            <xsl:apply-templates select="comment() | @* | *[not(self::steps|self::propertyName|self::propertyValue)]" />
            <importImages failOnMissingImageFiles="true">
                <xsl:copy-of select="imageFolderPath|imageFolderHeaderName"/>
                    <xsl:if test="moveImages = 'true'">move</xsl:if>
                    <xsl:if test="moveImages != 'true'">copy</xsl:if>
                    <xsl:if test="not(moveImages)">copy</xsl:if>

    <xsl:template match="config/imageFolderPath|config/imageFolderHeaderName|config/moveImages"/>

    <!-- IdentityTransform -->
    <xsl:template match="/ | @* | node()">
            <xsl:apply-templates select="@* | node()" />


xmlstarlet tr <(echo "$XSL") $file | xmlstarlet fo -s 4 > ${file}.tmp
mv ${file}.tmp ${file}


Database and Tomcat requirements

Goobi workflow now requires Tomcat 9 and MariaDB >= 10.1

Metadata editor: File manipulation now off by default

If you are missing "Page order" in "Pagination":

echo MetsEditorDisplayFileManipulation=true >> /opt/digiverso/goobi/config/goobi_config.properties

Renaming of the Sword export plugin

  • The repository name is unchanged: goobi-plugin-export-sword

  • The plugin jar file changed from plugin_intranda_export_mycore.jar to plugin_intranda_export_sword.jar.

  • The plugin config changed accordingly:

    mv -i /opt/digiverso/goobi/config/{plugin_MycoreExportPlugin.xml,plugin_intranda_export_sword.xml}
  • The plugin name changed from plugin_intranda_mycore_export to intranda_export_sword:

    mysql goobi -e 'update schritte set stepplugin="intranda_export_sword" where stepplugin="plugin_intranda_mycore_export"'


Goobi workflow has supported WebSockets for some time. To do this, its support in the Apache web server must be included in the configuration:

## make sure rewrite is enabled
RewriteEngine On
## Enable WebSockets to check concurrent access
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule /?(.*) ws://localhost:8080/$1 [P,L]

If the Tomcat is not listening on 8080, please adjust the port accordingly. However, you must always forward to the HTTP connector, not to the AJP connector;

Then activate the required module and restart the service:

a2enmod proxy_wstunnel
systemctl restart apache2


The file docket_metadata.xsl must be exchanged:

curl https://raw.githubusercontent.com/intranda/goobi-workflow/master/Goobi/install/xslt/docket_metadata.xsl > /opt/digiverso/goobi/xslt/docket_metadata.xsl

Last updated