You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/07/01 19:31:18 UTC

svn commit: r1498582 - in /manifoldcf/trunk: connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/ connectors/hdfs/connector/src/main/...

Author: kwright
Date: Mon Jul  1 17:31:18 2013
New Revision: 1498582

URL: http://svn.apache.org/r1498582
Log:
Work on HDFS output connector. First, introduce real sessions.  Second, add javascript checks for null parameters.  Finally, fix up error handling.

Added:
    manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java   (with props)
Modified:
    manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputConnector.java
    manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputParam.java
    manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_en_US.properties
    manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_ja_JP.properties
    manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editConfiguration.js
    manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editSpecification.js
    manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/output/BaseOutputConnector.java
    manifoldcf/trunk/framework/crawler-ui/src/main/webapp/viewoutput.jsp

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputConnector.java?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputConnector.java (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputConnector.java Mon Jul  1 17:31:18 2013
@@ -23,6 +23,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InterruptedIOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
@@ -113,9 +114,30 @@ public class HDFSOutputConnector extends
   public void connect(ConfigParams configParams) {
     super.connect(configParams);
     
-    String nameNode = configParams.getParameter(ParameterEnum.NAMENODE.name());
+  }
+
+  /** Close the connection.  Call this before discarding the connection.
+   */
+  @Override
+  public void disconnect() throws ManifoldCFException {
+    try {
+      fileSystem.close();
+    } catch(IOException ex) {
+      throw new ManifoldCFException(ex);
+    }
+    config.clear();
+    super.disconnect();
+  }
+
+  /** Set up a session */
+  protected void getSession() throws ManifoldCFException, ServiceInterruption {
+    String nameNode = params.getParameter(ParameterEnum.NAMENODE.name());
+    if (nameNode == null)
+      throw new ManifoldCFException("Namenode must be specified");
     
-    String user = configParams.getParameter(ParameterEnum.USER.name());
+    String user = params.getParameter(ParameterEnum.USER.name());
+    if (user == null)
+      throw new ManifoldCFException("User must be specified");
     
     /*
      * make Configuration
@@ -133,31 +155,16 @@ public class HDFSOutputConnector extends
      * get connection to HDFS
      */
     try {
-        fileSystem = FileSystem.get(new URI(nameNode), config, user);
+      fileSystem = FileSystem.get(new URI(nameNode), config, user);
     } catch (URISyntaxException e) {
-      Logging.agents.warn("HDFS: Node name error: " + e.getMessage(), e);
+      handleURISyntaxException(e);
+      throw new ManifoldCFException(e.getMessage(),e);
     } catch (IOException e) {
-      Logging.agents.warn("HDFS: File system error: " + e.getMessage(), e);
+      handleIOException(e);
     } catch (InterruptedException e) {
-      Logging.agents.warn("HDFS: File system error: " + e.getMessage(), e);
-    }
-  }
-
-  /** Close the connection.  Call this before discarding the connection.
-   */
-  @Override
-  public void disconnect() throws ManifoldCFException {
-    try {
-      fileSystem.close();
-    } catch(IOException ex) {
-      throw new ManifoldCFException(ex);
+      throw new ManifoldCFException(e.getMessage(),ManifoldCFException.INTERRUPTED);
     }
-    config.clear();
-    super.disconnect();
-  }
 
-  /** Set up a session */
-  protected void getSession() throws ManifoldCFException, ServiceInterruption {
   }
 
   /** Test the connection.  Returns a string describing the connection integrity.
@@ -249,19 +256,20 @@ public class HDFSOutputConnector extends
       /*
        * write file
        */
-      byte buf[] = new byte[1024];
+      byte buf[] = new byte[65536];
       int len;
       while((len = input.read(buf)) != -1) {
         output.write(buf, 0, len);
       }
       output.flush();
     } catch (JSONException e) {
+      handleJSONException(e);
       return DOCUMENTSTATUS_REJECTED;
     } catch (URISyntaxException e) {
+      handleURISyntaxException(e);
       return DOCUMENTSTATUS_REJECTED;
-    } catch (NullPointerException e) {
-        return DOCUMENTSTATUS_REJECTED;
     } catch (IOException e) {
+      handleIOException(e);
       return DOCUMENTSTATUS_REJECTED;
     } finally {
       try {
@@ -314,9 +322,11 @@ public class HDFSOutputConnector extends
         fileSystem.delete(path, true);
       }
     } catch (JSONException e) {
+      handleJSONException(e);
     } catch (URISyntaxException e) {
-    } catch (NullPointerException e) {
+      handleURISyntaxException(e);
     } catch (IOException e) {
+      handleIOException(e);
     }
 
     activities.recordActivity(null, REMOVE_ACTIVITY, null, documentURI, "OK", null);
@@ -499,9 +509,8 @@ public class HDFSOutputConnector extends
    * @param documentURI
    * @return
    * @throws URISyntaxException
-   * @throws NullPointerException
    */
-  final private String documentURItoFilePath(String documentURI) throws URISyntaxException, NullPointerException {
+  final private String documentURItoFilePath(String documentURI) throws URISyntaxException {
     StringBuffer path = new StringBuffer();
     URI uri = null;
 
@@ -516,7 +525,7 @@ public class HDFSOutputConnector extends
       path.append(uri.getHost());
       if (uri.getPort() != -1) {
         path.append(":");
-        path.append(uri.getPort());
+        path.append(Integer.toString(uri.getPort()));
       }
       if (uri.getRawPath() != null) {
         if (uri.getRawPath().length() == 0) {
@@ -525,7 +534,7 @@ public class HDFSOutputConnector extends
           path.append(uri.getRawPath());
         } else {
           for (String name : uri.getRawPath().split("/")) {
-            if (name.length() > 0) {
+            if (name != null && name.length() > 0) {
               path.append("/");
               path.append(name);
             }
@@ -539,7 +548,7 @@ public class HDFSOutputConnector extends
     } else {
       if (uri.getRawSchemeSpecificPart() != null) {
         for (String name : uri.getRawSchemeSpecificPart().split("/")) {
-          if (name.length() > 0) {
+          if (name != null && name.length() > 0) {
             path.append("/");
             path.append(name);
           }
@@ -552,4 +561,32 @@ public class HDFSOutputConnector extends
     }
     return path.toString();
   }
+  
+  /** Handle URISyntaxException */
+  protected static void handleURISyntaxException(URISyntaxException e)
+    throws ManifoldCFException, ServiceInterruption
+  {
+    Logging.agents.error("Namenode URI is malformed: "+e.getMessage(),e);
+    throw new ManifoldCFException("Namenode URI is malformed: "+e.getMessage(),e);
+  }
+  
+  /** Handle JSONException */
+  protected static void handleJSONException(JSONException e)
+    throws ManifoldCFException, ServiceInterruption
+  {
+    Logging.agents.error("JSON parsing error: "+e.getMessage(),e);
+    throw new ManifoldCFException("JSON parsing error: "+e.getMessage(),e);
+  }
+  
+  /** Handle IOException */
+  protected static void handleIOException(IOException e)
+    throws ManifoldCFException, ServiceInterruption
+  {
+    if (!(e instanceof java.net.SocketTimeoutException) && (e instanceof InterruptedIOException)) {
+      throw new ManifoldCFException("Interrupted: " + e.getMessage(), e, ManifoldCFException.INTERRUPTED);
+    }
+    long currentTime = System.currentTimeMillis();
+    throw new ServiceInterruption("IO exception: "+e.getMessage(), e, currentTime + 300000L, currentTime + 3 * 60 * 60000L,-1,false);
+  }
+  
 }

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputParam.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputParam.java?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputParam.java (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/HDFSOutputParam.java Mon Jul  1 17:31:18 2013
@@ -22,27 +22,12 @@ package org.apache.manifoldcf.agents.out
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.manifoldcf.agents.output.hdfs.HDFSOutputParam.ParameterEnum;
-
 /** 
  * Parameters data for the elasticsearch output connector.
  */
 public class HDFSOutputParam extends HashMap<ParameterEnum, String>
 {
 
-  /** Parameters constants */
-  public enum ParameterEnum {
-    NAMENODE("hdfs://localhost:9000"),
-    USER(""),
-    ROOTPATH("/tmp");
-
-    final protected String defaultValue;
-
-    private ParameterEnum(String defaultValue) {
-      this.defaultValue = defaultValue;
-    }
-  }
-
   private static final long serialVersionUID = -140994685772720029L;
 
   protected HDFSOutputParam(ParameterEnum[] params) {

Added: manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java?rev=1498582&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java (added)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java Mon Jul  1 17:31:18 2013
@@ -0,0 +1,36 @@
+/* $Id$ */
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.manifoldcf.agents.output.hdfs;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** Parameters constants */
+public enum ParameterEnum {
+  NAMENODE("hdfs://localhost:9000"),
+  USER(""),
+  ROOTPATH("");
+
+  final protected String defaultValue;
+
+  private ParameterEnum(String defaultValue) {
+    this.defaultValue = defaultValue;
+  }
+}

Propchange: manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/trunk/connectors/hdfs/connector/src/main/java/org/apache/manifoldcf/agents/output/hdfs/ParameterEnum.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_en_US.properties?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_en_US.properties (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_en_US.properties Mon Jul  1 17:31:18 2013
@@ -16,8 +16,11 @@
 HDFSOutputConnector.ServerTabName=Server
 HDFSOutputConnector.NameNode=Name Node:
 HDFSOutputConnector.User=User:
+HDFSOutputConnector.NameNodeURICannotBeNull=Name node URI cannot be null
+HDFSOutputConnector.UserCannotBeNull=User cannot be null
 
 HDFSOutputConnector.PathTabName=Output Path
 HDFSOutputConnector.Path=Output Path:
 HDFSOutputConnector.RootPath=Root path:
+HDFSOutputConnector.RootPathCannotBeNull=Root path cannot be null
 

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_ja_JP.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_ja_JP.properties?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_ja_JP.properties (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/hdfs/common_ja_JP.properties Mon Jul  1 17:31:18 2013
@@ -16,7 +16,11 @@
 HDFSOutputConnector.ServerTabName=サーバー
 HDFSOutputConnector.NameNode=ネームノード:
 HDFSOutputConnector.User=ユーザー:
+HDFSOutputConnector.NameNodeURICannotBeNull=Name node URI cannot be null
+HDFSOutputConnector.UserCannotBeNull=User cannot be null
 
 HDFSOutputConnector.PathTabName=出力パス
 HDFSOutputConnector.Path=出力パス:
 HDFSOutputConnector.RootPath=ルートパス:
+HDFSOutputConnector.RootPathCannotBeNull=Root path cannot be null
+

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editConfiguration.js
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editConfiguration.js?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editConfiguration.js (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editConfiguration.js Mon Jul  1 17:31:18 2013
@@ -17,5 +17,23 @@
 
 <script type="text/javascript">
 <!--
+function checkConfigForSave()
+{
+  if (editconnection.namenode.value == "")
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.NameNodeURICannotBeNull'))");
+    SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.ServerTabName'))");
+    editconnection.namenode.focus();
+    return false;
+  }
+  if (editconnection.user.value == "")
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.UserCannotBeNull'))");
+    SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.ServerTabName'))");
+    editconnection.user.focus();
+    return false;
+  }
+  return true;
+}
 //-->
 </script>
\ No newline at end of file

Modified: manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editSpecification.js
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editSpecification.js?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editSpecification.js (original)
+++ manifoldcf/trunk/connectors/hdfs/connector/src/main/resources/org/apache/manifoldcf/agents/output/hdfs/editSpecification.js Mon Jul  1 17:31:18 2013
@@ -17,5 +17,16 @@
 
 <script type="text/javascript">
 <!--
+function checkOutputSpecificationForSave()
+{
+  if (editjob.rootpath.value == "")
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.RootPathCannotBeNull'))");
+    SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('HDFSOutputConnector.PathTabName'))");
+    editjob.rootpath.focus();
+    return false;
+  }
+  return true;
+}
 //-->
 </script>
\ No newline at end of file

Modified: manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/output/BaseOutputConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/output/BaseOutputConnector.java?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/output/BaseOutputConnector.java (original)
+++ manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/output/BaseOutputConnector.java Mon Jul  1 17:31:18 2013
@@ -49,6 +49,7 @@ public abstract class BaseOutputConnecto
   /** Return the list of activities that this connector supports (i.e. writes into the log).
   *@return the list.
   */
+  @Override
   public String[] getActivitiesList()
   {
     return new String[0];
@@ -61,6 +62,7 @@ public abstract class BaseOutputConnecto
   *@param command is the command, which is taken directly from the API request.
   *@return true if the resource is found, false if not.  In either case, output may be filled in.
   */
+  @Override
   public boolean requestInfo(Configuration output, String command)
     throws ManifoldCFException
   {
@@ -72,6 +74,7 @@ public abstract class BaseOutputConnecto
   * is a good time to synchronize things.  It is called whenever a job is either completed or aborted.
   *@param activities is the handle to an object that the implementer of an output connector may use to perform operations, such as logging processing activity.
   */
+  @Override
   public void noteJobComplete(IOutputNotifyActivity activities)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -84,6 +87,7 @@ public abstract class BaseOutputConnecto
   *@param mimeType is the mime type of the document.
   *@return true if the mime type is indexable by this connector.
   */
+  @Override
   public boolean checkMimeTypeIndexable(String outputDescription, String mimeType)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -108,6 +112,7 @@ public abstract class BaseOutputConnecto
   *@param localFile is the local file to check.
   *@return true if the file is indexable.
   */
+  @Override
   public boolean checkDocumentIndexable(String outputDescription, File localFile)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -132,6 +137,7 @@ public abstract class BaseOutputConnecto
   *@param length is the length of the document.
   *@return true if the file is indexable.
   */
+  @Override
   public boolean checkLengthIndexable(String outputDescription, long length)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -144,6 +150,7 @@ public abstract class BaseOutputConnecto
   *@param url is the URL of the document.
   *@return true if the file is indexable.
   */
+  @Override
   public boolean checkURLIndexable(String outputDescription, String url)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -161,6 +168,7 @@ public abstract class BaseOutputConnecto
   *@return a string, of unlimited length, which uniquely describes output configuration and specification in such a way that if two such strings are equal,
   * the document will not need to be sent again to the output data store.
   */
+  @Override
   public String getOutputDescription(OutputSpecification spec)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -182,6 +190,7 @@ public abstract class BaseOutputConnecto
   *@param activities is the handle to an object that the implementer of an output connector may use to perform operations, such as logging processing activity.
   *@return the document status (accepted or permanently rejected).
   */
+  @Override
   public int addOrReplaceDocument(String documentURI, String outputDescription, RepositoryDocument document, String authorityNameString, IOutputAddActivity activities)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -195,6 +204,7 @@ public abstract class BaseOutputConnecto
   *@param outputDescription is the last description string that was constructed for this document by the getOutputDescription() method above.
   *@param activities is the handle to an object that the implementer of an output connector may use to perform operations, such as logging processing activity.
   */
+  @Override
   public void removeDocument(String documentURI, String outputDescription, IOutputRemoveActivity activities)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -217,6 +227,7 @@ public abstract class BaseOutputConnecto
   *@param os is the current output specification for this job.
   *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
   */
+  @Override
   public void outputSpecificationHeader(IHTTPOutput out, Locale locale, OutputSpecification os, List<String> tabsArray)
     throws ManifoldCFException, IOException
   {
@@ -256,6 +267,7 @@ public abstract class BaseOutputConnecto
   *@param os is the current output specification for this job.
   *@param tabName is the current tab name.
   */
+  @Override
   public void outputSpecificationBody(IHTTPOutput out, Locale locale, OutputSpecification os, String tabName)
     throws ManifoldCFException, IOException
   {
@@ -284,6 +296,7 @@ public abstract class BaseOutputConnecto
   *@param os is the current output specification for this job.
   *@return null if all is well, or a string error message if there is an error that should prevent saving of the job (and cause a redirection to an error page).
   */
+  @Override
   public String processSpecificationPost(IPostParameters variableContext, Locale locale, OutputSpecification os)
     throws ManifoldCFException
   {
@@ -311,6 +324,7 @@ public abstract class BaseOutputConnecto
   *@param locale is the preferred local of the output.
   *@param os is the current output specification for this job.
   */
+  @Override
   public void viewSpecification(IHTTPOutput out, Locale locale, OutputSpecification os)
     throws ManifoldCFException, IOException
   {

Modified: manifoldcf/trunk/framework/crawler-ui/src/main/webapp/viewoutput.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/crawler-ui/src/main/webapp/viewoutput.jsp?rev=1498582&r1=1498581&r2=1498582&view=diff
==============================================================================
--- manifoldcf/trunk/framework/crawler-ui/src/main/webapp/viewoutput.jsp (original)
+++ manifoldcf/trunk/framework/crawler-ui/src/main/webapp/viewoutput.jsp Mon Jul  1 17:31:18 2013
@@ -121,6 +121,7 @@
 		}
 		catch (ManifoldCFException e)
 		{
+			e.printStackTrace();
 			connectionStatus = Messages.getString(pageContext.getRequest().getLocale(),"viewoutput.Threwexception")+" '"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(e.getMessage())+"'";
 		}
 %>