<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.
-->
<document>
  <properties>
    <title>
       JXPath Release Notes 1.1
    </title>
    <author email="dmitri@apache.org">
       Dmitri Plotnikov
    </author>
  </properties>

  <body>

  <section name="JXPath 1.1 Release Notes">
    <p>
      Most changes in 1.1 are in the internal implementation and do not affect
      public APIs. However there are some new publicly visible features:
      <ul>
        <li>
          Full support for JDOM. Just like with DOM, if a JDOM node
          is the root node of a JXPathContext, the implementation strictly follows
          the XPath 1.0 standard.  A JDOM node can also be a part of a mixed model,
          i.e. the value of a property, variable, container, collection element
          etc.
          <br/>
        </li>
        <li>
          Pointer has an additional method: getNode(), which returns the raw
          value without converting it to a primitive value.  This makes
          a difference when you are working with DOM/JDOM and want to obtain
          the Node itself, not the textual value of the Node.
          <br/>
        </li>
        <li>
          Support for DynaBeans
          (see <a href="http://commons.apache.org/beanutils">Jakarta
          Commons BeanUtils</a>).
          <br/>
        </li>
        <li>
          Refactored XML parsing by container to allow for alternate parsers.
          All you do now is specify which model you want the container to use -
          DOM (default) or JDOM.  From that point the processing is transparent.
          See
          <a href="apidocs/org/apache/commons/jxpath/xml/DocumentContainer.html">
            <code>org.apache.commons.jxpath.xml.DocumentContainer.</code></a>
          <br/>
        </li>
        <li>
          The <code>format-number</code> XSLT function is now supported.
          In order to provide full conformance with the standard, we also
          needed to introduce the format customization mechanism known in
          XSLT as <code>&lt;xsl:decimal-format&gt;</code> (see
          <a href="http://www.w3schools.com/xsl/el_decimal-format.asp">
          W3Schools tutorial</a>).  The new methods of JXPathContext:
          <code>setDecimalFormatSymbols()</code> and
          <code>getDecimalFormatSymbols()</code> fulfill that requirement.
          <br/>
        </li>
        <li>
          The <code>attribute::</code> axis is now supported models other than
          DOM/JDOM.  For beans and maps it is interpreted the same way as
          the <code>"child::"</code> axis.
          <br/>
        </li>
        <li>
          In JXPath 1.0 you could only register DynamicPropertyHandlers for
          concrete classes, now you can also register them for interfaces.
          <br/>
        </li>
        <li>
          The implementation of <code>setValue()</code> has changed for DOM/JDOM
          nodes.  In JXPath 1.0 it would replace text in the element, but leave
          sub-elements alone.  The new implementation is more consistent: it
          drops all subelements first.  Also, if you pass a Node as the new
          value, it will insert the Node in the tree.
          <br/>
        </li>
        <li>
          If you need to evaluate multiple paths relative to a certain node
          in the object graph, you can now create a relative JXPathContext.
          Obtain the pointer for the location that is supposed to define
          the relative context and then a relative context by calling
          <code>context.getRelativeContext(pointer)</code>.
          <br/>
        </li>
        <li>
          The JUnit tests for JXPath have been completely redisigned and
          significantly enhanced.
          <br/>
        </li>
      </ul>
     </p>

    </section>

    <section name="Acknowledgements">
      <p>
        Great thanks to everybody who reported problems, helped to trace them,
        suggested changed or simply provided encouragement. Special thanks to
        <ul>
          <li>Trond Aasan</li>
          <li>Bjorn Bength</li>
          <li>Derek A. Bodin</li>
          <li>BoD</li>
          <li>Stephen Colebourne</li>
          <li>Torsten Curdt</li>
          <li>Pierre Delisle</li>
          <li>Ruud Diterwich</li>
          <li>Peter Donald</li>
          <li>Kate Dvortsova</li>
          <li>Eduardo Francos</li>
          <li>dIon Gillard</li>
          <li>Mike Hogan</li>
          <li>Ivelin Ivanov</li>
          <li>Per Kreipke</li>
          <li>Kees Kuip</li>
          <li>David Li</li>
          <li>Ulrich Nicolas Lisse</li>
          <li>Costin Manolache</li>
          <li>Thorsten Mauch</li>
          <li>Craig R. McClanahan</li>
          <li>Markus Menner</li>
          <li>Daniel Michalik</li>
          <li>Steve Pannier</li>
          <li>Ed Peters</li>
          <li>Kenneth Petersen</li>
          <li>Ovidiu Predescu</li>
          <li>Erik Pugh</li>
          <li>Robert Rasmussen</li>
          <li>Vasco C. Rocha</li>
          <li>Francois Swiegers</li>
          <li>Joern Turner</li>
          <li>Knut Wannheden</li>
          <li>Andrew Wulf</li>
          <li>Jason van Zyl</li>
        </ul>
        Thanks!
      </p>

    </section>
  </body>
</document>