Alex: fix the search broken under HTTPS situation
diff --git a/org.eclipse.epf.web.search/epf-web-search.jardesc b/org.eclipse.epf.web.search/epf-web-search.jardesc
index f8f2994..c50302a 100644
--- a/org.eclipse.epf.web.search/epf-web-search.jardesc
+++ b/org.eclipse.epf.web.search/epf-web-search.jardesc
@@ -1,16 +1,15 @@
-<?xml version="1.0" encoding="WINDOWS-1252"?>
-<jardesc>
-<jar path="C:/ec/epf1/org.eclipse.epf.publishing/docroot/WEB-INF/lib/epf-web-search.jar"/>
-<options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web.search/epf-web-search.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
-<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
-<selectedProjects/>
-<manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
-<sealing sealJar="false">
-<packagesToSeal/>
-<packagesToUnSeal/>
-</sealing>
-</manifest>
-<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
-<javaElement handleIdentifier="=org.eclipse.epf.web.search/src"/>
-</selectedElements>
-</jardesc>
+<?xml version="1.0" encoding="WINDOWS-1252"?><jardesc>
+ <jar path="C:/download/jar/epf-web-search.jar"/>
+ <options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web.search/epf-web-search.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+ <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+ <selectedProjects/>
+ <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+ <sealing sealJar="false">
+ <packagesToSeal/>
+ <packagesToUnSeal/>
+ </sealing>
+ </manifest>
+ <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+ <javaElement handleIdentifier="=org.eclipse.epf.web.search/src"/>
+ </selectedElements>
+</jardesc>
\ No newline at end of file
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
index 05af15b..4c6f26a 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
@@ -14,12 +14,22 @@
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
import org.eclipse.epf.web.search.utils.UNCUtil;
@@ -292,12 +302,23 @@
URL url = new URL(documentBase + "/search/index/version.txt"); //$NON-NLS-1$
// handle UNC
url = UNCUtil.handleURLForUNC(url);
-
- BufferedInputStream inputS = new BufferedInputStream(url
- .openStream());
- InputStreamReader iStreamReader = new InputStreamReader(inputS);
- BufferedReader read = new BufferedReader(iStreamReader);
- String version = read.readLine();
+
+ BufferedReader in = null;
+ if (documentBase.startsWith("http:")) { //$NON-NLS-1$
+ in = new BufferedReader(new InputStreamReader(url.openStream()));
+ } else if (documentBase.startsWith("https:")) { //$NON-NLS-1$
+ TrustManager[] tm = {new EPFX509TrustManager()};
+ SSLContext sslContext = SSLContext.getInstance("SSL"); //$NON-NLS-1$
+ sslContext.init(null, tm, null);
+ SSLSocketFactory sslFactory = sslContext.getSocketFactory();
+
+ HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);
+ HttpsURLConnection.setDefaultHostnameVerifier(new EPFHostnameVerifier());
+
+ in = new BufferedReader(new InputStreamReader(url.openStream()));
+ }
+
+ String version = in.readLine();
int idx = (version != null) ? version.indexOf(VERSION_DELIMITER)
: -1;
if (idx > -1) {
@@ -307,13 +328,13 @@
throw new FileNotFoundException();
}
- String analyzer = read.readLine();
+ String analyzer = in.readLine();
if (analyzer != null) {
analyzer = analyzer.trim();
}
setAnalyzerName(analyzer);
- read.close();
+ in.close();
if (siteFolderName == null) {
throw new FileNotFoundException();
@@ -347,4 +368,28 @@
private synchronized static void setAnalyzerName(String analyzerName) {
IndexLoader.analyzerName = analyzerName;
}
-}
\ No newline at end of file
+}
+
+class EPFX509TrustManager implements X509TrustManager {
+ private X509Certificate[] serverCertificate;
+
+ public void checkClientTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ //
+ }
+
+ public void checkServerTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ serverCertificate = arg0;
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ return serverCertificate;
+ }
+}
+
+class EPFHostnameVerifier implements HostnameVerifier {
+ public boolean verify(String arg0, SSLSession arg1) {
+ return true;
+ }
+}
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
index daebf4f..d25f5c9 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
@@ -14,6 +14,7 @@
import org.eclipse.epf.web.search.analysis.CJKAnalyzer;
import org.eclipse.epf.web.search.analysis.ChineseAnalyzer;
import org.eclipse.epf.web.search.analysis.TextAnalyzer;
+import org.eclipse.epf.web.search.utils.DebugUtil;
import com.ibm.icu.text.DecimalFormat;
@@ -75,7 +76,9 @@
if (analyzer == null) {
analyzer = new TextAnalyzer();
}
- System.out.println("LD> analyzer: " + analyzer);
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> analyzer: " + analyzer);
+ }
q = QueryParser.parse(queryString, searchField,
analyzer);
if ( q != null ) {
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java
new file mode 100644
index 0000000..0053b08
--- /dev/null
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java
@@ -0,0 +1,9 @@
+//------------------------------------------------------------------------------
+//Copyright (c) 2004, 2011 IBM Corporation. All Rights Reserved.
+//------------------------------------------------------------------------------
+
+package org.eclipse.epf.web.search.utils;
+
+public interface DebugUtil {
+ public static final boolean DEBUG = false;
+}
diff --git a/org.eclipse.epf.web/epf-web.jardesc b/org.eclipse.epf.web/epf-web.jardesc
index ea0f7f8..69babf0 100644
--- a/org.eclipse.epf.web/epf-web.jardesc
+++ b/org.eclipse.epf.web/epf-web.jardesc
@@ -1,16 +1,15 @@
-<?xml version="1.0" encoding="WINDOWS-1252"?>
-<jardesc>
-<jar path="C:/ec/epf1/org.eclipse.epf.publishing/docroot/WEB-INF/lib/epf-web.jar"/>
-<options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web/epf-web.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
-<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
-<selectedProjects/>
-<manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
-<sealing sealJar="false">
-<packagesToSeal/>
-<packagesToUnSeal/>
-</sealing>
-</manifest>
-<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
-<javaElement handleIdentifier="=org.eclipse.epf.web/src"/>
-</selectedElements>
-</jardesc>
+<?xml version="1.0" encoding="WINDOWS-1252"?><jardesc>
+ <jar path="C:/download/jar/epf-web.jar"/>
+ <options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web/epf-web.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+ <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+ <selectedProjects/>
+ <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+ <sealing sealJar="false">
+ <packagesToSeal/>
+ <packagesToUnSeal/>
+ </sealing>
+ </manifest>
+ <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+ <javaElement handleIdentifier="=org.eclipse.epf.web/src"/>
+ </selectedElements>
+</jardesc>
\ No newline at end of file
diff --git a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
index 203dbe9..c0d52f0 100644
--- a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
+++ b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
@@ -23,6 +23,7 @@
import org.eclipse.epf.web.search.IndexLoader;
import org.eclipse.epf.web.search.IndexSearch;
import org.eclipse.epf.web.search.SearchResources;
+import org.eclipse.epf.web.search.utils.DebugUtil;
import org.eclipse.epf.web.search.utils.StrUtil;
import org.eclipse.epf.web.search.utils.UNCUtil;
import org.eclipse.epf.web.search.utils.XMLUtil;
@@ -111,7 +112,11 @@
} else {
String searchString = request.getParameter("searchString");
- System.out.println("LD> searchString: " + searchString);
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> searchString: " + searchString);
+ System.out.println("LD> documentBasePath: " + _pathDocumentBase);
+ System.out.println("LD> siteFolderName: " + _siteFolderName);
+ }
if (searchString == null || searchString.length() == 0) {
response.sendError(HttpServletResponse.SC_NO_CONTENT);
@@ -188,18 +193,26 @@
boolean result = false;
//_currentSearchString = "\u57FA\u672C\u539F\u5247";
try {
- System.out.println("LD> _indexPath: " + _indexPath);//$NON-NLS-1$
- System.out.println("LD> _currentSearchString: " + _currentSearchString);//$NON-NLS-1$
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> _indexPath: " + _indexPath);//$NON-NLS-1$
+ System.out.println("LD> _currentSearchString: " + _currentSearchString);//$NON-NLS-1$
+ }
if (_currentSearchString != null) {
- System.out.println("LD> unicodes: " +
- escapeUnicodeString(_currentSearchString, false));//$NON-NLS-1$
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> unicodes: " +
+ escapeUnicodeString(_currentSearchString, false));//$NON-NLS-1$
+ }
}
- System.out.println("LD> analyzerName: " + analyzerName);//$NON-NLS-1$
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> analyzerName: " + analyzerName);//$NON-NLS-1$
+ }
_hits = IndexSearch.search(_indexPath, _currentSearchString, searchField, analyzerName);// new
- System.out.println("LD> _hits: " +
- (_hits == null ? "null" : Integer.toString(_hits.length())));//$NON-NLS-1$ //$NON-NLS-2$
+ if (DebugUtil.DEBUG) {
+ System.out.println("LD> _hits: " +
+ (_hits == null ? "null" : Integer.toString(_hits.length())));//$NON-NLS-1$ //$NON-NLS-2$
+ }
// SortedHits(hits);