<?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.
   ***************************************************************
   -->
<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
  <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
  <primitive>true</primitive>
  <annotatorImplementationName>org.apache.uima.ae.noop.NoOpAnnotator</annotatorImplementationName>
  <analysisEngineMetaData>
    <name>NoOpAnnotatorWithException</name>
    <description>Annotator That Does Nothin</description>
    <version>1.0</version>
    <vendor>The Apache Software Foundation</vendor>
    
    <configurationParameters>
      <configurationParameter>
        <name>ErrorFrequency</name>
        <description>Frequency of Generated Errors</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>

      <configurationParameter>
        <name>ProcessDelay</name>
        <description>Process Delay</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
    
    </configurationParameters>
    
    <configurationParameterSettings>
      <nameValuePair>
        <name>ErrorFrequency</name>
        <value>
          <integer>1</integer>
        </value>
      </nameValuePair>

      <nameValuePair>
        <name>ProcessDelay</name>
        <value>
          <integer>0</integer>
        </value>
      </nameValuePair>
    
    </configurationParameterSettings>
    
    <typeSystemDescription>
    </typeSystemDescription>
    
    <capabilities>
    </capabilities>
	
    <operationalProperties>
		<modifiesCas>true</modifiesCas>
		<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
		<outputsNewCASes>false</outputsNewCASes>
	</operationalProperties>	  
  </analysisEngineMetaData>
</analysisEngineDescription>

