rule based sld error while publishing geopacakge

Description

Hi all,

When publishing a layer from geopackage, and the SLD contains a rule, then it may raise an exception while rendering. This happens randomly. I've found this behaviour with line and polygon layers so far.

The same sld works perfectly when publishing the equivalent table from other datasources, such as sql server.

Sample rule:

<ogcropertyIsEqualTo>
<ogcropertyName>DESCRIPTIO</ogcropertyName>
<ogc:Literal>UNDIFFERENTIATED FAULT</ogc:Literal>
</ogcropertyIsEqualTo>

Exception raised:

2018-05-24 16:19:42,773 TRACE [org.geotools.util] - Error applying the converter class org.geotools.util.GeometryConverterFactory$1 on (UNDIFFERENTIATED FAULT,class com.vividsolutions.jts.geom.MultiLineString)
com.vividsolutions.jts.io.ParseException: Unknown geometry type: UNDIFFERENTIATED
at org.geotools.geometry.jts.WKTReader2.readGeometryTaggedText(WKTReader2.java:422)
at org.geotools.geometry.jts.WKTReader2.read(WKTReader2.java:151)
at org.geotools.geometry.jts.WKTReader2.read(WKTReader2.java:120)
at org.geotools.util.GeometryConverterFactory$1.convert(GeometryConverterFactory.java:56)
at org.geotools.util.Converters.convert(Converters.java:168)
at org.geotools.util.Converters.convert(Converters.java:129)
at org.geotools.feature.FeatureBuilder.convert(FeatureBuilder.java:65)

Looking at the code:

private Geometry readGeometryTaggedText() throws IOException, ParseException {
String type = null;

try{
type = getNextWord();
}catch(IOException e){
return null;
}catch(ParseException e){
return null;
}

if (type.equalsIgnoreCase("POINT")) {
return readPointText();
}
else if (type.equalsIgnoreCase("LINESTRING")) {
return readLineStringText();
}
else if (type.equalsIgnoreCase("LINEARRING")) {
return readLinearRingText();
}
else if (type.equalsIgnoreCase("POLYGON")) {
return readPolygonText();
}
else if (type.equalsIgnoreCase("MULTIPOINT")) {
return readMultiPointText();
}
else if (type.equalsIgnoreCase("MULTILINESTRING")) {
return readMultiLineStringText();
}
else if (type.equalsIgnoreCase("MULTIPOLYGON")) {
return readMultiPolygonText();
}
else if (type.equalsIgnoreCase("GEOMETRYCOLLECTION")) {
return readGeometryCollectionText();
}
throw new ParseException("Unknown geometry type: " + type);
}

In conclusion, it seems that somehow the function is being given the data value related to the rule instead the geometry type. Please note the coincidence "Unknown geometry type: UNDIFFERENTIATED" and the literal in the rule.

Environment

Geoserver 2.13.0 deployed on Tomcat 9.0.7 + JRE 8u172. Windows server 2016

Activity

Show:
Andrea Aime
June 3, 2018, 7:08 AM

Thank you! Let us know about your progress.

Sebastián Vázquez Cascales
June 4, 2018, 12:34 AM
Edited

Hi there,

Finally I could manage to create the necessary files to reproduce the exception. Names and data are a little different than those formerly mentioned though. However, it is the same behaviour.

Hope this helps.

Best regards

Sebastián

Andrea Aime
June 10, 2018, 10:04 AM

Should have been solved, I can now display the map.
Would be useful if you could confirm, running a nightly build from:
https://build.geoserver.org/geoserver/
Make sure you pick a build labelled June 11th or later.

Sebastián Vázquez Cascales
June 18, 2018, 11:35 AM
Edited

Thank you so much, Andrea.

I've tested the sample I gave you and it works! As it is stated, hopefully it will be included in version 2.13.2

Best regards

Sebastián

Andrea Aime
June 18, 2018, 11:48 AM

Yes, it should be part of 2.13.2

Assignee

Andrea Aime

Reporter

Sebastián Vázquez Cascales

Triage

Fix versions

Affects versions

Components

Priority

Medium
Configure