Hi everyone,

I wanted to ask about the best way to add encryption settings to the SQL
Server extension for geoserver 2.16 (on a windows 2012 server using
tomcat).  I was able to unpack the JAR file, modify the java file, however,
I seem to be having compiling issues on windows command prompt.  What is
considered best practice for customizing extensions?

Here is the modified java file:

 package org.geotools.data.sqlserver;

import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import org.geotools.data.DataAccessFactory;
import org.geotools.jdbc.JDBCDataStore;
import org.geotools.jdbc.JDBCDataStoreFactory;
import org.geotools.jdbc.SQLDialect;





















public class SQLServerDataStoreFactory
  extends JDBCDataStoreFactory
{
  public static final DataAccessFactory.Param DBTYPE = new
DataAccessFactory.Param("dbtype", String.class, "Type", true, "sqlserver",






      Collections.singletonMap("level", "program"));





  public static final DataAccessFactory.Param INTSEC = new
DataAccessFactory.Param("Integrated Security", Boolean.class, "Login as
current windows user account. Works only in windows. Ignores user and
password settings.", false, Boolean.FALSE);








  public static final DataAccessFactory.Param NATIVE_PAGING = new
DataAccessFactory.Param("Use Native Paging", Boolean.class, "Use native
paging for sql queries. For some sets of data, native paging can have a
performance impact.", false, Boolean.TRUE);








  public static final DataAccessFactory.Param GEOMETRY_METADATA_TABLE = new
DataAccessFactory.Param("Geometry metadata table", String.class, "The
optional table containing geometry metadata (geometry type and srid). Can
be expressed as 'schema.name' or just 'name'", false);







  public static final DataAccessFactory.Param NATIVE_SERIALIZATION = new
DataAccessFactory.Param("Use native geometry serialization", Boolean.class,
"Use native SQL Server serialization, or WKB serialization.", false,
Boolean.FALSE);








  public static final DataAccessFactory.Param FORCE_SPATIAL_INDEX = new
DataAccessFactory.Param("Force spatial index usage via hints",
Boolean.class, "When enabled, spatial filters will be accompained by a WITH
INDEX sql hint forcing the usage of the spatial index.", false,
Boolean.FALSE);








  public static final DataAccessFactory.Param TABLE_HINTS = new
DataAccessFactory.Param("Table hints", String.class, "These table hints
will be added to every select query.", false, "");



  public static final DataAccessFactory.Param ENCRYPT = new
DataAccessFactory.Param(
                    "Encryption",
                    String.class,
                    "This will enforce TLS encryption in the sql server
connection.",
                    true,
                    "");





  public static final DataAccessFactory.Param PORT = new
DataAccessFactory.Param("port", Integer.class, "Port", false);


  public static final DataAccessFactory.Param INSTANCE = new
DataAccessFactory.Param("instance", String.class, "Instance Name", false);




  protected SQLDialect createSQLDialect(JDBCDataStore dataStore) { return
new SQLServerDialect(dataStore); }




  protected String getDatabaseID() { return (String)DBTYPE.sample; }




  public String getDescription() { return "Microsoft SQL Server"; }




  protected String getDriverClassName() { return
"com.microsoft.sqlserver.jdbc.SQLServerDriver"; }




  protected String getValidationQuery() { return "select 1"; }




  protected void setupParameters(Map parameters) {
    super.setupParameters(parameters);
    parameters.put(PORT.key, PORT);
    parameters.put(DBTYPE.key, DBTYPE);
    parameters.put(INTSEC.key, INTSEC);
    parameters.put(NATIVE_PAGING.key, NATIVE_PAGING);
    parameters.put(NATIVE_SERIALIZATION.key, NATIVE_SERIALIZATION);
    parameters.put(GEOMETRY_METADATA_TABLE.key, GEOMETRY_METADATA_TABLE);
    parameters.put(FORCE_SPATIAL_INDEX.key, FORCE_SPATIAL_INDEX);
    parameters.put(TABLE_HINTS.key, TABLE_HINTS);
    parameters.put(INSTANCE.key, INSTANCE);
parameters.put(ENCRYPT.key, ENCRYPT);
  }




  protected String getJDBCUrl(Map params) throws IOException {
    String host = (String)HOST.lookUp(params);
    Integer port = (Integer)PORT.lookUp(params);
    String db = (String)DATABASE.lookUp(params);
    String instance = (String)INSTANCE.lookUp(params);

    String url = "jdbc:" + getDatabaseID() + "://" + host;
    if (port != null) {
      url = url + ":" + port;
    } else if (instance != null) {
      url = url + "\\" + instance;
    }

    if (db != null) {
      url = url + "/" + db;
    }
    Boolean EncryptBool = (Boolean) ENCRYPT.lookUp(params);
    Boolean intsec = (Boolean)INTSEC.lookUp(params);
    if (db != null)
    {
      url = url.substring(0, url.lastIndexOf("/")) + ((db != null) ?
(";DatabaseName=" + db) : "");
    }


    if (intsec != null && intsec.booleanValue()) {
      url = url + ";integratedSecurity=true";
    }

if (EncryptBool != null && EncryptBool.booleanValue()) {
            url = url + ";encrypt=true;trustServerCertificate=false;";
}
    return url;
  }



  public boolean canProcess(Map params) {
    if (!super.canProcess(params)) {
      return false;
    }
    Integer port = null;
    String instance = null;
    try {
      port = (Integer)PORT.lookUp(params);
      instance = (String)INSTANCE.lookUp(params);
    } catch (IOException iOException) {}




    return (port != null || instance != null);
  }



  protected JDBCDataStore createDataStoreInternal(JDBCDataStore dataStore,
Map params) throws IOException {
    SQLServerDialect dialect = (SQLServerDialect)dataStore.getSQLDialect();


    String metadataTable = (String)GEOMETRY_METADATA_TABLE.lookUp(params);
    dialect.setGeometryMetadataTable(metadataTable);


    Boolean useNativePaging = (Boolean)NATIVE_PAGING.lookUp(params);
    dialect.setUseOffSetLimit(Boolean.valueOf((useNativePaging == null ||
Boolean.TRUE.equals(useNativePaging))));


    Boolean useNativeSerialization =
(Boolean)NATIVE_SERIALIZATION.lookUp(params);
    if (useNativeSerialization != null) {
      dialect.setUseNativeSerialization(useNativeSerialization);
    }


    Boolean forceSpatialIndexes =
(Boolean)FORCE_SPATIAL_INDEX.lookUp(params);
    if (forceSpatialIndexes != null) {
      dialect.setForceSpatialIndexes(forceSpatialIndexes.booleanValue());
    }

    String tableHints = (String)TABLE_HINTS.lookUp(params);
    if (tableHints != null) {
      dialect.setTableHints(tableHints);
    }

    return dataStore;
  }
}

**************END OF JAVA***************
Here is the error log for recompiling:

C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:6:
error: cannot find symbol
/*     */ import org.geotools.data.DataAccessFactory;
                                  ^
  symbol:   class DataAccessFactory
  location: package org.geotools.data
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:7:
error: package org.geotools.jdbc does not exist
/*     */ import org.geotools.jdbc.JDBCDataStore;
                                  ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:8:
error: package org.geotools.jdbc does not exist
/*     */ import org.geotools.jdbc.JDBCDataStoreFactory;
                                  ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:9:
error: package org.geotools.jdbc does not exist
/*     */ import org.geotools.jdbc.SQLDialect;
                                  ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:32:
error: cannot find symbol
/*     */   extends JDBCDataStoreFactory
                    ^
  symbol: class JDBCDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:34:
error: package DataAccessFactory does not exist
/*  34 */   public static final DataAccessFactory.Param DBTYPE = new
DataAccessFactory.Param("dbtype", String.class, "Type", true, "sqlserver",
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:47:
error: package DataAccessFactory does not exist
/*  47 */   public static final DataAccessFactory.Param INTSEC = new
DataAccessFactory.Param("Integrated Security", Boolean.class, "Login as
current windows user account. Works only in windows. Ignores user and
password settings.", false, Boolean.FALSE);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:56:
error: package DataAccessFactory does not exist
/*  56 */   public static final DataAccessFactory.Param NATIVE_PAGING = new
DataAccessFactory.Param("Use Native Paging", Boolean.class, "Use native
paging for sql queries. For some sets of data, native paging can have a
performance impact.", false, Boolean.TRUE);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:65:
error: package DataAccessFactory does not exist
/*  65 */   public static final DataAccessFactory.Param
GEOMETRY_METADATA_TABLE = new DataAccessFactory.Param("Geometry metadata
table", String.class, "The optional table containing geometry metadata
(geometry type and srid). Can be expressed as 'schema.name' or just
'name'", false);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:73:
error: package DataAccessFactory does not exist
/*  73 */   public static final DataAccessFactory.Param
NATIVE_SERIALIZATION = new DataAccessFactory.Param("Use native geometry
serialization", Boolean.class, "Use native SQL Server serialization, or WKB
serialization.", false, Boolean.FALSE);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:82:
error: package DataAccessFactory does not exist
/*  82 */   public static final DataAccessFactory.Param FORCE_SPATIAL_INDEX
= new DataAccessFactory.Param("Force spatial index usage via hints",
Boolean.class, "When enabled, spatial filters will be accompained by a WITH
INDEX sql hint forcing the usage of the spatial index.", false,
Boolean.FALSE);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:91:
error: package DataAccessFactory does not exist
/*  91 */   public static final DataAccessFactory.Param TABLE_HINTS = new
DataAccessFactory.Param("Table hints", String.class, "These table hints
will be added to every select query.", false, "");
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:96:
error: package DataAccessFactory does not exist
/*     */   public static final DataAccessFactory.Param ENCRYPT = new
DataAccessFactory.Param(
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:105:
error: package DataAccessFactory does not exist
/* 100 */   public static final DataAccessFactory.Param PORT = new
DataAccessFactory.Param("port", Integer.class, "Port", false);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:108:
error: package DataAccessFactory does not exist
/* 103 */   public static final DataAccessFactory.Param INSTANCE = new
DataAccessFactory.Param("instance", String.class, "Instance Name", false);
                                                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:113:
error: cannot find symbol
/* 108 */   protected SQLDialect createSQLDialect(JDBCDataStore dataStore)
{ return new SQLServerDialect(dataStore); }
                                                  ^
  symbol:   class JDBCDataStore
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:113:
error: cannot find symbol
/* 108 */   protected SQLDialect createSQLDialect(JDBCDataStore dataStore)
{ return new SQLServerDialect(dataStore); }
                      ^
  symbol:   class SQLDialect
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:211:
error: cannot find symbol
/*     */   protected JDBCDataStore createDataStoreInternal(JDBCDataStore
dataStore, Map params) throws IOException {
                                                            ^
  symbol:   class JDBCDataStore
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:211:
error: cannot find symbol
/*     */   protected JDBCDataStore createDataStoreInternal(JDBCDataStore
dataStore, Map params) throws IOException {
                      ^
  symbol:   class JDBCDataStore
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:34:
error: package DataAccessFactory does not exist
/*  34 */   public static final DataAccessFactory.Param DBTYPE = new
DataAccessFactory.Param("dbtype", String.class, "Type", true, "sqlserver",

          ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:47:
error: package DataAccessFactory does not exist
/*  47 */   public static final DataAccessFactory.Param INTSEC = new
DataAccessFactory.Param("Integrated Security", Boolean.class, "Login as
current windows user account. Works only in windows. Ignores user and
password settings.", false, Boolean.FALSE);

          ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:56:
error: package DataAccessFactory does not exist
/*  56 */   public static final DataAccessFactory.Param NATIVE_PAGING = new
DataAccessFactory.Param("Use Native Paging", Boolean.class, "Use native
paging for sql queries. For some sets of data, native paging can have a
performance impact.", false, Boolean.TRUE);

                 ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:65:
error: package DataAccessFactory does not exist
/*  65 */   public static final DataAccessFactory.Param
GEOMETRY_METADATA_TABLE = new DataAccessFactory.Param("Geometry metadata
table", String.class, "The optional table containing geometry metadata
(geometry type and srid). Can be expressed as 'schema.name' or just
'name'", false);

                           ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:73:
error: package DataAccessFactory does not exist
/*  73 */   public static final DataAccessFactory.Param
NATIVE_SERIALIZATION = new DataAccessFactory.Param("Use native geometry
serialization", Boolean.class, "Use native SQL Server serialization, or WKB
serialization.", false, Boolean.FALSE);

                        ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:82:
error: package DataAccessFactory does not exist
/*  82 */   public static final DataAccessFactory.Param FORCE_SPATIAL_INDEX
= new DataAccessFactory.Param("Force spatial index usage via hints",
Boolean.class, "When enabled, spatial filters will be accompained by a WITH
INDEX sql hint forcing the usage of the spatial index.", false,
Boolean.FALSE);

                       ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:91:
error: package DataAccessFactory does not exist
/*  91 */   public static final DataAccessFactory.Param TABLE_HINTS = new
DataAccessFactory.Param("Table hints", String.class, "These table hints
will be added to every select query.", false, "");

               ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:96:
error: package DataAccessFactory does not exist
/*     */   public static final DataAccessFactory.Param ENCRYPT = new
DataAccessFactory.Param(

           ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:105:
error: package DataAccessFactory does not exist
/* 100 */   public static final DataAccessFactory.Param PORT = new
DataAccessFactory.Param("port", Integer.class, "Port", false);

        ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:108:
error: package DataAccessFactory does not exist
/* 103 */   public static final DataAccessFactory.Param INSTANCE = new
DataAccessFactory.Param("instance", String.class, "Instance Name", false);

            ^
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:139:
error: cannot find symbol
/* 134 */     super.setupParameters(parameters);
              ^
  symbol:   variable super
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:156:
error: cannot find symbol
/* 150 */     String host = (String)HOST.lookUp(params);
                                    ^
  symbol:   variable HOST
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:158:
error: cannot find symbol
/* 152 */     String db = (String)DATABASE.lookUp(params);
                                  ^
  symbol:   variable DATABASE
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:193:
error: cannot find symbol
/* 183 */     if (!super.canProcess(params)) {
                   ^
  symbol:   variable super
  location: class SQLServerDataStoreFactory
C:\Users\dcolombini\Downloads\geoserver-2.16.0-sqlserver-plugin\gt-jdbc-sqlserver-22.0.zip.src\org\geotools\data\sqlserver\SQLServerDataStoreFactory.java:216:
error: cannot access BasicSQLDialect
/* 206 */     dialect.setGeometryMetadataTable(metadataTable);
                     ^
  class file for org.geotools.jdbc.BasicSQLDialect not found
34 errors



Thank you for any assistance,

*David Colombini*
Environmental Data Specialist
...........................................................................

*AKRF, INC.*
*Environmental, Planning, and Engineering Consultants*

440 Park Ave South , 7th Floor   |    New York , NY 10016
P) 646.388.9595 (x1595)

www.akrf.com
_______________________________________________
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

Reply via email to