Apache jUDDI
Copyright 2004-2011 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product also includes schemas and specification developed by:
      - the W3C consortium (http://www.w3c.org)
      (http://www.w3.org/XML/1998/namespace)

This product includes schemas and specification developed by Oasis:
      Copyright (c) 2000-2002 by Accenture, Ariba, Inc., Commerce One, Inc.
		Fujitsu Limited, Hewlett-Packard Company, i2 Technologies, Inc., Intel
		Corporation, International Business Machines Corporation, Microsoft
		Corporation, Oracle Corporation, SAP AG, Sun Microsystems, Inc., and
		VeriSign, Inc. All Rights Reserved. Copyright (c) OASIS Open
		2002-2004. 
		
		All Rights Reserved. Version 3.0.2 This document and
		translations of it may be copied and furnished to others, and
		derivative works that comment on or otherwise explain it or assist in
		its implementation may be prepared, copied, published and distributed,
		in whole or in part, without restriction of any kind, provided that
		the above copyright notice and this paragraph are included on all such
		copies and derivative works. However, this document itself may not be
		modified in any way, such as by removing the copyright notice or
		references to OASIS, except as needed for the purpose of developing
		OASIS specifications, in which case the procedures for copyrights
		defined in the OASIS Intellectual Property Rights document must be
		followed, or as required to translate it into languages other than
		English.

This product includes files and components protected under the Open Font License.
These fonts can only be distributed as part of a piece of software, but not individually. See the license for details.
http://scripts.sil.org/OFL.  More information on included components for the jUDDI GUI are located
within the source tree at juddi-gui/license
