<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
   <title>Status File for Apache Commons "JXPath" Component</title>
</head>
<body bgcolor="#FFFFFF">

<center>
<h1>
The Apache Commons <i>JXPath</i> Component</h1></center>

<center>$Id$
<br><a href="#Introduction">[Introduction]</a><a href="#Dependencies">[Dependencies]</a><a href="#Release Info">[Release
Info]</a><a href="#Committers">[Committers]</a><a href="#Action Items">[Action
Items]</a></center>

<p><a NAME="Introduction"></a>
<h3>
1. INTRODUCTION</h3>
The <i>JXPath</i> Component contains a set of Java classes that provide
static utility methods useful in manipulating Java classes that conform
to the JavaBeans Specification naming patterns for bean properties in a
dynamic fashion using the XPath syntax. It also supports Java collections,
objects with Dynamic Properties (like Map, ServletContext etc) and mechanism
for adding support for additional object models.
<p>An innovative and unique feature of this component is the unification
of reference syntax between DOM and Java.
<br><a NAME="Dependencies"></a>
<h3>
2. DEPENDENCIES</h3>
The <i>JXPath</i> component is dependent upon the following external components
for development and use:
<ul>
<li>
<a href="http://java.sun.com/j2se">Java Development Kit</a> (Version 1.3
or later)</li>

<li>
<a href="http://java.sun.com/xml/">JAXP</a> (Version 1.1 or later) build
time dependency only - no runtime dependency</li>

<li>
<a href="http://www.junit.org">JUnit Testing Framework</a> (Version 3.7
or later) - for unit tests only, not required for deployment</li>

<li>
<a href="http://www.webgain.com/products/metamata/java_doc.html">JavaCC</a>
(Version 2.0 or later) - only needed when grammar changes - no build or
runtime dependency</li>
</ul>
<a NAME="Release Info"></a>
<h3>
3. RELEASE INFO</h3>
Current Release: <b>1.1</b>
<p>Planned Next Release: <b>1.2 - timeframe: <i>TBD</i></b>
<p>See the
<a href="#Action Items">Action Items</a> list for tasks that
need to be completed prior to this release.
<br><a NAME="Committers"></a>
<h3>
4. COMMITTERS</h3>
The following individuals are the primary developers and maintainers of
this component. Developers who plan to use <i>JXPath</i> in their own projects
are encouraged to collaborate on the future development of this component
to ensure that it continues to meet a variety of needs.
<ul>
<li>
<a href="mailto:dmitri@apache.org">Dmitri Plotnikov</a></li>
</ul>
<a NAME="Action Items"></a>
<h3>
5. ACTION ITEMS</h3>
The following action items need to be completed prior to a Version 1.2
release of this component:
<br>&nbsp;
<table BORDER >
<tr>
<th WIDTH="80%">Action Item</th>

<th WIDTH="20%">Volunteer</th>

<td><b>Status</b></td>
</tr>

<tr>
<td><i>TBD</i></td>

<td>&nbsp;</td>

<td>&nbsp;</td>
</tr>
</table>

</body>
</html>
