OFX4J, an implementation of OFX in Java

Abstract

OFX4J is an implementation of the OFX specification in Java.

Proposal

Open Financial Exchange (see http://ofx.net) is a broad-based framework for exchanging financial data and instructions between customers and their financial institutions. It allows institutions to connect directly to their customers without requiring an intermediary. Open Financial Exchange is an open specification that anyone can implement: any financial institution, transaction processor, software developer, or other party. It uses widely accepted open standards for data formatting (such as XML), connectivity (such as TCP/IP and HTTP), and security (such as SSL).

OFX4J will provide a full client and server implementation of the Open Financial Exchange specification (see http://ofx.net/DownloadPage/Downloads.aspx).

Background

Open Financial Exchange is a unified specification for the electronic exchange of financial data between financial institutions, businesses and consumers via the Internet. Created by CheckFree, Intuit and Microsoft in early 1997, Open Financial Exchange supports a wide range of financial activities including consumer and small business banking (also with image download and loan and amortization download), consumer and small business bill payment, bill presentment and investments, including stocks, bonds and mutual funds, and tax download.

OFX4J was developed by Ryan Heaton and made publicly available http://ofx4j.sourceforge.net/ in July 2008. The initial release supported Version 1 and Version 2 of the OFX specification. Since then the OFX specification has been updated to version 2.1.1.

Rationale

There are very few open source implementations of the OFX specification. Because the specification defines messages and responses, applications must either implement their own Java API around the message set or use a proprietary product. OFX4J aims to solve this by allowing applications to use its API to access any OFX server.

Financial providers that desire to provide an OFX server must currently either implement the specification on their own or purchase a proprietary product. OFX4J solves this by providing a server component that can interact with the financial provider's system.

Initial Goals

The initial goals of the proposed project are:

Current Status

The current code base was created by Ryan Heaton and provides a solid foundation. The code base is already licensed under the Apache 2.0 license. Further development will occur in line with the project's stated goals and wherever the project community determines it should go.

Meritocracy

Apache was chosen for an incubator for the guidance the community can provide in helping the project grow.

Community

There is not yet a strong OFX4J community. The current code base has a number of interested users. The primary goal of the incubating project is to build a self-sustaining community around this code base. All the involved parties have a very strong desire to see OF4JX become the leading OFX platform.

Core Developers

The initial set of committers consist of the primary author as well as employees of one of the companies on the OFX Consortium's governing board.

Alignment

The initial code has been implemented in Java and uses Apache Commons Logging. It has very few dependencies on other projects.

Known Risks

Orphaned products

The initial committers are users of this toolkit and have a long-term interest in use and maintenance of the code.

Inexperience with open source

Several of the commiters are very experienced in Open Source environment. All efforts have and will be made to ensure that the work done and momentum will be in strict adherence to open source and Apache guidelines.

Homogenous developers

As noted above, the initial list of developers consists of the original author and paid employees of the donating company. However, efforts will be made to actively expand the team of developers committing to the project.

The current list of committers bring with them a broad range of experiences with open source, standards, emerging technologies, and product development.

Reliance on salaried developers

The initial set of committers are salaried developers. Through the incubation process, more diversity will hopefully be achieved in many aspects, including reliance on salaried developers.

Relationships with other Apache products

The initial code base has very few external dependencies. It currently uses Commons Logging and Maven. As the project develops use of other Apache projects will be encouraged where it is appropriate.

A fascination with the Apache brand

The committers are intent on developing a strong open source community. We believe that the Apache Software Foundation's emphasis on community development makes it the most suitable choice.

Documentation

Initial source

The initial source for the project will come from the existing code base at Sourceforge. The code will be committed by Ryan Heaton under his ICLA.

External Dependencies

The current implemenation depends on the following components:

Dependency

Type

License

URL

Apache Commons Logging

Required

Apache 2.0

http://commons.apache.org/logging

NanoXML

Required

zlib/libpng

http://devkix.com/nanoxml.php

Tagsoup

Optional

Apache 2.0

http://home.ccil.org/~cowan/XML/tagsoup/

args4j

Optional

MIT

https://args4j.dev.java.net/

apt-jelly

Required

Apache 2.0

http://apt-jelly.sourceforge.net/

Junit

Unit Tests

CPL 1.0

http://www.junit.org/

Apache Maven

Build

Apache 2.0

http://maven.apache.org/

Required Resources

mailing list(s)

Subversion directory

Issue tracking

Initial Committers - Affiliations

Name

Email

CLA

Affiliation

Ryan Heaton

ryan at webcohesion dot com

yes

Independent

Jeffrey Haskovec

haskovez at sbcglobal dot net

no

Independent

Boris Ekelchik

yes

Intuit

Sakib Mehasanewala

no

Intuit

Andy Perrine

no

Intuit

Sponsors

We request that the Apache Incubator PMC sponsor the OFX4J implementation as an incubating project.

Champion: Ralph Goers

Mentors:

OFX4JProposal (last edited 2009-09-20 23:05:59 by localhost)