${pom.name}
Copyright (c) 2005 - 2012 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

This product also includes software under the BSD license 
(see the LICENSE file contained in this distribution), with
the following copyright:

Copyright (c) 2006, Sun Microsystems, Inc.
All rights reserved.
