You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2015/02/04 19:18:11 UTC

svn commit: r1657361 - in /uima/uima-as/trunk: src/main/scripts/ src/test/java/org/apache/uima/as/dd/ uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/

Author: schor
Date: Wed Feb  4 18:18:10 2015
New Revision: 1657361

URL: http://svn.apache.org/r1657361
Log:
[UIMA-4213] dd2spring - throw new exception if ERROR occurs

Added:
    uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2springException.java
Modified:
    uima/uima-as/trunk/src/main/scripts/dd2spring.xsl
    uima/uima-as/trunk/src/test/java/org/apache/uima/as/dd/Dd2SpringTest.java
    uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java

Modified: uima/uima-as/trunk/src/main/scripts/dd2spring.xsl
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/src/main/scripts/dd2spring.xsl?rev=1657361&r1=1657360&r2=1657361&view=diff
==============================================================================
--- uima/uima-as/trunk/src/main/scripts/dd2spring.xsl (original)
+++ uima/uima-as/trunk/src/main/scripts/dd2spring.xsl Wed Feb  4 18:18:10 2015
@@ -809,7 +809,7 @@
           <xsl:with-param name="inputOrReturn" select="'input'"/>
           <xsl:with-param name="kind" select="'primitive'"/>  <!-- used in ctrl id name -->
           <xsl:with-param name="msgHandlerChainID" select="f:getMetaMsgHandlerID(., 'primitive')"/>
-          <xsl:with-param name="nbrConcurrentConsumers" select="u:scaleout/@numberOfInstances"/> 
+          <xsl:with-param name="nbrConcurrentConsumers" select="fn:string(u:scaleout/@numberOfInstances)"/> 
           <xsl:with-param name="remote" select="()"/>
           <xsl:with-param name="poolingTaskExecutor" select="$poolingTaskExecutorID"/>     
         </xsl:call-template>
@@ -1517,9 +1517,9 @@
     <xsl:variable name="isTopLvlSync" as="xs:boolean" select=
       "if (../u:service/u:analysisEngine[(not(@async)) or (@async = ('no', 'false'))]) then fn:true() else fn:false()"/>
     
-    <xsl:variable name="nbrInstances" select="../u:service/u:analysisEngine/u:scaleout/@numberOfInstances"/>
+    <xsl:variable name="nbrInstances" select="fn:string(../u:service/u:analysisEngine/u:scaleout/@numberOfInstances)"/>
     
-    <xsl:variable name="casPoolSize" as="xs:integer">      
+    <xsl:variable name="casPoolSize">      
       <xsl:choose>
         <xsl:when test="$isTopLvlSync and 
           $nbrInstances and
@@ -1528,13 +1528,13 @@
           <xsl:sequence select="f:msgWithLineNumber(
                 'WARN',
                 ('Top level Async Primitive specifies a scaleout of', $nbrInstances,
-                 ', but also specifies a Cas Pool size of', ./@numberOfCASes,
+                 ', but also specifies a Cas Pool size of', fn:string(./@numberOfCASes),
                  '.  The Cas Pool size is being forced to be the same as the scaleout.'), 
                 .)"/>
           <xsl:sequence select="$nbrInstances"/>
         </xsl:when>
         <xsl:otherwise>
-          <xsl:sequence select="if (./@numberOfCASes) then ./@numberOfCASes else '1'"/>
+          <xsl:sequence select="if (./@numberOfCASes) then fn:string(./@numberOfCASes) else '1'"/>
         </xsl:otherwise>
       </xsl:choose>
     </xsl:variable>
@@ -2020,7 +2020,7 @@
           <xsl:when test="u:scaleout">
             <!--xsl:message select="'*** defaulting scaleout'"/>
             <xsl:message select="u:scaleout"/-->
-            <u:scaleout numberOfInstances="{if (u:scaleout/@numberOfInstances) then u:scaleout/@numberOfInstances else 1}"/>
+            <u:scaleout numberOfInstances="{if (u:scaleout/@numberOfInstances) then fn:string(u:scaleout/@numberOfInstances) else 1}"/>
           </xsl:when>
           <xsl:otherwise>
             <u:scaleout numberOfInstances="1"/>
@@ -3027,5 +3027,8 @@
       *** <xsl:sequence select="concat($kind,':')"/> line-number: <xsl:sequence select="saxon:line-number($node)"/>
       <xsl:sequence select="$msg"/> 
     </xsl:message>
+    <!-- xsl:if test="$kind eq 'ERROR'">
+      <xsl:sequence select="error()"/>
+    </xsl:if-->
   </xsl:function>
 </xsl:stylesheet>

Modified: uima/uima-as/trunk/src/test/java/org/apache/uima/as/dd/Dd2SpringTest.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/src/test/java/org/apache/uima/as/dd/Dd2SpringTest.java?rev=1657361&r1=1657360&r2=1657361&view=diff
==============================================================================
--- uima/uima-as/trunk/src/test/java/org/apache/uima/as/dd/Dd2SpringTest.java (original)
+++ uima/uima-as/trunk/src/test/java/org/apache/uima/as/dd/Dd2SpringTest.java Wed Feb  4 18:18:10 2015
@@ -26,6 +26,7 @@ import java.util.regex.Pattern;
 import junit.framework.TestCase;
 
 import org.apache.uima.adapter.jms.service.Dd2spring;
+import org.apache.uima.adapter.jms.service.Dd2springException;
 import org.apache.uima.test.junit_extension.FileCompare;
 import org.apache.uima.test.junit_extension.TeePrintStream;
 
@@ -81,6 +82,9 @@ public class Dd2SpringTest extends TestC
   private static Pattern nevermatch = Pattern.compile("     ");
   
   private static Dd2spring dd2SpringInstance = new Dd2spring();
+  static {
+    dd2SpringInstance.setTestMode();  // prevents throwing on errors
+  }
   
   protected void setUp() {
 
@@ -107,7 +111,7 @@ public class Dd2SpringTest extends TestC
     checkDd2SpringErrMsg(
         "defaultingPrimAEMultInstanceDiffCasPool.xml",
         "running test defaultingPrimAEMultInstanceDiffCasPool.xml: \n" +
-"      *** WARN: line-number: 26 Top level Async Primitive specifies a scaleout of numberOfInstances=\"40\", but also specifies a Cas Pool size of numberOfCASes=\"30\".  The Cas Pool size is being forced to be the same as the scaleout.");
+"      *** WARN: line-number: 26 Top level Async Primitive specifies a scaleout of 40 , but also specifies a Cas Pool size of 30 .  The Cas Pool size is being forced to be the same as the scaleout.");
 
   }
   
@@ -243,6 +247,7 @@ public class Dd2SpringTest extends TestC
  
   private void checkDd2Spring(String dd) throws Exception {
     System.err.print("running test " + dd + ": ");
+
     File springContextFile = 
       dd2SpringInstance.convertDd2Spring(pathToDds + dd, dd2SpringXsltFilePath, saxonClasspath, "");
 

Modified: uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java?rev=1657361&r1=1657360&r2=1657361&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java (original)
+++ uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2spring.java Wed Feb  4 18:18:10 2015
@@ -19,8 +19,12 @@
 
 package org.apache.uima.adapter.jms.service;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintStream;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
@@ -31,6 +35,7 @@ import java.util.List;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.adapter.jms.JmsConstants;
+import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.Level;
 
 public class Dd2spring {
@@ -40,18 +45,25 @@ public class Dd2spring {
   private static final Class THIS_CLASS = Dd2spring.class;
 
   private ClassLoader saxonClassLoader;
+  
+  private boolean testMode = false;
 
+  public void setTestMode() {
+    testMode = true;
+  }
+  
   /**
    * Test driver arg = path_to_source, path_to_xslt, path_to_saxon_jar, uima-as-debug flag
    * 
    * @param args
+   * @throws Dd2springException 
    */
-  public static void main(String[] args) {
+  public static void main(String[] args) throws Dd2springException {
     new Dd2spring().convertDd2Spring(args[0], args[1], args[2], args[3]);
   }
 
   public File convertDd2Spring(String ddFilePath, String dd2SpringXsltFilePath,
-          String saxonClasspath, String uimaAsDebug) {
+          String saxonClasspath, String uimaAsDebug) throws Dd2springException {
 
     URL urlForSaxonClassPath;
     try {
@@ -76,7 +88,8 @@ public class Dd2spring {
       return null;
     }
 
-    convertDd2Spring(tempFile, ddFilePath, dd2SpringXsltFilePath, urlForSaxonClassPath);
+    String errData = convertDd2Spring(tempFile, ddFilePath, dd2SpringXsltFilePath, urlForSaxonClassPath);
+    System.err.print(errData);
 
     // delete the file when terminating if
     // a) uimaAsDebug is not specified (is null) or
@@ -84,7 +97,16 @@ public class Dd2spring {
     if (null == uimaAsDebug || uimaAsDebug.equals("")) {
       tempFile.deleteOnExit();
     }
-
+    
+    // scan output for "ERROR: " and throw if found
+    // https://issues.apache.org/jira/browse/UIMA-4213
+    if (errData.contains("*** ERROR: ")) {
+      if (testMode) {
+        System.out.println("DD2Spring transformation had one or more errors; the tempFile created was" + tempFile.getAbsolutePath());
+      } else {
+        throw new Dd2springException("DD2spring transformation had one or more errors; the tempFile created was" + tempFile.getAbsolutePath());
+      }
+    }
     return tempFile;
   }
 
@@ -98,7 +120,7 @@ public class Dd2spring {
    *          classpath for saxon8.jar
    * @return temp file with generated Spring from dd2spring transform
    */
-  public void convertDd2Spring(File tempFile, String ddFilePath, String dd2SpringXsltFilePath,
+  public String convertDd2Spring(File tempFile, String ddFilePath, String dd2SpringXsltFilePath,
           URL saxonClasspathURL) {
 
     if (null == saxonClassLoader) {
@@ -111,72 +133,88 @@ public class Dd2spring {
     }
     Class mainStartClass = null;
     try {
-      mainStartClass = Class.forName("net.sf.saxon.Transform", true, saxonClassLoader);
-    } catch (ClassNotFoundException e) {
-      System.err.println("Error - can't load Saxon jar from " + saxonClasspathURL
-              + " for dd2spring transformation.");
-      e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_saxon_missing_SEVERE");
-      return;
-    }
-
-    // args for saxon
-    // -l -s deployment_descriptor} -o output_file_path dd2spring.xsl_file_path
-
-    List<String> argsForSaxon = new ArrayList<String>();
-    argsForSaxon.add("-l"); // turn on line numbers
-    argsForSaxon.add("-s"); // source file
-    argsForSaxon.add(ddFilePath); // source file
-    argsForSaxon.add("-o"); // output file
-    argsForSaxon.add(tempFile.getAbsolutePath()); // output file
-    argsForSaxon.add(dd2SpringXsltFilePath); // xslt transform to apply
-
-    if (null != System.getProperty("uima-as.dd2spring.noTempQueues")) {
-      argsForSaxon.add("noTempQueues=true"); // disable generate of temp queues (for testing)
-    }
-
-    Method mainMethod = null;
-    try {
-      mainMethod = mainStartClass.getMethod("main", mainArg);
-    } catch (SecurityException e) {
-      e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_security_exception_calling_saxon");
-      return;
-    } catch (NoSuchMethodException e) {
-      e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_internal_error_calling_saxon");
-      return;
-    }
-    try {
-      mainMethod.invoke(null,
-              new Object[] { argsForSaxon.toArray(new String[argsForSaxon.size()]) });
-    } catch (IllegalArgumentException e) {
+      try {
+        mainStartClass = Class.forName("net.sf.saxon.Transform", true, saxonClassLoader);
+      } catch (ClassNotFoundException e) {
+        System.err.println("Error - can't load Saxon jar from " + saxonClasspathURL
+                + " for dd2spring transformation.");
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_saxon_missing_SEVERE");
+        return "";
+      }
+  
+      // args for saxon
+      // -l -s deployment_descriptor} -o output_file_path dd2spring.xsl_file_path
+  
+      List<String> argsForSaxon = new ArrayList<String>();
+      argsForSaxon.add("-l"); // turn on line numbers
+      argsForSaxon.add("-s"); // source file
+      argsForSaxon.add(ddFilePath); // source file
+      argsForSaxon.add("-o"); // output file
+      argsForSaxon.add(tempFile.getAbsolutePath()); // output file
+      argsForSaxon.add(dd2SpringXsltFilePath); // xslt transform to apply
+  
+      if (null != System.getProperty("uima-as.dd2spring.noTempQueues")) {
+        argsForSaxon.add("noTempQueues=true"); // disable generate of temp queues (for testing)
+      }
+  
+      Method mainMethod = null;
+      try {
+        mainMethod = mainStartClass.getMethod("main", mainArg);
+      } catch (SecurityException e) {
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_security_exception_calling_saxon");
+        return "";
+      } catch (NoSuchMethodException e) {
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_internal_error_calling_saxon");
+        return "";
+      }
+      PrintStream savedErr = System.err;
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      PrintStream ps = new PrintStream(baos);
+      try {
+        System.setErr(ps);
+        mainMethod.invoke(null,
+                new Object[] { argsForSaxon.toArray(new String[argsForSaxon.size()]) });
+      } catch (IllegalArgumentException e) {
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_internal_error_calling_saxon");
+        ps.close();
+        return baos.toString("UTF-8");
+      } catch (IllegalAccessException e) {
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_internal_error_calling_saxon");
+        ps.close();
+        return baos.toString("UTF-8");
+      } catch (InvocationTargetException e) {
+        e.printStackTrace();
+        UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
+                "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+                "UIMA_dd2spring_internal_error_calling_saxon");
+        ps.close();
+        return baos.toString("UTF-8");
+      } finally {
+        System.setErr(savedErr);
+      }
+  
+      ps.close();
+      return baos.toString("UTF-8");
+    } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_internal_error_calling_saxon");
-      return;
-    } catch (IllegalAccessException e) {
-      e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_internal_error_calling_saxon");
-      return;
-    } catch (InvocationTargetException e) {
-      e.printStackTrace();
-      UIMAFramework.getLogger(THIS_CLASS).logrb(Level.CONFIG, THIS_CLASS.getName(),
-              "convertDD2Spring", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
-              "UIMA_dd2spring_internal_error_calling_saxon");
-      return;
+      return "";
     }
-
-    return;
+    
   }
 
 }

Added: uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2springException.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2springException.java?rev=1657361&view=auto
==============================================================================
--- uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2springException.java (added)
+++ uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/service/Dd2springException.java Wed Feb  4 18:18:10 2015
@@ -0,0 +1,40 @@
+/*
+ * 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.uima.adapter.jms.service;
+
+public class Dd2springException extends Exception {
+
+  public Dd2springException() {
+    super();
+  }
+
+  public Dd2springException(String message) {
+    super(message);
+  }
+
+  public Dd2springException(Throwable cause) {
+    super(cause);
+  }
+
+  public Dd2springException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+}