Apache Abdera
============================

Apache Abdera is a high-performance, functionally complete
implementation of the IETF Atom Syndication Format (RFC 4287) and Atom
Publishing Protocol specifications.

Incubation Disclaimer
============================

Abdera is an effort undergoing incubation at the Apache Software
Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is
required of all newly accepted projects until a further review
indicates that the infrastructure, communications, and decision making
process have stabilized in a manner consistent with other successful
ASF projects.  While incubation status is not necessarily a reflection
of the completeness or stability of the code, it does indicate that
the project has yet to be fully endorsed by the ASF.

Getting Started
============================

See the Getting Started Guide @ 
  
  http://incubator.apache.org/

We welcome contributions of all kinds, for details of how you can help
http://incubator.apache.org/abdera/faq.html

Please refer to the website for details of finding the issue tracker, 
email lists, wiki or IRC channel

  http://incubator.apache.org/abdera/

Please help us make Apache Abdera better - we appreciate any feedback
you may have.


Changes
============================
0.4.0 - A simplified server side framework and API for implementing
        services.
      - Sever side filter API for intercepting requests and 
        implementing concerns such as security.
      - A collection of pre-bundled Atom Publishing Protocol adapters 
        for JDBC, JCR, filesystems, and CouchDB.
      - An improved JSON serialization mechanism.
      - New extensions such as OAuth support.
      - New StreamWriter interface for fast Atom document serialization
      - Improved Unicode performance for IRI implementation
      - URI Template Support
      - HTML Parser 
      - Many API improvements and bug fixes!
0.3.0 - Support for the Atompub final draft 
      - Refactored and simplified Server framework
      - Refactored and simplified AbderaClient
      - ExtensionFactory can now provide the mime type for extension elements
      - Improved extensibility
      - Updated dependencies
      - XPath support improvements
      - Geotagging extensions
      - Simple Sharing extensions
      - WSSE Authentication 
      - Bidi extensions
      - Atompub features extensions
      - Feed paging extensions
      - Feed license extensions
      - XML Encryption with Diffie-Hellman key exchange
      - Spring integration support
      - Extensions now packaged in separate jars for modular distribution
      - Improved error handling
      - More examples
      - Less bugs
      - Lots of other improvements
0.2.2 - Upgrade dependencies to Axiom 1.2.1
      - Remove dependency on Stax Reference Implementation
      - Fix Stax API conformance issues so we can work with more Stax parsers
      - Fix XHTML/XML Entry content bug
      - General code cleanups / Hide constructors not intended for general use


Export Notice
============================
   This distribution includes cryptographic software.  The country in 
   which you currently reside may have restrictions on the import, 
   possession, use, and/or re-export to another country, of 
   encryption software.  BEFORE using any encryption software, please 
   check your country's laws, regulations and policies concerning the
   import, possession, or use, and re-export of encryption software, to 
   see if this is permitted.  See <http://www.wassenaar.org/> for more
   information.

   The U.S. Government Department of Commerce, Bureau of Industry and
   Security (BIS), has classified this software as Export Commodity 
   Control Number (ECCN) 5D002.C.1, which includes information security
   software using or performing cryptographic functions with asymmetric
   algorithms.  The form and manner of this Apache Software Foundation
   distribution makes it eligible for export under the License Exception
   ENC Technology Software Unrestricted (TSU) exception (see the BIS 
   Export Administration Regulations, Section 740.13) for both object 
   code and source code.

   The following provides more details on the included cryptographic
   software:      
   
   http://xml.apache.org/security/
   http://www.bouncycastle.org/
