From: <jos...@us...> - 2011-05-19 13:26:46
|
Revision: 7747 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=7747&view=rev Author: josegar74 Date: 2011-05-19 13:26:36 +0000 (Thu, 19 May 2011) Log Message: ----------- Simple fallback mechanism for CSW harvester if preferred http method fails Modified Paths: -------------- branches/2.6.x/web/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Harvester.java Modified: branches/2.6.x/web/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Harvester.java =================================================================== --- branches/2.6.x/web/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Harvester.java 2011-05-19 13:11:27 UTC (rev 7746) +++ branches/2.6.x/web/src/main/java/org/fao/geonet/kernel/harvest/harvester/csw/Harvester.java 2011-05-19 13:26:36 UTC (rev 7747) @@ -177,71 +177,26 @@ CswOperation oper = server.getOperation(CswServer.GET_RECORDS); - // Use the preferred HTTP method and check one exist. - if (oper.getUrl != null && PREFERRED_HTTP_METHOD.equals("GET")) { - request.setUrl(oper.getUrl); - request.setServerVersion(server.getPreferredServerVersion()); - request.setOutputSchema(oper.preferredOutputSchema); - request.setConstraintLanguage(ConstraintLanguage.CQL); - request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); - request.setConstraint(getCqlConstraint(s)); - request.setMethod(CatalogRequest.Method.GET); - for(String typeName: oper.typeNamesList) { - request.addTypeName(TypeName.getTypeName(typeName)); - } - request.setOutputFormat(oper.preferredOutputFormat) ; + configRequest(request, oper, server, s, PREFERRED_HTTP_METHOD); - } else if (oper.postUrl != null && PREFERRED_HTTP_METHOD.equals("POST")) { - request.setUrl(oper.postUrl); - request.setServerVersion(server.getPreferredServerVersion()); - request.setOutputSchema(oper.preferredOutputSchema); - request.setConstraintLanguage(ConstraintLanguage.FILTER); - request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); - request.setConstraint(getFilterConstraint(s)); - request.setMethod(CatalogRequest.Method.POST); - for(String typeName: oper.typeNamesList) { - request.addTypeName(TypeName.getTypeName(typeName)); - } - request.setOutputFormat(oper.preferredOutputFormat) ; + - } else { - if (oper.getUrl != null) { - request.setUrl(oper.getUrl); - request.setServerVersion(server.getPreferredServerVersion()); - request.setOutputSchema(oper.preferredOutputSchema); - request.setConstraintLanguage(ConstraintLanguage.CQL); - request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); - request.setConstraint(getCqlConstraint(s)); - request.setMethod(CatalogRequest.Method.GET); - for(String typeName: oper.typeNamesList) { - request.addTypeName(TypeName.getTypeName(typeName)); - } - request.setOutputFormat(oper.preferredOutputFormat) ; - - } else if (oper.postUrl != null) { - request.setUrl(oper.postUrl); - request.setServerVersion(server.getPreferredServerVersion()); - request.setOutputSchema(oper.preferredOutputSchema); - request.setConstraintLanguage(ConstraintLanguage.FILTER); - request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); - request.setConstraint(getFilterConstraint(s)); - request.setMethod(CatalogRequest.Method.POST); - - for(String typeName: oper.typeNamesList) { - request.addTypeName(TypeName.getTypeName(typeName)); - } - request.setOutputFormat(oper.preferredOutputFormat) ; - - } else { - throw new OperationAbortedEx("No GET or POST DCP available in this service."); - } - } - if (params.useAccount) request.setCredentials(params.username, params.password); Set<RecordInfo> records = new HashSet<RecordInfo>(); + // Simple fallback mechanism. Try dummy search with PREFERRED_HTTP_METHOD method, if fails change it + try { + request.setStartPosition(start +""); + doSearch(request, start, 1); + } catch(Exception ex) { + log.debug(ex.getMessage()); + log.debug("Changing to CSW " + (PREFERRED_HTTP_METHOD.equals("GET")?"POST":"GET")); + + configRequest(request, oper, server, s, PREFERRED_HTTP_METHOD.equals("GET")?"POST":"GET"); + } + while (true) { request.setStartPosition(start +""); @@ -293,6 +248,69 @@ return records; } + private void configRequest(GetRecordsRequest request, CswOperation oper, CswServer server, Search s, String preferredMethod) + throws Exception { + // Use the preferred HTTP method and check one exist. + if (oper.getUrl != null && preferredMethod.equals("GET")) { + request.setUrl(oper.getUrl); + request.setServerVersion(server.getPreferredServerVersion()); + request.setOutputSchema(oper.preferredOutputSchema); + request.setConstraintLanguage(ConstraintLanguage.CQL); + request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); + request.setConstraint(getCqlConstraint(s)); + request.setMethod(CatalogRequest.Method.GET); + for(String typeName: oper.typeNamesList) { + request.addTypeName(TypeName.getTypeName(typeName)); + } + request.setOutputFormat(oper.preferredOutputFormat) ; + + } else if (oper.postUrl != null && preferredMethod.equals("POST")) { + request.setUrl(oper.postUrl); + request.setServerVersion(server.getPreferredServerVersion()); + request.setOutputSchema(oper.preferredOutputSchema); + request.setConstraintLanguage(ConstraintLanguage.FILTER); + request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); + request.setConstraint(getFilterConstraint(s)); + request.setMethod(CatalogRequest.Method.POST); + for(String typeName: oper.typeNamesList) { + request.addTypeName(TypeName.getTypeName(typeName)); + } + request.setOutputFormat(oper.preferredOutputFormat) ; + + } else { + if (oper.getUrl != null) { + request.setUrl(oper.getUrl); + request.setServerVersion(server.getPreferredServerVersion()); + request.setOutputSchema(oper.preferredOutputSchema); + request.setConstraintLanguage(ConstraintLanguage.CQL); + request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); + request.setConstraint(getCqlConstraint(s)); + request.setMethod(CatalogRequest.Method.GET); + for(String typeName: oper.typeNamesList) { + request.addTypeName(TypeName.getTypeName(typeName)); + } + request.setOutputFormat(oper.preferredOutputFormat) ; + + } else if (oper.postUrl != null) { + request.setUrl(oper.postUrl); + request.setServerVersion(server.getPreferredServerVersion()); + request.setOutputSchema(oper.preferredOutputSchema); + request.setConstraintLanguage(ConstraintLanguage.FILTER); + request.setConstraintLangVersion(CONSTRAINT_LANGUAGE_VERSION); + request.setConstraint(getFilterConstraint(s)); + request.setMethod(CatalogRequest.Method.POST); + + for(String typeName: oper.typeNamesList) { + request.addTypeName(TypeName.getTypeName(typeName)); + } + request.setOutputFormat(oper.preferredOutputFormat) ; + + } else { + throw new OperationAbortedEx("No GET or POST DCP available in this service."); + } + } + } + //--------------------------------------------------------------------------- private String getFilterConstraint(Search s) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |