<?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.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
    <apidefs>
        <apidef name="J2EEDDAPI">J2EE Deployment Descriptor API</apidef>
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

    <changes>
    
        <change id="webDDApiAdded">
            <api name="J2EEDDAPI"/>
            <summary>Web Deployment Descriptor merged into this API.</summary>
            <version major="1" minor="3"/>
            <date day="12" month="1" year="2005"/>
            <author login="pbuzek@netbeans.org"/>
            <compatibility binary="incompatible" source="incompatible" semantic="incompatible" addition="yes" modification="yes"/>
            <description>
                <p>
                    The DD API for web.xml was added. Some classes were moved into common package.
                </p>
            </description>
            <package name="org.netbeans.modules.j2ee.dd.api.web"/>
            <package name="org.netbeans.modules.j2ee.dd.api.ejb"/>
            <package name="org.netbeans.modules.j2ee.dd.api.application"/>
            <package name="org.netbeans.modules.j2ee.dd.api.common"/>
            <issue number="53320"/>
        </change>
        <change id="javaEE7DDVersionsAdded">
            <api name="J2EEDDAPI"/>
            <summary>Added deployment descriptors versions for the JavaEE7.</summary>
            <version major="1" minor="29"/>
            <date day="28" month="3" year="2013"/>
            <author login="marfous@netbeans.org"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" modification="no" deprecation="no"/>
            <description>
                New DD versions of the ejb-jar.xml, web.xml, web-fragment.xml, application.xml, application-client.xml for JavaEE7 platform.
            </description>
            <class package="org.netbeans.modules.j2ee.dd.api.application" name="Application"/>
            <class package="org.netbeans.modules.j2ee.dd.api.client" name="AppClient"/>
            <class package="org.netbeans.modules.j2ee.dd.api.ejb" name="EjbJar"/>
            <class package="org.netbeans.modules.j2ee.dd.api.web" name="WebApp"/>
            <issue number="228033"/>
        </change>

    </changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE j2ee/ddapi/arch/apichanges.xml

-->
    <head>
      <title>Change History for the J2EE Deployment Descriptor API</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="index.html">J2EE Deployment Descriptor API</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.netbeans.modules.j2ee.dd/1"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
