<?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.
    ***************************************************************
   -->

<taeDescription
   xmlns="http://uima.apache.org/resourceSpecifier" 
   >
   <frameworkImplementation>org.apache.uima.cpp</frameworkImplementation>
<primitive>true</primitive>
   <annotatorImplementationName>libtest</annotatorImplementationName>

   <analysisEngineMetaData>
      <name>TestAnnotator1</name>
      <description>Test annotator for dump annotator</description>
      <version>1.0</version>
      <vendor>IBM Corporation</vendor>

      <configurationParameters>
      </configurationParameters>

      <configurationParameterSettings>
      </configurationParameterSettings>

      <typeSystemDescription>
         <types>
             <import location="tt_typesystem.xml"/>
            <typeDescription>
               <name>TestDump</name>
               <description>Created for test reasons</description>
               <supertypeName>uima.cas.TOP</supertypeName>
            </typeDescription>
         </types>
      </typeSystemDescription>

      <fsIndexes>
      </fsIndexes>

      <capabilities>
         <capability>
            <inputs/>

            <outputs>
               <type>TestDump</type>
            </outputs>

            <languagesSupported>
               <language>en-us</language>
            </languagesSupported>
         </capability>
      </capabilities>

   </analysisEngineMetaData>
</taeDescription>

