diff --git a/distro/changelog.xml b/distro/changelog.xml index 233af22..4fc7bd6 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -42,4 +42,9 @@ [Feature #4000] URI Resolver - must support HEAD request + + [Feature #4207] ri Resolver upgrade: it must support new Geonetwork Manager + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index af53ebe..0d3361f 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.gcube.data.transfer uri-resolver - 1.6.0-SNAPSHOT + 1.7.0-SNAPSHOT war The URI Resolver is an HTTP URI resolver implemented as an HTTP servlet which gives access trough HTTP to different protocols URIs. @@ -64,7 +64,7 @@ org.gcube.spatial.data geonetwork - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + [3.0.0-SNAPSHOT, 4.0.0-SNAPSHOT) compile @@ -97,11 +97,6 @@ - - log4j - log4j - 1.2.16 - org.slf4j slf4j-log4j12 diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java deleted file mode 100644 index a020cce..0000000 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.gcube.datatransfer.resolver.gis; - -import org.gcube.datatransfer.resolver.gis.entity.ServerParameters; -import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Apr 29, 2013 - * - */ -public class GeonetowrkAccessParameter implements GeonetworkServiceInterface{ - - - protected static Logger logger = LoggerFactory.getLogger(GeonetowrkAccessParameter.class); - - protected GeonetworkInstance geonetworkInstance; - - protected String scope; - - protected ServerParameters serverParam; - - - /** - * @param serverParam - */ - public GeonetowrkAccessParameter(String scope, ServerParameters serverParam) { - this.scope = scope; - this.serverParam = serverParam; - } - - /** - * @param geonetworkInstance - * @return - */ - public GeonetworkInstance getGeonetworkInstance(boolean authenticate) throws GeonetworkInstanceException { - return instanceGeonetwork(authenticate); - } - - private GeonetworkInstance instanceGeonetwork(boolean authenticate) throws GeonetworkInstanceException{ - - if(scope == null || scope.isEmpty()) - throw new GeonetworkInstanceException("Scope is null"); - - if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty()) - throw new GeonetworkInstanceException("Geonetwork url is null or empty"); - - if(geonetworkInstance==null) - geonetworkInstance = new GeonetworkInstance(scope, serverParam.getUrl(), serverParam.getUser(), serverParam.getPassword(), authenticate); - - return geonetworkInstance; - - - } - - public String getScope() { - return scope; - } -} diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java new file mode 100644 index 0000000..2ed127c --- /dev/null +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java @@ -0,0 +1,135 @@ +package org.gcube.datatransfer.resolver.gis; + +import org.gcube.datatransfer.resolver.gis.entity.ServerParameters; +import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; +import org.gcube.spatial.data.geonetwork.LoginLevel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * The Class GeonetworkAccessParameter. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ +public class GeonetworkAccessParameter implements GeonetworkServiceInterface{ + + + protected static Logger logger = LoggerFactory.getLogger(GeonetworkAccessParameter.class); + + protected GeonetworkInstance geonetworkInstance; + + protected String scope; + + protected ServerParameters serverParam; + + /** + * The Enum GeonetworkLoginLevel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ + public static enum GeonetworkLoginLevel { + DEFAULT, + SCOPE, + PRIVATE, + CKAN, + ADMIN + } + + /** + * Instantiates a new geonetowrk access parameter. + * + * @param scope the scope + * @param serverParam the server param + */ + public GeonetworkAccessParameter(String scope, ServerParameters serverParam) { + this.scope = scope; + this.serverParam = serverParam; + } + + + /* (non-Javadoc) + * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getGeonetworkInstance(boolean, org.gcube.datatransfer.resolver.gis.GeonetowrkAccessParameter.GeonetworkLoginLevel) + */ + public GeonetworkInstance getGeonetworkInstance(boolean authenticate, GeonetworkLoginLevel loginLevel) throws GeonetworkInstanceException { + return instanceGeonetwork(authenticate, loginLevel); + } + + /** + * Instance geonetwork. + * + * @param authenticate the authenticate + * @param loginLevel the login level + * @return the geonetwork instance + * @throws GeonetworkInstanceException the geonetwork instance exception + */ + private GeonetworkInstance instanceGeonetwork(boolean authenticate, GeonetworkLoginLevel loginLevel) throws GeonetworkInstanceException{ + + if(scope == null || scope.isEmpty()) + throw new GeonetworkInstanceException("Scope is null"); + + if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty()) + throw new GeonetworkInstanceException("Geonetwork url is null or empty"); + + LoginLevel level = toLoginLevel(loginLevel); + if(geonetworkInstance==null) + geonetworkInstance = new GeonetworkInstance(scope, authenticate, level); + + return geonetworkInstance; + + } + + + /* (non-Javadoc) + * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getGeonetworkInstance() + */ + @Override + public GeonetworkInstance getGeonetworkInstance() + throws Exception { + + if(scope == null || scope.isEmpty()) + throw new GeonetworkInstanceException("Scope is null"); + + if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty()) + throw new GeonetworkInstanceException("Geonetwork url is null or empty"); + + if(geonetworkInstance==null) + geonetworkInstance = new GeonetworkInstance(scope, false, null); + + return geonetworkInstance; + } + + /* (non-Javadoc) + * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getScope() + */ + public String getScope() { + return scope; + } + + + /** + * To login level. + * + * @param loginLevel the login level + * @return the login level + */ + public static final LoginLevel toLoginLevel(GeonetworkLoginLevel loginLevel){ + + switch (loginLevel) { + case ADMIN: + return LoginLevel.ADMIN; + case CKAN: + return LoginLevel.CKAN; + case DEFAULT: + return LoginLevel.DEFAULT; + case PRIVATE: + return LoginLevel.PRIVATE; + case SCOPE: + return LoginLevel.SCOPE; + } + return null; + + } +} diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java index 5deb930..5bfc41a 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java @@ -1,200 +1,164 @@ package org.gcube.datatransfer.resolver.gis; -import java.util.HashMap; -import java.util.Map; - +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; import org.gcube.spatial.data.geonetwork.GeoNetwork; import org.gcube.spatial.data.geonetwork.GeoNetworkPublisher; import org.gcube.spatial.data.geonetwork.LoginLevel; -import org.gcube.spatial.data.geonetwork.configuration.AuthorizationException; -import org.gcube.spatial.data.geonetwork.configuration.Configuration; +import org.gcube.spatial.data.geonetwork.model.faults.AuthorizationException; +import org.gcube.spatial.data.geonetwork.model.faults.MissingConfigurationException; +import org.gcube.spatial.data.geonetwork.model.faults.MissingServiceEndpointException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + + /** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Oct 7, 2014 + * The Class GeonetworkInstance. * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 */ public class GeonetworkInstance { private GeoNetworkPublisher geonetworkPublisher = null; - private String geoNetworkUrl; - private String geoNetworkUser = ""; - private String geoNetworkPwd = ""; - - private String scope = "noscope"; - + + /** + * Instantiates a new geonetwork instance. + */ public GeonetworkInstance(){} //FOR SERIALIZATION - + private Logger logger = LoggerFactory.getLogger(GeonetworkInstance.class); + private String scope; /** - * - * @param scope + * Instantiates a new geonetwork instance. + * + * @param scope the scope + * @throws GeonetworkInstanceException the geonetwork instance exception */ - public GeonetworkInstance(String scope){ - this.scope = scope; + public GeonetworkInstance(String scope) throws GeonetworkInstanceException{ + this(scope, false, null); } - - /** - * Creates a new configuration for Gis publisher with parameters passed in input. By default executes the login as user passed in input on geonetwork instance - * @param scope - * @param geoNetworkUrl - * @param user - * @param pwd - * @param geoserverUrl - * @param geoserverUser - * @param geoserverPwd - * @param httpSession - * @throws Exception - */ - public GeonetworkInstance(String scope, String geoNetworkUrl, String user, String pwd, boolean authenticate) throws GeonetworkInstanceException { - logger.trace("Instancing GeonetworkInstance with specific parameters"); - this.geoNetworkUser = user; - this.geoNetworkPwd = pwd; - this.geoNetworkUrl = geoNetworkUrl; - this.scope = scope; - try { - createInstance(authenticate); - } catch (Exception e) { - String message = "Sorry, an error occurred in instancing geonetwork"; - logger.warn(message, e); - throw new GeonetworkInstanceException(message); - } - } - - /** - * - * @param authenticate - * @throws Exception - */ - private void createInstance(boolean authenticate) throws GeonetworkInstanceException { - this.geonetworkPublisher = GeoNetwork.get(new GeonetworkConfiguration()); - authenticateOnGeoenetwork(authenticate); - } - - /** - * - * @param authenticate - * @throws Exception - */ - public void authenticateOnGeoenetwork(boolean authenticate) throws GeonetworkInstanceException { - - logger.trace("authenticating.. geonetworkPublisher is null? "+(this.geonetworkPublisher==null)); - if(geonetworkPublisher==null){ - logger.trace("skipping authentication.. please createInstace"); - return; - } - - if (authenticate){ - try { - this.geonetworkPublisher.login(LoginLevel.DEFAULT); - } catch (AuthorizationException e) { - logger.error("authentication on geonetwork failed ",e); - throw new GeonetworkInstanceException("Geonetwork authentication failed"); - } - logger.trace("authentication on geonetwork completed"); - } - } - - /** * Creates a new configuration for Gis publisher with parameter passed in input. Executes the login on geonetwork instance if authenticate param is true, no otherwise - * - * @param geoNetworkUrl - * @param user - * @param pwd - * @throws Exception + * Use scope found in ScopeProvider + * @param authenticate the authenticate + * @param level the level + * @throws Exception the exception */ - public GeonetworkInstance(String geoNetworkUrl, String user, String pwd, boolean authenticate) throws Exception { + public GeonetworkInstance(boolean authenticate, LoginLevel level) throws Exception { try { - this.geoNetworkUrl = geoNetworkUrl; - this.geoNetworkUser = user; - this.geoNetworkPwd = pwd; - - createInstance(authenticate); - + createInstanceGeonetworkPublisher(authenticate, level); } catch (Exception e) { logger.error("Sorry, an error occurred in getting geonetwork instance",e); throw new Exception("Sorry, an error occurred in getting geonetwork instance",e); } } - - public class GeonetworkConfiguration implements Configuration { - - public Map pwds=new HashMap(); - public Map usrs=new HashMap(); - - @Override - public String getGeoNetworkEndpoint() { - logger.trace("geoNetworkUrl is: "+geoNetworkUrl); - return geoNetworkUrl; - } - - @Override - public Map getGeoNetworkPasswords() { - pwds.put(LoginLevel.DEFAULT, geoNetworkPwd); - logger.trace("geoNetworkPwd is: "+geoNetworkPwd); - return pwds; - } - - @Override - public Map getGeoNetworkUsers() { - usrs.put(LoginLevel.DEFAULT, geoNetworkUser); - logger.trace("geoNetworkUser is: "+geoNetworkUser); - return usrs; - } - - @Override - public int getScopeGroup() { - return 2; + /** + * Instantiates a new geonetwork instance. + * set the scope provider to input scope + * @param scope the scope + * @param authenticate the authenticate + * @param level the level + * @throws GeonetworkInstanceException the geonetwork instance exception + */ + public GeonetworkInstance(String scope, boolean authenticate, LoginLevel level) throws GeonetworkInstanceException { + logger.trace("Instancing GeonetworkInstance with specific parameters"); + this.scope = scope; + try { + ScopeProvider.instance.set(scope); + logger.info("setting scope "+scope); + createInstanceGeonetworkPublisher(authenticate, level); + } catch (Exception e) { + String message = "Sorry, an error occurred in instancing geonetwork"; + logger.warn(message, e); + throw new GeonetworkInstanceException(message); + }finally{ + logger.info("resetting scope"); + ScopeProvider.instance.reset(); } } + /** + * Creates the instance geonetwork publisher. + * + * @param authenticate the authenticate + * @param level the level + * @throws Exception the exception + */ + private void createInstanceGeonetworkPublisher(boolean authenticate, LoginLevel level) throws Exception { + this.geonetworkPublisher = GeoNetwork.get(); + if(authenticate && level!=null) + authenticateOnGeoenetwork(level); + } + + /** + * Authenticate on geoenetwork. + * + * @param level the level + * @throws GeonetworkInstanceException the geonetwork instance exception + */ + private void authenticateOnGeoenetwork(LoginLevel level) throws GeonetworkInstanceException { + + logger.trace("authenticating.. geonetworkPublisher is null? "+(this.geonetworkPublisher==null)); + if(geonetworkPublisher==null){ + logger.trace("skipping authentication.. please createInstace"); + return; + } + + try { + try { + this.geonetworkPublisher.login(level); + } + catch (MissingConfigurationException | MissingServiceEndpointException e) { + logger.error("MissingConfigurationException | MissingServiceEndpointException exception ", e); + throw new GeonetworkInstanceException("Geonetwork authentication failed"); + } + } catch (AuthorizationException e) { + logger.error("AuthorizationException ",e); + throw new GeonetworkInstanceException("Geonetwork authentication failed"); + } + logger.trace("authentication on geonetwork completed"); + + } + + + + + /** + * Gets the geonetwork publisher. + * + * @return the geonetwork publisher + */ public GeoNetworkPublisher getGeonetworkPublisher() { return geonetworkPublisher; } - public String getGeoNetworkUrl() { - return geoNetworkUrl; - } - - public String getGeoNetworkUser() { - return geoNetworkUser; - } - - public String getGeoNetworkPwd() { - return geoNetworkPwd; - } + /** + * Gets the scope. + * + * @return the scope + */ public String getScope() { + return scope; } - public void setScope(String scope) { - this.scope = scope; - } - + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ @Override public String toString() { + StringBuilder builder = new StringBuilder(); builder.append("GeonetworkInstance [geonetworkPublisher="); builder.append(geonetworkPublisher); - builder.append(", geoNetworkUrl="); - builder.append(geoNetworkUrl); - builder.append(", geoNetworkUser="); - builder.append(geoNetworkUser); - builder.append(", geoNetworkPwd="); - builder.append(geoNetworkPwd); builder.append(", scope="); builder.append(scope); - builder.append(", logger="); - builder.append(logger); builder.append("]"); return builder.toString(); } diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java index 89af619..2c5a9aa 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java @@ -3,6 +3,8 @@ */ package org.gcube.datatransfer.resolver.gis; +import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter.GeonetworkLoginLevel; + /** * The Interface GeonetworkServiceInterface. * @@ -15,10 +17,21 @@ public interface GeonetworkServiceInterface { * Gets the geonetwork instance. * * @param authenticate the authenticate + * @param loginLevel the login level * @return the geonetwork instance * @throws Exception the exception */ - public GeonetworkInstance getGeonetworkInstance(boolean authenticate) throws Exception; + public GeonetworkInstance getGeonetworkInstance(boolean authenticate, GeonetworkLoginLevel loginLevel) throws Exception; + + + + /** + * Gets the geonetwork instance. + * + * @return the geonetwork instance + * @throws Exception the exception + */ + public GeonetworkInstance getGeonetworkInstance() throws Exception; /** * Gets the scope. diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java index 3df4097..24564e6 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java @@ -21,6 +21,7 @@ import org.apache.commons.io.IOUtils; import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileReader; import org.gcube.datatransfer.resolver.applicationprofile.ScopeUtil; import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader.GEO_SERVICE; +import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter.GeonetworkLoginLevel; import org.gcube.datatransfer.resolver.gis.entity.ServerParameters; import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; import org.gcube.datatransfer.resolver.gis.exception.IllegalArgumentException; @@ -280,8 +281,8 @@ public class GisResolver extends HttpServlet{ protected String getLayerWmsRequest(String scope, String gisUUID, ServerParameters geonetworkParams) throws Exception{ try { - GeonetworkServiceInterface gntwAccess = new GeonetowrkAccessParameter(scope, geonetworkParams); - return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID); + GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scope, geonetworkParams); + return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true, GeonetworkLoginLevel.DEFAULT), gisUUID); }catch (GeonetworkInstanceException e){ logger.error("An error occurred when instancing geonetowrk gis layer with UUID "+gisUUID, e); throw new IllegalArgumentException("Sorry, An error occurred when instancing geonetwork with UUID: "+gisUUID); diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java b/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java index 6baf726..20d0353 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java @@ -1,9 +1,9 @@ /** - * + * */ package org.gcube.datatransfer.resolver.gis.exception; -import org.gcube.spatial.data.geonetwork.configuration.AuthorizationException; +import org.gcube.spatial.data.geonetwork.model.faults.AuthorizationException; /** @@ -22,7 +22,7 @@ public class GeonetworkInstanceException extends Exception { public GeonetworkInstanceException() { super(); } - + /** * Instantiates a new geonetwork instance exception. * diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java index 41ab8f8..22be5cb 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java @@ -26,14 +26,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader; import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader.GEO_SERVICE; -import org.gcube.datatransfer.resolver.gis.GeonetowrkAccessParameter; +import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter; +import org.gcube.datatransfer.resolver.gis.GeonetworkInstance; import org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface; -import org.gcube.datatransfer.resolver.gis.MetadataConverter; import org.gcube.datatransfer.resolver.gis.entity.ServerParameters; -import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException; import org.gcube.datatransfer.resolver.gis.exception.IllegalArgumentException; +import org.gcube.spatial.data.geonetwork.configuration.Configuration; +import org.gcube.spatial.data.geonetwork.model.Account; +import org.gcube.spatial.data.geonetwork.model.Account.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -249,6 +252,17 @@ public class GeonetworkResolver extends HttpServlet{ try { ServerParameters geonetworkParams = getGeonetworkCachedServerParameters(scope); + + GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scope, geonetworkParams); + GeonetworkInstance gnInstance = gntwAccess.getGeonetworkInstance(); + + ScopeProvider.instance.set(scope); + logger.info("set scope provider "+scope); + Configuration config = gnInstance.getGeonetworkPublisher().getConfiguration(); + Account account=config.getScopeConfiguration().getAccounts().get(Type.CKAN); + logger.info("CKAN user is: "+account.getUser()); +// return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID); + HTTPCallsUtils httpUtils = new HTTPCallsUtils(); logger.info("Parameters.."); for (Enumeration e = req.getParameterNames(); e.hasMoreElements();){ @@ -261,8 +275,11 @@ public class GeonetworkResolver extends HttpServlet{ // logger.debug("doPost read body request: "+readBody); ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); - boolean authorized = GNAuthentication.login(httpUtils, geonetworkParams.getUrl(), geonetworkParams.getUser(), geonetworkParams.getPassword()); - logger.trace("Authorized on "+geonetworkParams +" ? "+authorized); + if(account.getUser()!=null){ + boolean authorized = GNAuthentication.login(httpUtils, geonetworkParams.getUrl(), account.getUser(), account. getPassword()); + logger.trace("Authorized on "+geonetworkParams +" ? "+authorized); + }else + logger.info("Skipping authentication ckan user is null"); // SPECIFIC HANDLER FOR GEONETWORK REQUEST: /srv/en/mef.export String gnCSWlURL; @@ -322,6 +339,9 @@ public class GeonetworkResolver extends HttpServlet{ String error = "Sorry, an error occurred on resolving geonetwork request with scope "+scope+". Please, contact support!"; sendError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, error); return; + }finally{ + ScopeProvider.instance.reset(); + logger.info("scope provider reset"); } } @@ -340,8 +360,8 @@ public class GeonetworkResolver extends HttpServlet{ logger.info("Tentative for recovering geonetwork server parameters from cache with scope: "+scope); ServerParameters serverParam = cacheGNServerParams.get(scope); - if(serverParam==null){ - logger.info("Cache having null Geonetwork server parameters, reading from IS.."); + if(serverParam==null || serverParam.getPassword()!=null){ + logger.info("Cache having null Geonetwork server parameters or password 'null', reading from IS.."); GeoRuntimeReader reader = new GeoRuntimeReader(); try { serverParam = reader.retrieveGisParameters(scope, GEO_SERVICE.GEONETWORK); @@ -383,29 +403,6 @@ public class GeonetworkResolver extends HttpServlet{ logger.info("Reset of Cache Geonetwork server params perfomed!"); } - /** - * Gets the layer wms request. - * - * @param scope the scope - * @param gisUUID the gis uuid - * @param geonetworkParams the geonetwork params - * @return the layer wms request - * @throws Exception the exception - */ - protected String getLayerWmsRequest(String scope, String gisUUID, ServerParameters geonetworkParams) throws Exception{ - - try { - GeonetworkServiceInterface gntwAccess = new GeonetowrkAccessParameter(scope, geonetworkParams); - return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID); - }catch (GeonetworkInstanceException e){ - logger.error("An error occurred when instancing geonetowrk gis layer with UUID "+gisUUID, e); - throw new IllegalArgumentException("Sorry, An error occurred when instancing geonetwork with UUID: "+gisUUID); - } catch (Exception e) { - logger.error("An error occurred when retrieving gis layer with UUID "+gisUUID, e); - throw new IllegalArgumentException("Sorry, An error occurred when retrieving gis layer with UUID "+gisUUID); - } - } - /** * Send error. *