Apache UIMA BSFAnnotator software component
Copyright 2007-2009 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This software also includes:

    - Beanshell 1.3.0, lightweight Scripting for Java, from http://www.beanshell.org/

    - Rhino, the open-source implementation of JavaScript written entirely in Java, from 
      http://www.mozilla.org/rhino/
      


      

       
