diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml
index b659569911..1e2cd4cca3 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml
@@ -1,5 +1,6 @@
Web Script Index
- Index of all Web Scripts
+ Retrieve an index of all Web Scripts
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl b/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl
index 881a2fe4eb..701a31f037 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl
@@ -2,7 +2,7 @@
- Alfresco Web APIs
+ Alfresco Web Scripts
@@ -11,24 +11,33 @@
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml
index bcb8f1ddb3..58ca751178 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml
@@ -4,5 +4,5 @@
- user
+ guest
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml
new file mode 100644
index 0000000000..375f66846d
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml
@@ -0,0 +1,5 @@
+
+ Web Script Description
+ Retrieve description document for identified Web Script
+
+
\ No newline at end of file
diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml
index ddc2a83801..254e1801f9 100644
--- a/config/alfresco/web-scripts-application-context.xml
+++ b/config/alfresco/web-scripts-application-context.xml
@@ -110,11 +110,13 @@
text/html
+ text/plaintext/xmlapplication/atom+xmlapplication/rss+xmlapplication/jsonapplication/opensearchdescription+xml
+ text/plain
@@ -177,6 +179,9 @@
+
+
+
diff --git a/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java b/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java
index 99de8a5de2..66f0df3b00 100644
--- a/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java
+++ b/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java
@@ -183,7 +183,6 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat
if (logger.isDebugEnabled())
logger.debug("Locating Web Scripts within " + apiStore.getBasePath());
- String basePath = apiStore.getBasePath();
String[] serviceDescPaths = apiStore.getDescriptionDocumentPaths();
for (String serviceDescPath : serviceDescPaths)
{
@@ -193,7 +192,7 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat
try
{
serviceDescIS = apiStore.getDescriptionDocument(serviceDescPath);
- serviceDesc = createDescription(basePath, serviceDescPath, serviceDescIS);
+ serviceDesc = createDescription(apiStore, serviceDescPath, serviceDescIS);
}
catch(IOException e)
{
@@ -219,7 +218,10 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat
if (logger.isDebugEnabled())
{
WebScript existingService = webscriptsById.get(id);
- logger.debug("Web Script description document " + serviceDesc.getSourceLocation() + " overridden by " + existingService.getDescription().getSourceLocation());
+ WebScriptDescription existingDesc = existingService.getDescription();
+ String msg = "Web Script description document " + serviceDesc.getSourceStore() + "/" + serviceDesc.getSourceLocation();
+ msg += " overridden by " + existingDesc.getSourceStore() + "/" + existingDesc.getSourceLocation();
+ logger.debug(msg);
}
continue;
}
@@ -319,13 +321,13 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat
/**
* Create an Web Script Description
*
- * @param basePath
+ * @param store
* @param serviceDescPath
* @param serviceDoc
*
* @return web script service description
*/
- private WebScriptDescription createDescription(String basePath, String serviceDescPath, InputStream serviceDoc)
+ private WebScriptDescription createDescription(WebScriptStore store, String serviceDescPath, InputStream serviceDoc)
{
SAXReader reader = new SAXReader();
try
@@ -430,7 +432,8 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat
// construct service description
WebScriptDescriptionImpl serviceDesc = new WebScriptDescriptionImpl();
- serviceDesc.setSourceLocation(basePath + "/" + serviceDescPath);
+ serviceDesc.setSourceStore(store);
+ serviceDesc.setSourceLocation(serviceDescPath);
serviceDesc.setId(id);
serviceDesc.setShortName(shortName);
serviceDesc.setDescription(description);
diff --git a/source/java/org/alfresco/web/scripts/WebScriptDescription.java b/source/java/org/alfresco/web/scripts/WebScriptDescription.java
index f7ab22f8a7..9a5220dc51 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptDescription.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptDescription.java
@@ -24,6 +24,9 @@
*/
package org.alfresco.web.scripts;
+import java.io.IOException;
+import java.io.InputStream;
+
/**
* Web Script Description
@@ -53,6 +56,21 @@ public interface WebScriptDescription
}
+ /**
+ * Gets the source document of this web script
+ *
+ * @return source document
+ */
+ public InputStream getSourceDocument()
+ throws IOException;
+
+ /**
+ * Gets the store this web script is located in
+ *
+ * @return path to store
+ */
+ public String getSourceStore();
+
/**
* Gets the source document location of this service description
*
diff --git a/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java b/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java
index 4ec8ed5f2f..37b15af190 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java
@@ -24,6 +24,8 @@
*/
package org.alfresco.web.scripts;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
@@ -35,6 +37,7 @@ import java.util.Map;
*/
public class WebScriptDescriptionImpl implements WebScriptDescription
{
+ private WebScriptStore sourceStore;
private String sourceLocation;
private String id;
private String shortName;
@@ -45,7 +48,34 @@ public class WebScriptDescriptionImpl implements WebScriptDescription
private URI[] uris;
private String defaultFormat;
private Map uriByFormat;
+
+ /**
+ * Sets the source store
+ *
+ * @param store source store
+ */
+ public void setSourceStore(WebScriptStore store)
+ {
+ this.sourceStore = store;
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.web.scripts.WebScriptDescription#getSourceDocument()
+ */
+ public InputStream getSourceDocument()
+ throws IOException
+ {
+ return this.sourceStore.getDescriptionDocument(sourceLocation);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.web.scripts.WebScriptDescription#getSourceStore()
+ */
+ public String getSourceStore()
+ {
+ return this.sourceStore.getBasePath();
+ }
/**
* Sets the source location
diff --git a/source/java/org/alfresco/web/scripts/bean/Index.java b/source/java/org/alfresco/web/scripts/bean/Index.java
index 535384de3f..c631d8acc2 100644
--- a/source/java/org/alfresco/web/scripts/bean/Index.java
+++ b/source/java/org/alfresco/web/scripts/bean/Index.java
@@ -33,7 +33,7 @@ import org.alfresco.web.scripts.WebScriptResponse;
/**
- * Retrieves the list of available Web APIs
+ * Retrieves the list of available Web Scripts
*
* @author davidc
*/
diff --git a/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java b/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java
index a43ba464f8..f60c70545f 100644
--- a/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java
+++ b/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java
@@ -35,7 +35,7 @@ import org.alfresco.web.scripts.WebScriptResponse;
/**
- * Retrieves the list of available Web APIs
+ * Retrieves the list of available Web Scripts
*
* @author davidc
*/
diff --git a/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java b/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java
new file mode 100644
index 0000000000..9125f8d7e4
--- /dev/null
+++ b/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2005-2007 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have recieved a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.web.scripts.bean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.alfresco.repo.content.MimetypeMap;
+import org.alfresco.web.scripts.AbstractWebScript;
+import org.alfresco.web.scripts.WebScript;
+import org.alfresco.web.scripts.WebScriptDescription;
+import org.alfresco.web.scripts.WebScriptException;
+import org.alfresco.web.scripts.WebScriptRequest;
+import org.alfresco.web.scripts.WebScriptResponse;
+
+
+/**
+ * Retrieves a Web Script Description Document
+ *
+ * @author davidc
+ */
+public class ServiceDescription extends AbstractWebScript
+{
+
+ public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException
+ {
+ // extract web script id
+ String extensionPath = req.getExtensionPath();
+ if (extensionPath == null || extensionPath.length() == 0)
+ {
+ throw new WebScriptException("Web Script Id not provided");
+ }
+ String scriptId = extensionPath.replace("/", ".");
+
+ // locate web script
+ WebScript script = getWebScriptRegistry().getWebScript(scriptId);
+ if (script == null)
+ {
+ throw new WebScriptException("Web Script Id '" + scriptId + "' not found");
+ }
+
+ // retrieve description document
+ WebScriptDescription desc = script.getDescription();
+ InputStream serviceDescIS = null;
+ try
+ {
+ serviceDescIS = desc.getSourceDocument();
+ OutputStream out = res.getOutputStream();
+ res.setContentType(MimetypeMap.MIMETYPE_XML + ";charset=UTF-8");
+ byte[] buffer = new byte[2048];
+ int read = serviceDescIS.read(buffer);
+ while (read != -1)
+ {
+ out.write(buffer, 0, read);
+ read = serviceDescIS.read(buffer);
+ }
+ }
+ catch(IOException e)
+ {
+ throw new WebScriptException("Failed to read Web Script description document for '" + scriptId + "'", e);
+ }
+ finally
+ {
+ try
+ {
+ if (serviceDescIS != null) serviceDescIS.close();
+ }
+ catch(IOException e)
+ {
+ // NOTE: ignore close exception
+ }
+ }
+ }
+
+}