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