From c1dff41f9948becac8c85a1c049844aef26dd395 Mon Sep 17 00:00:00 2001 From: theli Date: Thu, 19 Oct 2006 10:56:53 +0000 Subject: [PATCH] *) adding possibility to deploy custom SOAP services See: http://www.yacy-forum.de/viewtopic.php?p=26748#26748 git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2813 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/soap/httpdSoapHandler.java | 54 +++++++++++++++++++-- yacy.init | 20 ++++++++ 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/source/de/anomic/soap/httpdSoapHandler.java b/source/de/anomic/soap/httpdSoapHandler.java index da4b9a8d1..2a2fc8081 100644 --- a/source/de/anomic/soap/httpdSoapHandler.java +++ b/source/de/anomic/soap/httpdSoapHandler.java @@ -45,14 +45,17 @@ package de.anomic.soap; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PushbackInputStream; import java.io.UnsupportedEncodingException; +import java.util.Enumeration; import java.util.HashMap; import java.util.Properties; import java.util.zip.GZIPInputStream; @@ -142,7 +145,7 @@ public final class httpdSoapHandler extends httpdAbstractHandler implements http + "" + ""; - public static final String[] services = new String[] { + private static final String[] defaultServices = new String[] { "search=de.anomic.soap.services.SearchService", "crawl=de.anomic.soap.services.CrawlService", "status=de.anomic.soap.services.StatusService" @@ -183,6 +186,8 @@ public final class httpdSoapHandler extends httpdAbstractHandler implements http private File htRootPath; private File htTemplatePath; + private static Properties additionalServices = null; + /* * Creating and configuring an apache Axis server. * This is only needed once. @@ -194,8 +199,8 @@ public final class httpdSoapHandler extends httpdAbstractHandler implements http // setting some options ... engine.setShouldSaveConfig(false); - for (int i=0; i < services.length; i++) { - String[] nextService = services[i].split("="); + for (int i=0; i < defaultServices.length; i++) { + String[] nextService = defaultServices[i].split("="); String deploymentStr = serviceDeploymentString .replaceAll("@serviceName@", nextService[0]) .replaceAll("@className@", nextService[1]); @@ -230,7 +235,48 @@ public final class httpdSoapHandler extends httpdAbstractHandler implements http this.provider = new serverClassLoader(/*this.getClass().getClassLoader()*/); } - if (this.templates == null) this.templates = loadTemplates(this.htTemplatePath); + if (this.templates == null) this.templates = loadTemplates(this.htTemplatePath); + + synchronized (engine) { + if (additionalServices == null) { + additionalServices = new Properties(); + + // getting the property filename containing the file list + String fileName = switchboard.getConfig("soap.serviceDeploymentList",""); + if (fileName.length() > 0) { + BufferedInputStream fileInput = null; + try { + File deploymentFile = new File(switchboard.getRootPath(),fileName); + fileInput = new BufferedInputStream(new FileInputStream(deploymentFile)); + + // load property list + additionalServices.load(fileInput); + fileInput.close(); + + // loop through and deploy services + if (additionalServices.size() > 0) { + Enumeration serviceNameEnum = additionalServices.keys(); + while (serviceNameEnum.hasMoreElements()) { + String serviceName = (String) serviceNameEnum.nextElement(); + String className = additionalServices.getProperty(serviceName); + + String deploymentStr = serviceDeploymentString + .replaceAll("@serviceName@", serviceName) + .replaceAll("@className@", className); + + // deploy the service + deployService(deploymentStr,engine); + } + } + } catch (Exception e) { + this.theLogger.logSevere("Unable to deploy additional services: " + e.getMessage(), e); + } finally { + if (fileInput != null) try { fileInput.close(); } catch (Exception e){/* ignore this */} + } + } + } + + } } private byte[] readRequestBody(httpHeader requestHeader, PushbackInputStream body) throws SoapException { diff --git a/yacy.init b/yacy.init index 9c6b7d9d0..99b448e58 100644 --- a/yacy.init +++ b/yacy.init @@ -823,3 +823,23 @@ tableTypeForPreNURL=2 # flag to show surftipps on index.html page showSurftipps = true + +# a Java Properties file containig a list of SOAP services that should deployed +# additionally to the default services. E.g. +# soap.serviceDeploymentList = DATA/SETTINGS/myServices.properties +# +# One entry in the property file should must have the following format: +# servicename=fullClassname +# +# e.g. +# test=org.myservices.test +# +# Servicename is the name that shoud be used to access the service, e.g. +# if the service name is "test" then the service can be reached using +# http://localhost:8080/soap/test +# +# The WSDL document that belongs to the deployed service could be reached +# using +# http://localhost:8080/soap/test?wsdl +# +soap.serviceDeploymentList =