  =========================================================================
  ==  NOTICE file for use with the Apache License, Version 2.0,          ==
  ==  in this case for the Apache ODE distribution.                      ==
  =========================================================================

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

COPYRIGHT NOTICES

Copyright 1999-2006 Intalio

This product includes software developed by Intalio
http://www.intalio.com

Copyright 2006 Sybase

This product includes software developed by Sybase.
http://www.sybase.com

=========================================================================
==  Derby Notice                                                       ==
=========================================================================

Portions of Derby were orginally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Derby CLA".

The portion of the functionTests under 'nist' was originally 
developed by the National Institute of Standards and Technology (NIST), 
an agency of the United States Department of Commerce, and adapted by
International Business Machines Corporation in accordance with the NIST
Software Acknowledgment and Redistribution document at
http://www.itl.nist.gov/div897/ctg/sql_form.htm


=========================================================================
==  OpenJPA Notice                                                     ==
=========================================================================

* OpenJPA includes software developed by the SERP project
    Copyright (c) 2002-2006, A. Abram White. All rights reserved.

* OpenJPA is bundled with the binaries from the JPA specification, by
    Sun Microsystems and licensed under the CDDL 1.0. The source code is
    available at: https://glassfish.dev.java.net/source/browse/glassfish/

=========================================================================
==  Saxon Notice                                                      ==
=========================================================================

The Program includes all or portions of the following software: "The 
Saxon XSLT and XQuery Processor from Saxonica Limited" distributed under
an MPL v1.0 license. Please refer to the homepage URL at 
http://www.saxonica.com/.

=========================================================================
==  Sun Notice                                                         ==
=========================================================================

This product includes software (Java Activation Framework) which was 
developed by Sun Microsystems under a CDDL license.
(http://www.sun.com/) 

=========================================================================
==  Woodstox Notice                                                    ==
=========================================================================

This product includes software developed by the Woodstox Project 
(http://woodstox.codehaus.org/).

=========================================================================
==  WSDL4J Notice                                                      ==
=========================================================================

The Program includes all or portions of the following software which is 
subject to the Common Public License ("CPL Code").  This software 
consists of voluntary contributions made by many individuals on behalf of
the WSDL4J project.

You may download the source version of the WSDL4J component at 
http://sourceforge.net/projects/wsdl4j

=========================================================================
==  Xalan Notice                                                      ==
=========================================================================

Apache Xalan (Xalan serializer)
Copyright 1999-2006 The Apache Software Foundation

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

Portions of this software was originally based on the following:
    - software copyright (c) 1999-2002, Lotus Development Corporation.,
    http://www.lotus.com.
    - software copyright (c) 2001-2002, Sun Microsystems.,
    http://www.sun.com.
    - software copyright (c) 2003, IBM Corporation., 
    http://www.ibm.com.

=========================================================================
==  Xerces Notice                                                      ==
=========================================================================

Portions of this software were originally based on the following:
  - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
  - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
  - voluntary contributions made by Paul Eng on behalf of the 
    Apache Software Foundation that were originally developed at 
    iClick, Inc., software copyright (c) 1999.


=========================================================================
==  XmlBeans Notice                                                    ==
=========================================================================

Portions of this software were originally based on the following:
  - software copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/>.

Aside from contributions to the Apache XMLBeans project, this
software also includes:

 - one or more source files from the Apache Xerces-J and Apache Axis
   products, Copyright (c) 1999-2003 Apache Software Foundation

 - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web
   Consortium (Massachusetts Institute of Technology, European Research
   Consortium for Informatics and Mathematics, Keio University)

 - resolver.jar from Apache Xml Commons project,
   Copyright (c) 2001-2003 Apache Software Foundation

 - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/,
   Copyright 2002 Yuval Oren under the terms of the Apache Software 
   License 2.0

=========================================================================
==  OASIS Notice                                                       ==
=========================================================================

OASIS takes no position regarding the validity or scope of any 
intellectual property or other rights that might be claimed to pertain 
to the implementation or use of the technology described in this 
document or the extent to which any license under such rights might or 
might not be available; neither does it represent that it has made any 
effort to identify any such rights. Information on OASIS's procedures 
with respect to rights in OASIS specifications can be found at the 
OASIS website. Copies of claims of rights made available for 
publication and any assurances of licenses to be made available, or the
result of an attempt made to obtain a general license or permission for 
the use of such proprietary rights by implementors or users of this 
specification, can be obtained from the OASIS Executive Director.

OASIS invites any interested party to bring to its attention any 
copyrights, patents or patent applications, or other proprietary rights 
which may cover technology that may be required to implement this 
specification. Please address the information to the OASIS Executive 
Director.

Copyright (C) OASIS Open (2004-2005). All Rights Reserved.

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. 

The limited permissions granted above are perpetual and will not be 
revoked by OASIS or its successors or assigns. 

This document and the information contained herein is provided on an 
"AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, 
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
