Index: modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/sdo/SDO.java =================================================================== --- modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/sdo/SDO.java (revision 38659) +++ modules/plugin/jdbc/jdbc-oracle/src/main/java/org/geotools/data/oracle/sdo/SDO.java (working copy) @@ -1722,7 +1722,9 @@ final int STARTING_OFFSET = STARTING_OFFSET(elemInfo, triplet); final int ENDING_OFFSET = STARTING_OFFSET(elemInfo, triplet + 1); // -1 for end - if ((STARTING_OFFSET == 1) && (ENDING_OFFSET == -1)) { + final int TT = SDO.TT(GTYPE); + + if ((STARTING_OFFSET == 1) && (ENDING_OFFSET == -1) && (TT != 3)) { // Use all Cordiantes return coords; } @@ -1732,6 +1734,15 @@ int end = (ENDING_OFFSET != -1) ? ((ENDING_OFFSET - 1) / LEN) : coords.size(); + /** Ensure that Oracle Polygons are closed linestrings **/ + if ((TT == 3) || (TT == 7)){ + final int myend = end - 1; + LOGGER.finest ("start: " + start + " ["+coords.getOrdinate(start,0)+";"+coords.getOrdinate(start,1)+"]" ); + LOGGER.finest ("end: " + myend + " ["+coords.getOrdinate(myend,0)+";"+coords.getOrdinate(myend,1)+"]" ); + coords.setOrdinate(myend,0,coords.getOrdinate(start,0)); + coords.setOrdinate(myend,1,coords.getOrdinate(start,1)); + LOGGER.finest ("newEnd: " + myend + " ["+coords.getOrdinate(myend,0)+";"+coords.getOrdinate(myend,1)+"]" ); + } return subList(factory, coords, start, end); } @@ -1759,7 +1770,6 @@ if ((start == 0) && (end == coords.size())) { return coords; } - return Coordinates.subList(factory, coords, start, end); } Index: modules/plugin/jdbc/jdbc-oracle/pom.xml =================================================================== --- modules/plugin/jdbc/jdbc-oracle/pom.xml (revision 38659) +++ modules/plugin/jdbc/jdbc-oracle/pom.xml (working copy) @@ -117,5 +117,9 @@ + + + UTF-8 +