You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by al...@apache.org on 2007/01/25 21:23:15 UTC

svn commit: r499948 - in /incubator/uima/uimaj/trunk/uimaj-core/src: main/java/org/apache/uima/analysis_engine/impl/ main/java/org/apache/uima/resource/ main/java/org/apache/uima/resource/impl/ main/resources/org/apache/uima/ test/java/org/apache/uima/...

Author: alally
Date: Thu Jan 25 12:23:12 2007
New Revision: 499948

URL: http://svn.apache.org/viewvc?view=rev&rev=499948
Log:
Improved error message when descriptor for fixedFlow or
capabilityLanguageFlow references an undefined delegate key.
UIMA-229: https://issues.apache.org/jira/browse/UIMA-229

Added:
    incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml
Modified:
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/ResourceInitializationException.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceCreationSpecifier_impl.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
    incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java?view=diff&rev=499948&r1=499947&r2=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java Thu Jan 25 12:23:12 2007
@@ -33,11 +33,16 @@
 import java.util.Set;
 import java.util.TreeMap;
 
+import javax.security.auth.callback.LanguageCallback;
+
 import org.apache.uima.Constants;
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
+import org.apache.uima.analysis_engine.metadata.CapabilityLanguageFlow;
+import org.apache.uima.analysis_engine.metadata.FixedFlow;
+import org.apache.uima.analysis_engine.metadata.FlowConstraints;
 import org.apache.uima.analysis_engine.metadata.FlowControllerDeclaration;
 import org.apache.uima.analysis_engine.metadata.SofaMapping;
 import org.apache.uima.analysis_engine.metadata.impl.AnalysisEngineMetaData_impl;
@@ -288,23 +293,41 @@
    * check configuration parameter settings - that must be done by an explicit call to
    * validateConfigurationParameterSettings.
    * 
-   * @param aDesc
-   *          the AnalysisEngineDescripion to validate
-   * 
+   * @param aResourceManager
+   *          a ResourceManager instance to use to resolve imports by name.
+   *  
    * @throws ResourceInitializationException
    *           if <code>aDesc</code> is invalid
    * @throws ResourceConfigurationException
    *           if the configuration parameter settings in <code>aDesc</code> are invalid
    */
-  public void validate() throws ResourceInitializationException, ResourceConfigurationException {
+  public void validate(ResourceManager aResourceManager) throws ResourceInitializationException, ResourceConfigurationException {
     // do validation common to all descriptor types (e.g. config parameters)
-    super.validate();
+    super.validate(aResourceManager);
 
     // TypeSystem may not be specified for an Aggregate Analysis Engine
     if (!isPrimitive() && getAnalysisEngineMetaData().getTypeSystem() != null) {
       throw new ResourceInitializationException(
               ResourceInitializationException.AGGREGATE_AE_TYPE_SYSTEM,
               new Object[] { getSourceUrlString() });
+    }
+    
+    //Keys in FixedFlow or LanguageCapabilityFlow must be defined
+    FlowConstraints fc = getAnalysisEngineMetaData().getFlowConstraints();
+    String[] keys = null;
+    if (fc instanceof FixedFlow) {
+      keys = ((FixedFlow)fc).getFixedFlow();
+    }
+    else if (fc instanceof CapabilityLanguageFlow) {
+      keys = ((CapabilityLanguageFlow)fc).getCapabilityLanguageFlow();
+    }
+    if (keys != null) {
+      for (int i = 0; i < keys.length; i++) {
+        if (!getDelegateAnalysisEngineSpecifiersWithImports().containsKey(keys[i])) {
+          throw new ResourceInitializationException(ResourceInitializationException.UNDEFINED_KEY_IN_FLOW,
+                  new Object[]{getAnalysisEngineMetaData().getName(), keys[i], getSourceUrlString()});
+        }
+      }
     }
   }
 

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/ResourceInitializationException.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/ResourceInitializationException.java?view=diff&rev=499948&r1=499947&r2=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/ResourceInitializationException.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/ResourceInitializationException.java Thu Jan 25 12:23:12 2007
@@ -424,6 +424,13 @@
   public static final String SOFA_MAPPING_NOT_SUPPORTED_FOR_REMOTE = "sofa_mapping_not_supported_for_remote";
 
   /**
+   * Message key for a standard UIMA exception message: The descriptor for Aggregate Analysis Engine "{0}" 
+   * specified an invalid flow.  The key "{1}" was used in the flow but is not defined as a key in the
+   * &lt;delegateAnalysisEngineSpecifiers> element of the descriptor.
+   */
+  public static final String UNDEFINED_KEY_IN_FLOW = "undefined_key_in_flow";
+
+  /**
    * Creates a new exception with a null message.
    */
   public ResourceInitializationException() {

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceCreationSpecifier_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceCreationSpecifier_impl.java?view=diff&rev=499948&r1=499947&r2=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceCreationSpecifier_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceCreationSpecifier_impl.java Thu Jan 25 12:23:12 2007
@@ -205,7 +205,7 @@
    * @throws ResourceConfigurationException
    *           if the configuration parameter settings in <code>aDesc</code> are invalid
    */
-  public void validate() throws ResourceInitializationException, ResourceConfigurationException {
+  public final void validate() throws ResourceInitializationException, ResourceConfigurationException {
     validate(UIMAFramework.newDefaultResourceManager());
   }
   

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties?view=diff&rev=499948&r1=499947&r2=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties Thu Jan 25 12:23:12 2007
@@ -354,6 +354,9 @@
   supported for remote Analysis Engines.  A workaround is to wrap the remotely deployed AE in an Aggregate (on the remote side), \
   and specify Sofa mappings in that aggregate.
   
+undefined_key_in_flow = The descriptor for Aggregate Analysis Engine "{0}" specified an invalid flow.  The key "{1}" was used in the flow \
+  but is not defined as a key in the <delegateAnalysisEngineSpecifiers> element of the descriptor. (Descriptor: {2})
+    
 #---------------------------
 #ResourceAccessException
 #---------------------------

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java?view=diff&rev=499948&r1=499947&r2=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java Thu Jan 25 12:23:12 2007
@@ -462,6 +462,21 @@
     File dataPathDir = JUnitExtension.getFile("TextAnalysisEngineImplTest/dataPathDir");
     resMgr.setDataPath(dataPathDir.getCanonicalPath());
     desc.validate(resMgr); 
+    
+    //test invalid aggregate with undefined key in flow
+    in = new XMLInputSource(JUnitExtension
+            .getFile("TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml"));
+    desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(in);
+    try {
+      desc.validate();  
+      fail();
+    }
+    catch(ResourceInitializationException e) {
+      e.printStackTrace();
+      assertEquals(ResourceInitializationException.UNDEFINED_KEY_IN_FLOW, e.getMessageKey());
+      assertNotNull(e.getMessage());
+      assertFalse(e.getMessage().startsWith("EXCEPTION MESSAGE LOCALIZATION FAILED"));
+    }
   }
 
   public void testGetAllComponentSpecifiers() throws Exception {

Added: incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml?view=auto&rev=499948
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/InvalidAggregate_UndefinedKeyInFlow.xml Thu Jan 25 12:23:12 2007
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ * 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.
+ -->
+
+<!-- Descriptor for testing configuration groups. -->
+
+<taeDescription xmlns="http://uima.apache.org/resourceSpecifier">
+<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+<primitive>false</primitive>
+
+<delegateAnalysisEngineSpecifiers>
+<delegateAnalysisEngine key="Annotator1">
+  <import location="AnnotatorWithConfigurationGroups.xml"/>
+</delegateAnalysisEngine>
+
+<delegateAnalysisEngine key="Annotator2">
+  <import location="AnnotatorWithConfigurationGroups.xml"/>
+</delegateAnalysisEngine>
+</delegateAnalysisEngineSpecifiers> 
+	
+<analysisEngineMetaData>
+<name>Invalid Aggregate - Undefined Key in Flow</name>
+<description>This aggregate descriptor uses key "Annotator3" in its flow, but that key
+   is not defined.  This should be caught during validation.</description>
+<version>1.0</version>
+<vendor>The Apache Software Foundation</vendor>
+
+<flowConstraints>
+  <fixedFlow>
+    <node>Annotator1</node>
+    <node>Annotator2</node>
+    <node>Annotator3</node> <!-- Invalid -->
+  </fixedFlow>
+</flowConstraints>
+
+<!-- Capabilities: Inputs and Outputs -->
+<capabilities>
+<capability>
+<inputs/>
+<outputs/>
+<languagesSupported/>
+</capability>
+</capabilities>
+
+<operationalProperties>
+  <modifiesCas>true</modifiesCas>
+  <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+  <outputsNewCASes>false</outputsNewCASes>
+</operationalProperties>
+	
+</analysisEngineMetaData>
+
+</taeDescription>