You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ma...@apache.org on 2015/05/25 21:31:27 UTC

svn commit: r1681640 - in /tika/trunk: tika-core/src/main/java/org/apache/tika/parser/external/ tika-parsers/src/main/resources/META-INF/services/

Author: mattmann
Date: Mon May 25 19:31:27 2015
New Revision: 1681640

URL: http://svn.apache.org/r1681640
Log:
- fix for TIKA-1638: Make ExternalParser actually work

Modified:
    tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
    tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
    tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java?rev=1681640&r1=1681639&r2=1681640&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java Mon May 25 19:31:27 2015
@@ -158,8 +158,7 @@ public class ExternalParser extends Abst
         File output = null;
 
         // Build our command
-        String[] cmd = new String[command.length];
-        System.arraycopy(command, 0, cmd, 0, command.length);
+        String[] cmd = command[0].split(" ");
         for(int i=0; i<cmd.length; i++) {
            if(cmd[i].indexOf(INPUT_FILE_TOKEN) != -1) {
               cmd[i] = cmd[i].replace(INPUT_FILE_TOKEN, stream.getFile().getPath());
@@ -173,12 +172,17 @@ public class ExternalParser extends Abst
         }
 
         // Execute
-        Process process;
+        Process process = null;
+      try{
         if(cmd.length == 1) {
            process = Runtime.getRuntime().exec( cmd[0] );
         } else {
            process = Runtime.getRuntime().exec( cmd );
         }
+      }
+      catch(Exception e){
+    	  e.printStackTrace();
+      }
 
         try {
             if(inputToStdIn) {
@@ -258,7 +262,7 @@ public class ExternalParser extends Abst
      * @param stream input stream
      */
     private void sendInput(final Process process, final InputStream stream) {
-        new Thread() {
+        Thread t = new Thread() {
             public void run() {
                 OutputStream stdin = process.getOutputStream();
                 try {
@@ -266,7 +270,12 @@ public class ExternalParser extends Abst
                 } catch (IOException e) {
                 }
             }
-        }.start();
+        };
+        t.start();
+        try{
+     	   t.join();
+        }
+        catch(InterruptedException ignore){}        
     }
 
     /**
@@ -277,7 +286,7 @@ public class ExternalParser extends Abst
      * @param process process
      */
     private void ignoreStream(final InputStream stream) {
-        new Thread() {
+        Thread t = new Thread() {
             public void run() {
                 try {
                     IOUtils.copy(stream, new NullOutputStream());
@@ -286,11 +295,16 @@ public class ExternalParser extends Abst
                     IOUtils.closeQuietly(stream);
                 }
             }
-        }.start();
+        };
+        t.start();
+        try{
+     	   t.join();
+        }
+        catch(InterruptedException ignore){}
     }
     
     private void extractMetadata(final InputStream stream, final Metadata metadata) {
-       new Thread() {
+       Thread t = new Thread() {
           public void run() {
              BufferedReader reader;
               reader = new BufferedReader(new InputStreamReader(stream, IOUtils.UTF_8));
@@ -317,7 +331,12 @@ public class ExternalParser extends Abst
                 IOUtils.closeQuietly(stream);
             }
           }
-       }.start();
+       };
+	   t.start();
+       try{
+    	   t.join();
+       }
+       catch(InterruptedException ignore){}
     }
     
     /**
@@ -339,8 +358,7 @@ public class ExternalParser extends Abst
        
        try {
           Process process= Runtime.getRuntime().exec(checkCmd);
-          int result = process.waitFor();
-          
+          int result = process.waitFor(); 
           for(int err : errorValue) {
              if(result == err) return false;
           }

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java?rev=1681640&r1=1681639&r2=1681640&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java Mon May 25 19:31:27 2015
@@ -184,7 +184,7 @@ public final class ExternalParsersConfig
             }
             if (child.getTagName().equals(ERROR_CODES_TAG)) {
                String errs = getString(child);
-               StringTokenizer st = new StringTokenizer(errs);
+               StringTokenizer st = new StringTokenizer(errs, ",");
                while(st.hasMoreElements()) {
                   try {
                      String s = st.nextToken();
@@ -196,12 +196,13 @@ public final class ExternalParsersConfig
       }
       
       if(command != null) {
+    	 String [] theCommand = command.split(" ");
          int[] errVals = new int[errorVals.size()];
          for(int i=0; i<errVals.length; i++) {
             errVals[i] = errorVals.get(i);
          }
          
-         return ExternalParser.check(command, errVals);
+         return ExternalParser.check(theCommand, errVals);
       }
       
       // No check command, so assume it's there

Modified: tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser?rev=1681640&r1=1681639&r2=1681640&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser (original)
+++ tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser Mon May 25 19:31:27 2015
@@ -64,4 +64,4 @@ org.apache.tika.parser.jdbc.SQLite3Parse
 org.apache.tika.parser.isatab.ISArchiveParser
 org.apache.tika.parser.geoinfo.GeographicInformationParser
 org.apache.tika.parser.geo.topic.GeoParser
-
+org.apache.tika.parser.external.CompositeExternalParser