0

i got an error when trying to create a new coverage from an existing coveragestore in geoserver with REST api. I first created a new store manually in the web administration interface as i am more firm with this. Then I just copied the contents from the newly craeted store as .json (for example from "https://myserver/geoserver/rest/workspaces/myworkspace/coveragestores/myNewStore.json") and saved it as "newCoverageStore.json". I deleted the store and add it again with curl. My goal is to later do this with a lot of files via python, so i can't rely on manually creating the stores and coverages in the web interface.

curl -u admin:geoserver -v -XPOST -H 'Content-type:application/json' 
-d @newCoverageStore.json  
https://myserver/geoserver/rest/workspaces/myworkspace/coveragestores.json

This worked totally fine, created a new store called "myNewStore" and i now did the same with the coverage layer i want to publish from the store. So i published a coverage layer in the web interface. Copied the contents to as .json and again tried to add it with curl to geoserver.

curl -u admin:geoserver -v -XPOST -H 'Content-type:application/json' -d @newCoverage.json  
https://myserver/geoserver/rest/workspaces/myworkspace/coveragestores/myNewStore/coverages.json

with following .json:

{
   "coverage":{
      "name":"myNewLayer",
      "nativeName":"myNewLayer",
      "namespace":{
         "name":"myworkspace",
         "href":"https:\/\/myserver\/geoserver\/rest\/namespaces\/myworkspace.json"
      },
      "title":"myNewLayer",
      "description":"Generated from ImageMosaic",
      "keywords":{
         "string":[
            "myNewLayer",
            "WCS",
            "ImageMosaic"
         ]
      },
      "nativeCRS":"GEOGCS[\"WGS 84\", \n  DATUM[\"World Geodetic System 1984\", \n    SPHEROID[\"WGS 84\", 6378137.0, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]], \n    AUTHORITY[\"EPSG\",\"6326\"]], \n  PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]], \n  UNIT[\"degree\", 0.017453292519943295], \n  AXIS[\"Geodetic longitude\", EAST], \n  AXIS[\"Geodetic latitude\", NORTH], \n  AUTHORITY[\"EPSG\",\"4326\"]]",
      "srs":"EPSG:4326",
      "nativeBoundingBox":{
         "minx":-26.86,
         "maxx":21.1,
         "miny":-1.7399999999999984,
         "maxy":28.400000000000002,
         "crs":"EPSG:4326"
      },
      "latLonBoundingBox":{
         "minx":-26.86,
         "maxx":21.1,
         "miny":-1.7399999999999984,
         "maxy":28.400000000000002,
         "crs":"EPSG:4326"
      },
      "projectionPolicy":"REPROJECT_TO_DECLARED",
      "enabled":true,
      "metadata":{
         "entry":[
            {
               "@key":"elevation",
               "dimensionInfo":{
                  "enabled":false
               }
            },
            {
               "@key":"time",
               "dimensionInfo":{
                  "enabled":true,
                  "presentation":"LIST",
                  "units":"ISO8601",
                  "defaultValue":"",
                  "nearestMatchEnabled":false,
                  "rawNearestMatchEnabled":false
               }
            },
            {
               "@key":"cachingEnabled",
               "$":"false"
            },
            {
               "@key":"dirName",
               "$":"cddrs_projection_diff_rcm_rcp85_rcp85"
            }
         ]
      },
      "store":{
         "@class":"coverageStore",
         "name":"myworkspace:mynewStore",
         "href":"https:\/\/myserver\/geoserver\/rest\/workspaces\/myworkspace\/coveragestores\/myNewStore.json"
      },
      "serviceConfiguration":false,
      "simpleConversionEnabled":false,
      "internationalTitle":"",
      "internationalAbstract":"",
      "nativeFormat":"ImageMosaic",
      "grid":{
         "@dimension":"2",
         "range":{
            "low":"0 0",
            "high":"218 137"
         },
         "transform":{
            "scaleX":0.22,
            "scaleY":-0.22,
            "shearX":0,
            "shearY":0,
            "translateX":-26.75,
            "translateY":28.290000000000003
         },
         "crs":"EPSG:4326"
      },
      "supportedFormats":{
         "string":[
            "GEOTIFF",
            "GIF",
            "PNG",
            "JPEG",
            "TIFF"
         ]
      },
      "interpolationMethods":{
         "string":[
            "nearest neighbor",
            "bilinear",
            "bicubic"
         ]
      },
      "defaultInterpolationMethod":"nearest neighbor",
      "dimensions":{
         "coverageDimension":[
            {
               "name":"GRAY_INDEX",
               "description":"GridSampleDimension[-Infinity,Infinity]",
               "range":{
                  "min":"-inf",
                  "max":"inf"
               },
               "dimensionType":{
                  "name":"REAL_32BITS"
               }
            }
         ]
      },
      "requestSRS":{
         "string":[
            "EPSG:4326"
         ]
      },
      "responseSRS":{
         "string":[
            "EPSG:4326"
         ]
      },
      "parameters":{
         "entry":[
            {
               "string":"BackgroundValues",
               "null":""
            },
            {
               "string":[
                  "OVERVIEW_POLICY",
                  "QUALITY"
               ]
            },
            {
               "string":[
                  "MergeBehavior",
                  "FLAT"
               ]
            },
            {
               "string":"AllowMultithreading",
               "boolean":false
            },
            {
               "string":"MaxAllowedTiles",
               "int":-1
            },
            {
               "string":[
                  "ExcessGranuleRemoval",
                  "NONE"
               ]
            },
            {
               "string":"OutputTransparentColor",
               "null":""
            },
            {
               "string":"USE_JAI_IMAGEREAD",
               "boolean":true
            },
            {
               "string":"Bands",
               "null":""
            },
            {
               "string":"RescalePixels",
               "boolean":true
            },
            {
               "string":"Filter",
               "null":""
            },
            {
               "string":"InputTransparentColor",
               "null":""
            },
            {
               "string":[
                  "SUGGESTED_TILE_SIZE",
                  "512,512"
               ]
            },
            {
               "string":"Accurate resolution computation",
               "boolean":false
            },
            {
               "string":"SORTING",
               "null":""
            },
            {
               "string":[
                  "FootprintBehavior",
                  "None"
               ]
            },
            "rcp85"
         ]
      }
   }
}

This did not work as expected from my first similar test with the coverageStore and curl gives me an HTTP/2 500. The error log unfortunately did not give me any helpful hints:

2023-10-18 09:56:35,433 ERROR [geoserver.rest] - 
---- Debugging information ----
cause-exception     : java.lang.RuntimeException
cause-message       : null
class               : java.util.HashMap
required-type       : java.util.HashMap
converter-type      : com.thoughtworks.xstream.converters.collections.MapConverter
line number         : -1
class[1]            : org.geoserver.catalog.impl.CoverageInfoImpl
required-type[1]    : org.geoserver.catalog.impl.CoverageInfoImpl
converter-type[1]   : org.geoserver.config.util.XStreamPersister$CoverageInfoConverter
version             : 2.20.4
-------------------------------
com.thoughtworks.xstream.converters.ConversionException: 
---- Debugging information ----
cause-exception     : java.lang.RuntimeException
cause-message       : null
class               : java.util.HashMap
required-type       : java.util.HashMap
converter-type      : com.thoughtworks.xstream.converters.collections.MapConverter
line number         : -1
class[1]            : org.geoserver.catalog.impl.CoverageInfoImpl
required-type[1]    : org.geoserver.catalog.impl.CoverageInfoImpl
converter-type[1]   : org.geoserver.config.util.XStreamPersister$CoverageInfoConverter
version             : 2.20.4
-------------------------------
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:77)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:499)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:425)
    at org.geoserver.config.util.XStreamPersister$ResourceInfoConverter.doUnmarshal(XStreamPersister.java:2012)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
    at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1487)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1467)
    at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1347)
    at org.geoserver.config.util.XStreamPersister.load(XStreamPersister.java:718)
    at org.geoserver.rest.converters.XStreamJSONMessageConverter.readInternal(XStreamJSONMessageConverter.java:60)
    at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:199)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:206)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1043)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:357)
    at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:176)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:73)
    at org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
    at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
    at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:53)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:52)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
    at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:54)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:660)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
    at org.apache.coyote.http2.StreamProcessor.service(StreamProcessor.java:426)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.http2.StreamProcessor.process(StreamProcessor.java:87)
    at org.apache.coyote.http2.StreamRunnable.run(StreamRunnable.java:35)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.RuntimeException
    at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:105)
    at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readCompleteItem(AbstractCollectionConverter.java:146)
    at com.thoughtworks.xstream.converters.collections.MapConverter.putCurrentEntryIntoMap(MapConverter.java:105)
    at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:98)
    at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:92)
    at com.thoughtworks.xstream.converters.collections.MapConverter.unmarshal(MapConverter.java:87)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
    ... 123 more

It would be great if someone can give me some hints what went wrong here, if the curl call is incorrect or if there is something wrong with the .json file i posted to geoserver, although i just copied it and tried to reproduce the workflow in the web administration interface.

1
  • Something is wrong with your JSON and GeoServer can't read it
    – Ian Turton
    Oct 18, 2023 at 13:03

1 Answer 1

0

@Ian Turton was right, something was wrong with the Json. I excluded the "parameters" section at the bottom of the json and the creation via curl worked fine. I guess i have do look further what caused the problem, but right know that seemed to be the main issue.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.