Giter Club home page Giter Club logo

geosolutions-it / mapfish-print Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mapfish/mapfish-print

3.0 8.0 9.0 3.48 MB

A component of http://www.mapfish.org for printing templated cartographic maps. This module is the java serverside module. It works well with the mapfish print javascript module.

Home Page: http://www.mapfish.org/doc/print/

License: GNU General Public License v3.0

Shell 0.04% Java 99.47% XSLT 0.19% HTML 0.26% Batchfile 0.03%

mapfish-print's Introduction

Build Status

This fork of mapfish-print dedicated mainly to MapStore, provides:

  • Several additional features (see the wiki )
  • uses maven to build and deploy instead of gradle

build

mvn install

Deploy

mvn deploy

Release process

The release procedure is essentially made of 2 steps:

  • Cut major branch
  • Effective Release

The project is developed on the main (master) branch, containing the latest -SNAPSHOT version of the modules of the project. When a major release starts the validation process, a new release branch is created (see Cut-Release, named <major-version>.xx. After this on the main (master) branch the -SNAPSHOT version of the modules is increased and from this point the main branch will include commits for the next major version of the project.

When the validation process is completed and all the fixes have been applied to the release branch, the version of the java modules is fixed, commit is tagged with the number of the release and the Github release is published. See Release.

After this on the release brach the -SNAPSHOT version of the modules is restored so that it is possible to continue applying fixes and minor improvements, creating more releases on it with the same procedure, until end of maintainance.

Here the steps to follow for executing the 2 procedures :

Cut-Release branch

  1. Run the workflow Cut Release branch passing
  • Branch Master
  • current version
  • next version
  • main branch (keep master)
  • other options (can be left as default)
  1. Merge the PR that is generated, if not merged automatically

Release

  1. Run the workflow Release with the folling parameters:
  • select the branch to use (e.g. 2.1.x)
  • version to release (e.g. 2.1.0)
  • base version (e.g. 2.1)

The release will be automatically published on GitHub. Packages will be automatically deployed on maven repository.

Relevant Workflows

  • CI: Automatically does tests for pull request or commits on master. For commits on the main repo (e.g. when PR are merged on master or stable branches, the workflow publish also the artifacts on GeoSolutions Maven Repository
  • Cut release branch: (cut-major-branch.yml): Manually triggered workflow that allows to create a stable branch named <current-version>.x and create a pull request for updating master branch -SNAPSHOT version with the new data.
  • Release: (cut-major-branch.yml): Manually triggered workflow to apply to the stable branch that fixes the maven modules versions, tags the commit, build and deploy artifacts, restores snapshot versions and publish a Github release on the tagged commit.

mapfish-print's People

Contributors

aaime avatar adube avatar alediator avatar bbinet avatar cedricmoullet avatar fredj avatar geekdenz avatar github-actions[bot] avatar hdpe avatar jbjonesjr avatar lindsejs avatar mbarto avatar offtherailz avatar oscarfonts avatar procrastinatio avatar sbrunner avatar snkashis avatar taba90 avatar tdipisa avatar ybolognini avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mapfish-print's Issues

Error on startup for GeoServer 2.13.1

Installing print plugin Replacing the custom jars to GeoServer 2.13.1 as explained in the wiki make GeoServer fail startup.

Here an extract of the catalina.out

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.mapfish.print.ThreadResources] for bean with name 'threadResources' defined in URL [jar:file:/var/lib/tomcats/geoserver/webapps/geoserver-test/WEB-INF/lib/gs-printing-2.13-SNAPSHOT.jar!/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.mapfish.print.ThreadResources
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1385)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:641)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:609)
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1484)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:425)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:389)
        at org.springframework.context.support.AbstractApplicationContext.getBeanNamesForType(AbstractApplicationContext.java:1177)
        at org.geoserver.platform.GeoServerExtensions.extensionNames(GeoServerExtensions.java:206)
        at org.geoserver.platform.GeoServerExtensions.extensions(GeoServerExtensions.java:124)
        at org.geoserver.platform.GeoServerExtensions.bean(GeoServerExtensions.java:327)
        at org.geoserver.config.GeoServerLoaderProxy.lookupGeoServerLoader(GeoServerLoaderProxy.java:76)
        at org.geoserver.config.GeoServerLoaderProxy.setApplicationContext(GeoServerLoaderProxy.java:44)
        at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:121)
        at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:97)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:235)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:702)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:527)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.geoserver.platform.GeoServerContextLoaderListener.contextInitialized(GeoServerContextLoaderListener.java:23)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.mapfish.print.ThreadResources
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:401)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1432)
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1377)
        ... 42 more

//...
Caused by: java.lang.ClassNotFoundException: org.mapfish.print.ThreadResources
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:401)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1432)
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1377)
        ... 66 more

Port mapfish-print latest master improvements to the GeoNode branches

Currently MapStore and GeoNode use two different versions of the mapfish-print library.
We need to:

  • port the latest improvements done for the GEOINFO work to the GeoNode specific branches (for GeoNode versions 3.3.x and master)
  • try to harmonize the two so that we can converge on a single version for both MapStore and GeoNode

We are going to test the ported commits on the latest GeoServer 2.19.x as a proof of compatibility with GeoNode.

Delivery of the work to GeoInfo-AIT

We need to allow GeoInfo to be in a position to rebuild the experimental GeoNode with the printing enhancements and the integrate their changes.

Map projection selection for printing

We want to allow the user to select an alternative CRS for the printed map from the MapStore / GeoNode printing dialog.

New Wireframe 1

We will introduce a reprojection phase of all the stuff to be printed, so that the map is printed using a user-selected projection. For sure we would have to reproject:

  • The map bbox (or center and scale)
  • Vector data
  • BBOX of wms layers

Some types of layers are not, by nature, reprojection friendly, so we would exclude those layers from the printed map, if reprojection occurs (a warning to the user could be displayed in this case. These layers may include WMTS and TMS ones (OSM and similar too), and all the vendor API based ones (google, bing, etc.). We could also check that WMS layers support the chosen CRS (using capabilities). We could somehow use the already existing engine that does the same when the screen map is in a CRS different from EPSG:3857.

Also, CRS may be incompatible, depending on the current bbox, so it may not be possible to reproject the current map at every position and scale (for example, UTM zones are valid only on a specific area). We may advise the user when reprojection is not possible.

Final concern: the map preview would be inconsistent with the printed map when a CRS different than the screen one is selected, so we will hide the map preview box when this happens, with a notice for the user on why the preview map is not shown.

This requires some work at the MapStore level:

  • adding support in MapStore for additional (custom) fields in the printing dialog, as plugins of the printing dialog (#39)
  • adding support for custom spec to mapfish payload transformer pipeline (#40)
  • adding support for custom validation on the printing dialog (#41)
  • implement reprojection of vector layers / annotations (geosolutions-it/MapStore2#7747)

And some work as a custom plugin:

  • implementing a configurable CRS selector as a printing dialog plugin (it should allow listing the allowed CRSs, so that only those requested by AIT are shown, EPSG:3857, EPSG:4326, EPSG:32647, EPSG:32648), that would store the user selection in the printing spec; eventually reuse part of the CRS selector plugin, refactoring where needed
  • implementing and configuring a reprojection step for the spec to mapfish transformer
  • implement custom validation that will notify the user of layers non supported to print on the selected CRS, or of an invalid area for reprojection (geosolutions-it/MapStore2#7748)

MapStore printing dialog plugins refactor

MapStore printing dialog plugin is currently configured as a static list of controls.

To enable plugging new / different controls in projects we need to:

  • refactor the Print plugin/component as a PluginContainer
  • refactor actual controls into plugins and inject them by configuration
  • to retain backward compatibility, the default configuration will inject the actual controls

MapStore printing dialog validation

Error and warnings rules in the printing dialog are currently hardcoded.

To allow custom controls and their validation rules we should:

  • add a pluggable validation function replacing actual warnings/errors evalutation code
  • allow plugins to implement their own validation code to set warnings and errors

Create a GeoNode package with all the AIT printing improvements

We need to:

  • create a branch of the geonode-mapstore-client connected to the latest MapStore2 master (as soon as all the improvements have been merged), and customize it properly to enable all the printing improvements
  • create a geonode version from 3.3.x, with the above client, the updated mapfish-print lib (#47 ) and a way to run / test it locally or in the cloud

We need to evaluate how/if to update both GeoNode master and 3.3.x to include this work.

Connected to #33

MapStore improve Graticule layers and implement printability

We want to implement a vector layer to show graticules (for at least lat-lon and regular UTM zones coordinate systems), with labels attached to it.

image

The goal is to show the layer in printed maps, but since we already have a GraticuleLayer we should expand that with:

Additional requirements:

  • the grid used will depend on the CRS chosen for printing (EPSG:3857, EPSG:4326 or UTM)
  • we want the grid size to be configurable, and different at different zoom levels (e.g. degress, minutes or seconds for EPSG:4326; meters or km for UTM)
  • we want the labels format to be configurable also, and possibly different for the different sizes

Caveat: in printed maps, labels should be external to the map area. To avoid implementing something on the mapfish engine for this, we could add a (white) frame as a vector layer, with labels on it, giving the illusion of external labels.

New Wireframe 2 (1)

Final release to 3.3.x and master

Once GeoInfo is ready with their local changes we shall make sure we can release everything.

As a side note, let's see what we want to do with the printing changes.
I would for example allow printing in 4326 by default from now on in addition to Google Mercator and maybe also the additional parameters.

Java 11 build not available due to gradle version being so old

Cross-referencing mapfish/mapfish-print-v2#11

GeoTools now requires Java 11, and as part OpenGIS Harmonization we need to change some package names in GeoTools requiring a new release of mapfish-print-v2 for downstream projects GeoServer and GeoNode.

  • Presently: gradle version 3, works with Java 8 (not Java 11) and uses plugins jetty and maven
  • Minimim: gradle version 5, works with Java 11, requires upgrade to plugins getty and maven-plublish

@tdipisa are you aware of this? Is it something that has been already discussed?
@aaime might add more details.

Additional text input in printing dialog to be put on the printed page

We need to implement a configurable plugin for the Printing dialog that will:

  • allow the user to insert a text, either in a text input or textarea control (configuration option)
  • show a (localized) label to describe the control (configuration option)
  • store the text in a custom spec property (configuration option)

New Wireframe 1 copy

This is a very generic plugin, so can be added to the MapStore core codebase.

Notes:

  • a custom yaml that includes the additional property is needed for the text to be shown in a printed map.
  • more than one instance with different label / property of the plugin should be allowed

Native Thread Leak causes out of memory

The out of memory error like this:

The GeoServer log notifies:

            java.lang.OutOfMemoryError: unable to create new native thread

In the standard output of your jvm you can also find some errors like:

            SEVERE: A web application appears to have started a thread named [Batik CleanerThread] but has failed to stop it. This is very likely to create a memory leak.

Basically the MapFish print and the related plugin of GeoServer create a thread pool for every pdf generation request, and it doesn't dispose these threads after the print process end.

"PRINT_BASE_URL" and "proxyBaseUrl" undocumented

MapFish print plugin reportedly requires PRINT_BASE_URL system property and proxyBaseUrl setting in the plugin configuration to function properly behind a proxy but this is undocumented in the wiki.

Examples:
At the top of <GEOSERVER_DATA_DIR>/printing/config.yaml:
proxyBaseUrl: https://my.domain.com/geoserver/pdf

JAVA_OPTS:
-DPRINT_BASE_URL=https://my.domain.com/geoserver/

AIT Printing Improvements

We collect here all the improvements to the GeoNode/MapStore printing engine we have to implement for AIT.

The accepted proposal is here: https://docs.google.com/document/d/1w1CkHBrfRFdFTNl6O9OEpBxHqIuwi4IrVXehaynh30I/edit#heading=h.hpvkr3wxmvs0

The list of improvements include:

  • Map projection selection for printing (epsg:4326,epsg:32647,epsg:32648)
  • Add Graticule Grids in printing, with labelling for Lat-Lon (EPSG:4326) or metric (UTM, epsg:32647 and epsg:32648)
  • Export format selection (JPEG, PDF, TIFF)
  • Current map scale shown in printing dialog and printed page
  • Additional text input in printing dialog (in addition to title and description), to be put in a specific place of the printed page

A document on the current status of integration of this library in GeoSolutions product is here: https://docs.google.com/document/d/1-AcWXwT_TFVPUzV2qAoSnQjxI7Glyc7bgUY0Ja5xc7M/edit?usp=sharing

MapStore mapfish specification creator refactor

The payload for printing maps sent to mapfish is created by MapStore in the PrintUtils utility (in the getMapfishPrintSpecification function), as an hardcoded transformation.

To allow customization of the payload, we need the following:

  • allow full delegation of getMapfishPrintSpecification to a different (project) function
  • refactor actual getMapfishPrintSpecification to decentralize transformer functions from PrintUtils to where they belong (e.g. WMS layer transformation should be moved to the WMS area) and allow plugging new transformers for additional fields
  • automatically include in the mapfish payload custom properties set by custom controls (all those properties will be stored in a plugins section of the printing spec, so they will be easily recognized)

Current map scale shown in printing dialog and printed page

We need to implement a configurable plugin for the Printing dialog that will:

  • show the current printing scale with a checkbox to include/exclude the scale from the final pdf
  • show a (localized) label to describe the control
  • store the user choice in a custom spec property (configurable option)

New Wireframe 1 copy 2

This is a very generic plugin, so can be added to the MapStore core codebase.

Note: a custom yaml that includes the additional property is needed for the scale to be shown in a printed map.

Allow printing grids with labels

Using #35, we want to implement a printing dialog control to include grids with labels in a printed map.

New Wireframe 1 copy 4

We need to implement a configurable plugin for the Printing dialog that will:

  • show a checkbox to include/exclude the grids from the final pdf (using the chosen CRS to decide which kind of grid)
  • show a (localized) label to describe the control
  • store the user choice in a custom spec property (configurable option)
  • implement a custom mapfish payload transformer to include a e grid layer when the checkbox is checked

Export format selection

We need to implement a configurable plugin for the Printing dialog that will:

  • allow the user to choose an export format between the ones advertised by the mapfish engine, eventually restricted by configuration (configuration option)
  • show a (localized) label to describe the control (configuration option)
  • store the chosen format in a custom spec property (configuration option)
  • implement an alternative viewer for image files to show / download them (the actual viewer is for PDF files only)

New Wireframe 1 copy 3

This is a very generic plugin, so can be added to the MapStore core codebase.

Note: formats must be enabled in the yaml layout file, to add more formats than the standard PDF.
A simple way to enable all the supported formats is to add this to the config.yaml file:

formats:
  - '*'

Could not resolve placeholder 'MAPFISH_PDF_FOLDER' in value "${MAPFISH_PDF_FOLDER}"

Hello,

using this geoserver/print-lib/gs-printing version matrix following the 2.15.x documentation in wiki here

Software version
Geoserver 2.15.5
print-lib print-lib-2.0-SNAPSHOT.jar
gs-printing gs-printing-geosolutions-2.15-SNAPSHOT.jar

if I add the jars as per documentation and then wait for application re-deployment, or deploy a war with the jars added inside, I get:



14-Jul-2020 10:12:44.054 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.geoserver.platform.GeoServerContextLoaderListener]
 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'printingWrapper' defined in URL [jar:file:/var/lib/tomcats/geoserver/webapps/geoserver/WEB-INF/lib/gs-printing-geosolutions-2.15-SNAPSHOT.jar!/applicationContext.xml]: Could not resolve placeholder 'MAPFISH_PDF_FOLDER' in value "${MAPFISH_PDF_FOLDER}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'MAPFISH_PDF_FOLDER' in value "${MAPFISH_PDF_FOLDER}"
        at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:228)
        at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.processProperties(PropertySourcesPlaceholderConfigurer.java:182)
        at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.postProcessBeanFactory(PropertySourcesPlaceholderConfigurer.java:157)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:286)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:166)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
        at org.geoserver.platform.GeoServerContextLoaderListener.contextInitialized(GeoServerContextLoaderListener.java:22)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4770)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5236)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1852)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'MAPFISH_PDF_FOLDER' in value "${MAPFISH_PDF_FOLDER}"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178)
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237)
        at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211)
        at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveStringValue(BeanDefinitionVisitor.java:296)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:217)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitMap(BeanDefinitionVisitor.java:275)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:211)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitPropertyValues(BeanDefinitionVisitor.java:147)
        at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitBeanDefinition(BeanDefinitionVisitor.java:85)
        at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:225)
        ... 23 more

and then the application fails to start.

I managed to get geoserver up and running only by specifying a path for mapfish to save PDFs like:
-DMAPFISH_PDF_FOLDER=/tmp

Could it be possible to fix this behaviour, maybe setting a MAPFISH_PDF_FOLDER default instead of it not being present at all, in order to once the geoserver application si deployed throws no error even if the plugin is present with no configuration added in JAVA_OPTS ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.