github geoserver/geoserver-cloud v3.0.2
GeoServer Cloud 3.0.2

2 hours ago

Maintenance release of the 3.0.x line, on GeoServer 3.0.2, GeoTools 35.2, GeoWebCache 2.0.2 and Spring Boot 4.1.1. Besides the upgrade, it fixes changes made on one pod that never reached the others, three gateway errors (among them the HTTP 500 on GML responses), and bugs in the REST API, the pgconfig backend and tile layer removal. It also adds GeoParquet and Arrow IPC output formats for WFS, mount points for extra jars and fonts, and log levels that can be changed from the web UI without a restart.

Upgrade notes

  • The images no longer bundle the Oracle JDBC driver (ojdbc17), which ships under Oracle's proprietary terms. Deployments that use Oracle provide it at runtime through the new /opt/additional_libs mount point. #930
  • The images no longer ship a root-owned, pre-initialized data directory: the AOT training run initialized the default one instead of its temporary directory. Containers without a data directory volume start again under a non-root uid, named volumes are no longer seeded with training files, and the compose examples drop the init containers that fixed volume ownership. #925, #929
  • The gateway sends its request id to the services in X-Request-ID, so both log the same id for a request, and accepts an incoming id only from the proxies listed in geoserver.gateway.request-id.trusted-proxies. #1043

GeoServer

  • GeoServer 3.0.2, GeoTools 35.2 and GeoWebCache 2.0.2. Among the upstream fixes, the WMTS multidimensional operations now honor data security (GEOS-12206). See the GeoServer 3.0.2 release notes. #944, #960, #1028, #1035, #1040
  • GeoServer is built as 3.0.2-CLOUD from the gscloud/3.0.2 branch of camptocamp/geoserver: the 3.0.2 release plus GEOS-10561 and GEOS-11421, which are not merged upstream yet.

New features

  • Two mount points, usable without rebuilding the images: /opt/additional_libs for jars added to the application classpath, such as JDBC drivers or GeoServer extensions not included in the images, and /opt/additional_fonts for fonts registered with fontconfig and available to the JVM, for example for SLD labels. #922
  • GeoParquet and Arrow IPC output formats for WFS GetFeature, auto-configured in the WFS and web UI services, each with its own switch under geoserver.extension.tileverse.parquetry. #984, #933
  • The logging profile of the global settings now applies, so administrators can change the log levels of running services from the web UI, for example to log the SQL of a WFS request, without restarting them. The profiles are defined in geoserver_logging.yml in the configuration repository. #1046, fixes #1033

Cluster consistency

  • Users, groups and roles created or edited on one pod, for example through the web UI, now reach the other pods, including the REST API, without a restart. #977, fixes #702
  • Changing the default style of a layer takes effect on pods that had already rendered it. #988, fixes #781
  • Modifying a layer group with default styles no longer produces a bus event that the other pods drop. #990, fixes #986
  • Deleting a layer deletes its tile layer, drops its cached tiles and evicts it from the other services. On the data directory backend the tile layer configuration was left behind. #1006, with regression coverage in #1012

Gateway

  • WFS 1.x GML responses, WMS GML GetFeatureInfo and WPS raw feature collections no longer fail with HTTP 500. The gateway now relays a response whose Content-Type it cannot parse, such as text/xml; subtype=gml/3.1.1, unchanged. #1021, fixes #1002
  • Requests with a bare = inside a query value, such as a CQL_FILTER, no longer fail with HTTP 500. #996, fixes #693
  • Saving a web UI form no longer corrupts non-ASCII characters: the gateway double-encoded form posts that do not declare a charset. #998, fixes #981

REST API

  • Requests on paths containing /gwc, such as GET /rest/resource/gwc-gs.xml, no longer fail with a NullPointerException. #936, fixes #913
  • POSTing a layer group without <style> elements no longer fails with a NullPointerException. #983
  • Updating the WFS settings no longer breaks the OGC API Features conformance configuration: the REST service lacked the XStream persister initializers for complex metadata map values. #965, fixes #872

pgconfig backend

  • A layer referencing a style from another workspace keeps the style's own workspace. #994, by @jurgispods
  • Loading nested layer groups no longer fails with IllegalStateException: Recursive update from the catalog cache. #999, by @jurgispods

Other fixes

  • The web UI and REST services no longer crash at startup with a NoClassDefFoundError on log4j-core when the Importer extension is enabled. #938, fixes #912, by @articque
  • The access denied page is served instead of an HTTP 500. #971
  • Caches configured with their own weigher, quota or expiry keep that configuration when Spring's cache manager also registers them for the actuator endpoints. #1004

Dependencies

  • Spring Boot 4.1.1 and Spring Cloud 2025.1.3, on the Spring Framework 7.0.9 and Spring Security 7.1.1 that GeoServer builds against. #953
  • GeoServer ACL 3.0.3. #958
  • cloud-dependencies-bom 1.1.0: AWS SDK 2.41.32 -> 2.54.16, Azure SDK BOM 1.3.3 -> 1.3.8 (azure-storage-blob 12.35.0), google-cloud-storage 2.67.0 -> 2.73.0. #1009
  • tileverse 2.1.0 and tileverse-geoserver 3.0.2. #1051, #975
  • amqp-client 5.35.0, Jackson 3.2.3, and flatbuffers-java pinned to 25.2.10 for dependency convergence. #955, #1032, #968

Build and testing

  • GeoServer is built from a shallow submodule instead of GitHub Packages, and make deps-sync moves the submodule to the head of its branch. #927, #940
  • jakarta.servlet-api is declared once, as provided, in the root pom. #963
  • Tests run on GeoServer Cloud's own catalog, the one the services use. #1023
  • Acceptance tests updated to python-geoservercloud 0.8.14. #1016, #1020
  • PMTiles auto-configuration test fixed after an upstream change, and SonarCloud issues addressed. #1026, #1001, #1047, #1049

Full Changelog: v3.0.1.1...v3.0.2

Don't miss a new geoserver-cloud release

NewReleases is sending notifications on new releases.