GeoServer – create a datastore programmatically

Martin Zeller GeoServer, java 2 Comments

Currently I am programming an upload module for GeoServer 2.1-RC2. The user should be able to upload a shape file which is automatically installed as datastore in the default workspace. For this intention I didn’t want to use the REST-API of GeoServer, I wanted to create the data store  programmatically.

The following piece of code adds a ShapeFile data store to GeoServer:

private boolean addShapeFileDataStore(String title, String description, String pathToFile)  {
		final Catalog catalog = getCatalog();
        DataStoreInfo dsInfo = catalog.getFactory().createDataStore();
        dsInfo.getConnectionParameters().put("create spatial index", true);
        dsInfo.getConnectionParameters().put("charset", "ISO-8859-1");
        dsInfo.getConnectionParameters().put("filetype", "shapefile");
        dsInfo.getConnectionParameters().put("cache and reuse memory maps", true);
        dsInfo.getConnectionParameters().put("url", "file:" + pathToFile);
        dsInfo.getConnectionParameters().put("namespace", "");
        try {
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, "Error adding data store to catalog", e);
        return true;

It’s quite simple. With this code you can add every kind of data store to GeoServer – all you need to know are the connection parameters. If you do not know the parameters of your kind of data store just create such a data store and write the connection parameters to your log file. You could use the following function:

private void LogDataStoreData(String dataStoreName) {
		final Catalog catalog = getCatalog();
        DataStoreInfo ds = catalog.getDataStoreByName(dataStoreName);
        if (ds!=null)
            Map<String,Serializable> conMap = ds.getConnectionParameters();
            LOGGER.finest("Id: " + ds.getId());
            LOGGER.finest("Name: " + ds.getName());
            LOGGER.finest("Description: " + ds.getDescription());
            LOGGER.finest("Type: " + ds.getType());
            LOGGER.finest("Connection parameters:");

            for(String key : conMap.keySet())
                LOGGER.finest("\t" + key + ": " + conMap.get(key));

Comments 2

  1. It says that “getCatalog() isn’t defined” and “LOGGER cannot be resolved”… I am not good at Java so could you please explain how to solve these errors ?

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.