Ok, thank you for this information.
The immediate follow-up question is whether this is the end of
app-schema feature-chaining? Where else do multiple id columns come from
if not from several tables?(though I am not sure why I have 3 id columns
when the service is only based on two tables that are
"feature-chained"). I just hope that this is not the case.
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