Just to follow up with the reason and solution for the problem:
In an id-element in the app-schema mapping, I did not use the database
id (integer primary key), but instead concatenated three columns to
generate the in the output expected id of the feature (also unique), not
expecting that this could generate problems. But it resulted in the
offensive database-query. I removed the concatenation (and moved it to
the features-templating) and everything works fine.
Thanks for all help with finding the problem,
Henning
On 2022-11-18 11:02, Hans Yperman wrote:
Page Title
I can shed some light on that as well: Click on 'blame' in the
relevant git line, and it points to GEOT-7248
https://github.com/geotools/geotools/pull/4092
https://github.com/geotools/geotools/commit/855b5f4ae72ffa3117a94806888c647ef96c2cc2
This change was backported 11 days ago. It seems to fix situations
where there are 0 ID columns, but breaks everything where there are >1
ID columns. Your error talks about 3 ID columns, so you are impacted.
*Hans Yperman*
Department IT
*Vlaams Instituut voor de Zee vzw*
InnovOcean Campus, Jacobsenstraat 1
8400 Oostende, België
☎+32 (0) 59 33 61 13
📧hans.yper...@vliz.be <mailto:hans.yper...@vliz.be>
*www.vliz.be <http://www.vliz.be>***
*From:* Henning Lorenz <henning.lor...@geo.uu.se>
*Sent:* vrijdag 18 november 2022 10:40
*To:* geoserver-users@lists.sourceforge.net
*Subject:* Re: [Geoserver-users] "org.postgresql.util.PSQLException"
in geoserver 2.21.2 (not in 2.21.1)
Hi Hans, Julian,
Thank you, Hans, for the elaborate reply.
* Activating "NumberMatched skip" as a workaround is successful
under geosever 2.21.2
* Julian: the WFS query is
http://localhost:8080/geoserver/eposgo/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=eposgo%3AMagnetotelluricStationsFeature&maxFeatures=5&outputFormat=application%2Fjson
<http://localhost:8080/geoserver/eposgo/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=eposgo%3AMagnetotelluricStationsFeature&maxFeatures=5&outputFormat=application%2Fjson>
(this is copied from the layer preview and any format will
generate the error; same if I remove maxFeatures)
* Although I have never touched "NumberMatched skip" before, I
checked the setting under geoserver 2.21.1, and it is as expected
deactivated. Thus,
o the query above under geoserver 2.21.1 works totally fine
o the query above under geoserver 2.21.2 works only with
"NumberMatched skip" activated
I have now a workaround and will try to follow up according to Hans's
suggestion. But this still leaves two open questions:
* Why has the behaviour of geoserver changed from 2.21.1 to 2.21.2?
* Did the change introduce a bug, or is this expected behaviour?
(which would mean that the query worked under 2.21.1 because of a
bug that was eliminated in 2.21.2)
Best wishes,
Henning
On 2022-11-17 15:14, Hans Yperman wrote:
I'll add my 2 cents.
The problem is not with the driver, but with the query generated
by geoserver: This text:
ERROR: function count(character varying, character varying,
character varying) does not exist Hint: No function matches the
given name and argument types. You might need to add explicit type
casts. Position: 8
is an SQL error message from postgres. The postgres jdbc driver is
just the transport of this message, not the cause. The SQL is
generated by
at
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.getCountInternal(JoiningJDBCFeatureSource.java:1523)
so let's look at that
file:https://github.com/geotools/geotools/blob/main/modules/extension/app-schema/app-schema/src/main/java/org/geotools/appschema/jdbc/JoiningJDBCFeatureSource.java#L1523
The query comes from either createCountQuery or
createJoiningCountQuery, and both generate a query with this shape:
SELECT COUNT(DISTINCT idcolumn,idcolumn,…) FROM (…)
Notice how COUNT is on position 8 in this query, which matches the
error message. The error also claims there are 3 arguments given
to count. Now, 3 args seems strange: AFAIK the count syntax
accepts only 1 column. If there are multiple ID columns,
geoserver does something I can't help you with.
Next steps could be:
1) Try to get hold of the actual query, e.g. grab it from the
network with wireshark, log it on the postgres server, put a java
breakpoint on that line 1523, …
2) Once you have it, run it on your database with pgadmin or psql
or … . Validate you get the same error message. Play with it
until the error goes away.
3) Convince geoserver to generate a valid query based on whatever
you learned from 2). I'd guess this would do something with the
id columns.
There might be a workaround: Under Layer settings > Publish,
there is a setting that lets you skip the NumberMatched counting.
If you can live without this count, you can hide the problem by
enabling that setting.
Good luck,
Hans
*Hans Yperman*
Department IT
*Vlaams Instituut voor de Zee vzw*
InnovOcean Campus, Jacobsenstraat 1
8400 Oostende, België
☎+32 (0) 59 33 61 13
📧hans.yper...@vliz.be <mailto:hans.yper...@vliz.be>
*www.vliz.be <http://www.vliz.be>*
*From:* Henning Lorenz <henning.lor...@geo.uu.se>
<mailto:henning.lor...@geo.uu.se>
*Sent:* donderdag 17 november 2022 12:07
*To:* geoserver-users@lists.sourceforge.net
*Subject:* [Geoserver-users] "org.postgresql.util.PSQLException"
in geoserver 2.21.2 (not in 2.21.1)
Hello,
I have a fully functional WFS service under geoserver 2.21.1 that
results in a postgresql-related error in 2.22.2.
Setup: geoserver, extensions: app-schema, features-templating,
ogc-api, smart-data-loader; PostgreSQL 15 (same for 14); jdk 11
(same for 17)
The service works under version 2.21.1 in Tomcat 9. The service
fails under version 2.21.2 in Tomcat 9 and standalone with the
following error (no other change to underlying software,
configuration):
<ServiceExceptionReport version="1.2.0"
xsi:schemaLocation="http://www.opengis.net/ogc
http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd"
<http://www.opengis.net/ogchttp:/schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd>>
<ServiceException>
java.lang.RuntimeException: java.io.IOException
java.io.IOExceptionERROR: function count(character varying,
character varying, character varying) does not exist Hint: No
function matches the given name and argument types. You might
need to add explicit type casts. Position: 8
</ServiceException>
</ServiceExceptionReport>
According to the log, this is a
"org.postgresql.util.PSQLException". I paste the complete entry
from the log (geoserver developer logging) below. It appears to be
a problem with the PostgreSQL driver, but I am not sure how to
proceed and how to track the problem down, so any advice is highly
appreciated. (Was the driver changed during 2.21.1/2 development?
Is it possible to downgrade the driver and test?)
Henning
ERROR [geoserver.ows] -
java.lang.RuntimeException: java.io.IOException
at
org.geotools.data.complex.MappingFeatureCollection.size(MappingFeatureCollection.java:329)
at org.geoserver.wfs.CountExecutor.getCount(CountExecutor.java:44)
at org.geoserver.wfs.GetFeature.getTotalCount(GetFeature.java:912)
at
org.geoserver.wfs.GetFeature.updateTotalCount(GetFeature.java:725)
at org.geoserver.wfs.GetFeature.run(GetFeature.java:637)
at
org.geoserver.wfs.DefaultWebFeatureService.getFeature(DefaultWebFeatureService.java:109)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
org.geoserver.ows.util.RequestObjectLogger.invoke(RequestObjectLogger.java:51)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at jdk.proxy3/jdk.proxy3.$Proxy126.getFeature(Unknown Source)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:867)
at
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:268)
at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
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.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
at
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
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.LoggingFilter.doFilter(LoggingFilter.java:194)
at
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at
org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
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:158)
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.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:48)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at
org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at
org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at
org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException
at
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.getCountInternal(JoiningJDBCFeatureSource.java:1535)
at
org.geotools.data.store.ContentFeatureSource.getCount(ContentFeatureSource.java:488)
at
org.geotools.data.complex.AppSchemaDataAccess.getCount(AppSchemaDataAccess.java:314)
at
org.geotools.data.complex.MappingFeatureCollection.size(MappingFeatureCollection.java:327)
... 131 more
Caused by: org.postgresql.util.PSQLException: ERROR: function
count(character varying, character varying, character varying) does not exist
Hint: No function matches the given name and argument types. You might
need to add explicit type casts.
Position: 8
at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676)
at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2366)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:356)
at
org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408)
at
org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:329)
at
org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:315)
at
org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:291)
at
org.postgresql.jdbc.PgStatement.executeQuery(PgStatement.java:243)
at
org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at
org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.getCountInternal(JoiningJDBCFeatureSource.java:1523)
... 134 more
GnuPG-key:
http://pgp.mit.edu:11371/pks/lookup?search=0x484D3AF03B32FD38&op=index
<http://pgp.mit.edu:11371/pks/lookup?search=0x484D3AF03B32FD38&op=index>
När du har kontakt med oss på Uppsala universitet med e-post så
innebär det att vi behandlar dina personuppgifter. För att läsa
mer om hur vi gör det kan du läsa här:
http://www.uu.se/om-uu/dataskydd-personuppgifter/
E-mailing Uppsala University means that we will process your
personal data. For more information on how this is performed,
please read here: http://www.uu.se/en/about-uu/data-protection-policy
--
Henning Lorenz
The Swedish Scientific Drilling Program (www.ssdp.se <http://www.ssdp.se>),
scientific coordinator
EPOS-Sweden (Swedish participation in EPOS-ERIC;www.epos-se.se
<http://www.epos-se.se>), infrastructure manager
Uppsala University
Department of Earth Sciences
Villavägen 16
752 36 Uppsala
Sweden
mobile: +46 (0) 701 679 320
e-mail:henning.lor...@geo.uu.se
GnuPG-key:
http://pgp.mit.edu:11371/pks/lookup?search=0x484D3AF03B32FD38&op=index
<http://pgp.mit.edu:11371/pks/lookup?search=0x484D3AF03B32FD38&op=index>
--
Henning Lorenz
The Swedish Scientific Drilling Program (www.ssdp.se), scientific coordinator
EPOS-Sweden (Swedish participation in EPOS-ERIC;www.epos-se.se), infrastructure
manager
Uppsala University
Department of Earth Sciences
Villavägen 16
752 36 Uppsala
Sweden
mobile: +46 (0) 701 679 320
e-mail:henning.lor...@geo.uu.se
GnuPG-key:
http://pgp.mit.edu:11371/pks/lookup?search=0x484D3AF03B32FD38&op=index
_______________________________________________
Geoserver-users mailing list
Please make sure you read the following two resources before posting to this
list:
- Earning your support instead of buying it, but Ian Turton:
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines:
http://geoserver.org/comm/userlist-guidelines.html
If you want to request a feature or an improvement, also see this:
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer
Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users